Что такое модуль гироскопа 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 / Написати відгук