3-осьовий датчик прискорення та положення з Arduino

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

3-осьовий
Рис.: Модуль GY-521

Основні характеристики 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

Функція Pin Pin Pin Arduino Uno
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, за допомогою якої ви можете дуже легко прочитати сусідні кути:

Рис.: Вивід даних про кут на послідовній консолі