Что такое модуль гироскопа GY-521?

Модуль гироскопа gy-521 – это плата расширения для микросхемы MPU-6050, которая содержит 3-осный гироскоп, 3-осный акселерометр, цифровой процессор движения (DMP) и датчик температуры. Этот модуль позволяет измерять углы наклона, ускорение, скорость вращения и температуру объектов, к которым он подключен. Модуль gy-521 может использоваться для различных приложений, таких как робототехника, авиация, игровые устройства, виртуальная реальность и т.д.

Как подключить модуль гироскопа gy-521 MPU-6050 к Arduino?

Для подключения модуля gy-521 к Arduino нужно использовать протокол I2C, который требует всего два провода: SCL (Serial Clock Line) и SDA (Serial Data Line). Модуль gy-521 имеет восемь контактов: VCC, GND, SCL, SDA, XDA, XCL, AD0 и INT. Для этого примера нам понадобятся только первые четыре: VCC, GND, SCL и SDA. Сначала мы подключаем VCC модуля к 5V Arduino. Затем мы подключаем GND модуля к одному из GND Arduino. Далее мы настраиваем соединение I2C между модулем и Arduino. Большинство вариантов Arduino Uno имеют контакты SCL и SDA. Если у вас есть Arduino Uno, просто подключите SCL к SCL и SDA к SDA. Если вы не можете найти контакты SCL и SDA на Arduino, вам придется использовать другие контакты. К сожалению, вы не можете использовать какой-либо контакт. Для каждого типа Arduino SCL и SDA привязаны к разным контактам:

- Arduino Uno, Arduino Ethernet, Arduino Nano: A4 (SDA), A5 (SCL)
- Arduino Mega2560: 20 (SDA), 21 (SCL)
- Ардуино Леонардо: 2 (SDA), 3 (SCL)
- Arduino Due: 20 (SDA), 21 (SCL)

Итак, если у вас Arduino Uno без контактов SCL и SDL, подключите контакт A4 Arduino к контакту SDA модуля. Затем подключите контакт A5 Arduino к контакту SCL модуля.

Как получить данные из модуля гироскопа gy-521?

Для получения данных из модуля gy-521 нужно использовать библиотеку Wire, позволяющую коммуникировать с устройствами I2C. Адрес I2C модуля gy-521 – это 0x68. Если контакт AD0 установлен на HIGH, адрес будет 0x69. Для чтения данных из модуля gy-521 нужно обратиться к разным регистрам, содержащим исходные значения сенсоров. Например, для чтения значений акселерометра нужно обратиться к регистрам 0x3B-0x40, для чтения значений гироскопа – к регистрам 0x43-0x48, для чтения значения температуры – к регистрам 0x41-0x42. Для более подробной информации о регистрах модуля gy-521 можно обратиться к документации.

Пример программы для гироскопа MPU-6050

// (c) Michael Schoeffler 2017, 


#include "Wire.h" // Підключаємо бібліотеку Wire, яка дозволяє спілкуватися з пристроями I2C.

const int MPU_ADDR = 0x68; // Вказуємо адресу I2C модуля MPU-6050. Якщо контакт AD0 встановлений на HIGH, адреса буде 0x69.

int16_t accelerometer_x, accelerometer_y, accelerometer_z; // Змінні для зберігання сирої інформації з акселерометра
int16_t gyro_x, gyro_y, gyro_z; // Змінні для зберігання сирої інформації з гіроскопа
int16_t temperature; // Змінна для зберігання інформації про температуру

char tmp_str[7]; // Тимчасова змінна, яка використовується в функції convert

char *convert_int16_to_str(int16_t i)
{ // Функція, яка перетворює int16 в рядок. Крім того, отримані рядки матимуть однакову довжину в серійному моніторі.
  sprintf(tmp_str, "%6d", i);
  return tmp_str;
}

