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