3-осьовий датчик прискорення та положення з Arduino
Йдеться про мікросхему датчика MPU-6050, встановлену на модулі GY-521. Використовуючи цей 3-осьовий гіроскоп та 3-осьовий датчик прискорення, можна одночасно розпізнати 6 градусів свободи (DOF = "Градуси Свободи"). Датчик також може вимірювати температуру навколишнього середовища.

Основні характеристики GY-521 (за заявою виробника)
- Мікросхема: MPU-6050 (від виробника InvenSense)
- 16-розрядний перетворювач AD
- Діапазон акселерометра: ± 2, ± 4, ± 8, ± 16g
- Діапазон гіроскопів: ± 250 °, 500 °, 1000 °, 2000 °/с
- Діапазон напруги: 3,3 В - 5 В (регулятор напруги = LDO з низьким випаданням на модулі)
Внутрішня структура GY-521
Модуль має шину I²C, за допомогою якої мікроконтролер - як Arduino - може бути легко підключений. Можливо, що для коректної роботи шини I²C недостатньо 3,3 В, тому - якщо це можливо - 5 В завжди слід використовувати як джерело живлення.
Модуль має підтягувальні резистори для шини I²C, які іноді можуть становити 10 кОм, а іноді 2,2 КОм. Останнє значення досить низьке, що може призвести до проблем, якщо використовувати інші модулі датчиків. Тут повинен допомогти додатковий зовнішній підтягуючий резистор.
Деякі модулі GY-521 мають неправильний (або поганий) конденсатор, що може призвести до сильного шуму при вимірах.
Рис.: Підтягувальні резистори 2,2 кОм модуля GY-521
Датчик також має блок DMP ("Цифровий процесор руху"), який можна запрограмувати за допомогою мікропрограми і дозволяє проводити більш складні розрахунки безпосередньо на мікросхемі датчика. Однак, мабуть, InvenSense не публікує достатньо специфікацій для цього, щоб ці можливості можна було відкрити за допомогою зворотного проектування.
Рис.: Внутрішня електрична схема модуля GY-521
З'єднання GY-521
| VCC | Живлення (від 3,3 В до 5 В) (внутрішній регулятор напруги) | 3,3 В або 5 В |
| GND | Маса/Земля | GND |
| SCL | Серійний годинник (I²C) | A5 |
| SDA | Серійні дані (I²C) | A4 |
| XDA | Допоміжні дані (= основні послідовні дані I²C для підключення модуля до зовнішніх модулів) | (тут не використовується) |
| XCL | Допоміжний годинник (= головний послідовний годинник I²C для підключення модуля до зовнішніх модулів) | (тут не використовується) |
| AD0 | Зміна адреси I²C: НИЗЬКИЙ: 0x68 ВИСОКО: 0x69 | GND |
| INT | Цифровий вихід переривання (додаткове підключення для послідовного підключення декількох модулів) | (тут не використовується) |
Використані компоненти
- Основні інструменти та ресурси
- Arduino UNO (або сумісна плата)
- Модуль GY-521
- Вставний кабель ("перемичка")
- Макет
Необов’язкова бібліотека програмного забезпечення: код I2Cdevlib та MPU6050
будівництво
Приклад 1: Вихід вихідних даних у послідовну консоль
Наступний ескіз керує модулем GY-521, зчитує всі доступні дані через фіксований інтервал часу (тут: 1 с), а потім виводить їх на послідовну консоль. Ці необроблені дані легко читати. Потрібно деактивувати лише "сплячий режим", і тепер можна читати значення датчика гіроскопа, датчика прискорення та датчика температури. У точці Wire.requestFrom (MPU6050_ADRESS, 7 * 2, true) зчитується 14 байт реєстру. Це тому, що всі 7 доступних виміряних значень датчика мають 2 байти (= 16 біт).
ескіз
Результат
В IDE Arduino з версії 1.6.6 на додаток до послідовної консолі доступний так званий послідовний плотер. Для того, щоб мати можливість використовувати це, значення розділяються пробілами (або вкладками) і виводяться за допомогою Serial.print () і закінчуються розривом рядка, наприклад Serial.println (). Ось як вихідні значення можна простежити графічно:
Рис.: Вихід вихідних даних у послідовний плотер
Приклад 3: Виміряйте кути за допомогою MPU-6050
Після зчитування даних датчика, наступний ескіз обчислює правильний кут нахилу датчика і виводить це в свою чергу на послідовну консоль.
ескіз
Результат
Приклад 2: Графічний результат у "Обробці"
Для кращого відображення функціональних можливостей датчика визначені значення тепер передаються в Processing та візуалізуються там у реальному часі. Ескізи взяті з веб-сайту "Geek Mom Projects"
Рис.: Вивід даних на послідовній консолі Відео: Поточна демонстрація в обробці
Бібліотека "Adafruit_MPU6050"
Якщо ви використовуєте бібліотеку Adafruit_MPU6050, ви можете отримати доступ до значень MPU6050 чіткіше, а також дуже легко використовувати режим сну модуля. Це може представляти особливий інтерес для проектів, що працюють від акумуляторів, де потрібно економити електроенергію. Як показано в наступному прикладі, значення MPU6050 спочатку нормально зчитуються як посилання та надсилаються на послідовний плотер. Другий режим - це цикловий режим, який вимірює через певні проміжки часу і таким чином призводить до дещо грубішої роздільної здатності даних. Третій режим переводить модуль в режим сну, тобто більше не проводиться вимірювання. Однак останні дані вимірювань все ще можна прочитати з регістрів модуля.
Рис.: Вихід вихідних даних у послідовний плотер
Бібліотека "MPU6050_light"
Ще однією корисною бібліотекою є MPU6050_light, за допомогою якої ви можете дуже легко прочитати сусідні кути:
Рис.: Вивід даних про кут на послідовній консолі