void setup()
{
  Serial.begin(9600); // Встановлюємо швидкість передачі даних для серійного порту
  Wire.begin(); // Ініціалізуємо I2C шину
  Wire.beginTransmission(MPU_ADDR); // Починаємо передачу до I2C пристрою (плати GY-521)
  Wire.write(0x6B); // Звертаємося до регістру PWR_MGMT_1
  Wire.write(0); // Встановлюємо його в нуль (пробуджуємо MPU-6050)
  Wire.endTransmission(true); // Завершуємо передачу
}
void loop()
{
  Wire.beginTransmission(MPU_ADDR); // Починаємо передачу до I2C пристрою (плати GY-521)
  Wire.write(0x3B); // Починаємо з регістру 0x3B (ACCEL_XOUT_H) [MPU-6000 and MPU-6050 Register Map and Descriptions Revision 4.2, p.40]
  Wire.endTransmission(false); // Параметр вказує, що Arduino відправить перезапуск. В результаті з'єднання залишається активним.
  Wire.requestFrom(MPU_ADDR, 7 * 2, true); // Запитуємо загалом 7*2=14 регістрів

  // "Wire.read()<<8 | Wire.read();" означає, що два регістри читаються та зберігаються в одній змінній
  accelerometer_x = Wire.read() << 8 | Wire.read(); // Читаємо регістри: 0x3B (ACCEL_XOUT_H) та 0x3C (ACCEL_XOUT_L)
  accelerometer_y = Wire.read() << 8 | Wire.read(); // Читаємо регістри: 0x3D (ACCEL_YOUT_H) та 0x3E (ACCEL_YOUT_L)
  accelerometer_z = Wire.read() << 8 | Wire.read(); // Читаємо регістри: 0x3F (ACCEL_ZOUT_H) та 0x40 (ACCEL_ZOUT_L)
  temperature = Wire.read() << 8 | Wire.read(); // Читаємо регістри: 0x41 (TEMP_OUT_H) та 0x42 (TEMP_OUT_L)
  gyro_x = Wire.read() << 8 | Wire.read(); // Читаємо регістри: 0x43 (GYRO_XOUT_H) та 0x44 (GYRO_XOUT_L)
  gyro_y = Wire.read() << 8 | Wire.read(); // Читаємо регістри: 0x45 (GYRO_YOUT_H) та 0x46 (GYRO_YOUT_L)
  gyro_z = Wire.read() << 8 | Wire.read(); // Читаємо регістри: 0x47 (GYRO_ZOUT_H) та 0x48 (GYRO_ZOUT_L)

  // Виводимо отримані дані на серійний монітор
  Serial.print("Accelerometer: ");
  Serial.print(convert_int16_to_str(accelerometer_x));
  Serial.print(" ");
  Serial.print(convert_int16_to_str(accelerometer_y));
  Serial.print(" ");
  Serial.println(convert_int16_to_str(accelerometer_z));

  Serial.print("Gyro: ");
  Serial.print(convert_int16_to_str(gyro_x));
  Serial.print(" ");
  Serial.print(convert_int16_to_str(gyro_y));
  Serial.print(" ");
  Serial.println(convert_int16_to_str(gyro_z));

  Serial.print("Temperature: ");
  Serial.println(temperature / 340.00 + 36.53); // Формула для перетворення сирої інформації про температуру в градуси Цельсія

  delay(1000); // Затримка 1 секунда

}

Статья о gy-521 MPU-6050 Arduino создана по данным из открытых источников. Автор -ШИ


Відгуків: 0 / Написати відгук
Супутні товари
Гироскоп трехосевой MPU6050 GY521
Гироскоп и Акселерометр MPU-6050 3-х осевой гироскоп. Модуль на чипе MPU6050 это 3-осевой гироскоп и акселерометр на три координаты. 3-осевой ускоритель и аппаратное ускорение (DMP: Digital ..
75.00 грн.
Написати відгук
Увага: HTML не підтримується. Використовуйте звичайний текст.
    Погано            Добре