Дамо коротке керівництво для взаємодії Arduino з кращим доступним інерційно вимірювальним датчиком (ІВД). Такі ІВД-датчики, як MPU 6050, використовуються для власного балансування роботів, в безпілотних літальних апаратах, смартфонах і т.д. Датчики ІВД сьогодні є одним з найбільш вживаних типів датчиків у всіх видах електронних гаджетів.
Ви їх бачили в смартфонах, переносних пристроях, ігрових контролерах та ін. ІВД допомогають нам отримати орієнтацію об'єкта, до якого приєднаний датчик, в тривимірному просторі. Ці значення, як правило, в кутах, таким чином, допомогають нам визначити їх положення. Наприклад, вони використовуються в смартфони, щоб виявити його орієнтацію. А також в переносних пристроях, які використовують ІВД датчики для відстеження рухів.
ІВД датчики є корисними додатками. Тому скористайтеся цим підручником про взаємодію Arduino з MPU 6050, щоб побудувати самостійно балансуючого робота або щоб відстежувати рухи пристрою. Серед чисельних датчиків Invensense MPU 6050 є одним з самих надійних і точних ІВД. Крім того, він значно дешевший від інших датчиків, а працює MPU 6050 набагато краще.
Виводи MPU 6050 для під’єднання до Arduino
Схема секційної плати GY-521 для чіпа MPU6050
У цьому уроці розглянемо загальне введення в MPU 6050, покажемо, як датчик можна підключити до Arduino. І покажемо вам, як зробити 3D модель, використовуючи дані з Arduino MPU 6050.
Що нам необхідно для даного проекту?
Обладнання:
1. Плата Arduino або клона Arduino (Freeduino).
2. Датчик. MPU 6050.
3. Дроти для з’єднання.
Програмне забезпечення:
1. Arduino IDE
2. Processing IDE
ІВД, як правило, складається з двох або більше частин. Перерахуємо їх за пріоритетом: акселерометр, гіроскоп, магнітометр і висотомір. MPU 6050 має 6 DOF (Degrees of Freedom - ступенів свободи) або ІВД має шість осей - це означає, що він дає на виході шість значень. Три значення від акселерометра і три з гіроскопа. MPU 6050 є датчик на основі MEMS (Micro Electro Mechanical Systems - мікроелектромеханічних систем) технології. І акселерометр, і гіроскоп вбудовані в одному чіпі. Цей чіп використовує протокол I2C (Inter Integrated Circuit) для зв'язку.
Як працює акселерометр?
П'єзоелектричний акселерометр
Акселерометр працює за принципом п'єзоелектричного ефекту. Уявіть собі шестигранну коробку, з невеликим м'ячем всередині неї, як на зображенні вище. Стіни цієї коробки зроблені з п'єзоелектричних кристалів. Щоразу, коли ви нахиляєте коробку, куля буде змушена рухатися в напрямку нахилу під дією сили тяжіння. Стіна, з якою стикається куля, створює мізерний п'єзоелектричний електричний струм. Взагалі є три пари протилежних стін у коробці. Кожна пара відповідає осі в 3D-просторі: X, Y і Z осі. В залежності від струму, отриманого з п'єзоелектричних стін, ми можемо визначити напрям нахилу і його величину. Більш детально можете прочитати тут.
Як працює гіроскоп?
П'єзоелектричний гіроскоп
Гіроскопи працюють за принципом прискорення Коріоліса. Уявіть собі, що ви їсте виделкою, як структурою, яка знаходиться в постійному зворотно-поступальному русі. Вона закріплена на місці за допомогою п'єзоелектричного кристала. Всякий раз, коли, при спробі нахилити цей механізм, кристали відчувають зусилля в напрямку нахилу. Це викликано результатом інерції виделки, яка рухається. Кристали, таким чином, створюють струм в консенсусі з п'єзоелектричним ефектом, і цей струм підсилюється. Потім уточнені значення приймаються мікроконтролером. Подивіться це коротке відео, яке пояснює, як працює гіроскоп MEMS.
Крок 1: Взаємодія MPU 6050 з Arduino
MPU 6050 взаємодіє з Arduino через протокол I2C. MPU 6050 підключений до Arduino як показано на схемі нижче. При цьому, якщо ваш модуль MPU 6050 має вивід 5В, то ви можете підключити його до вивода 5В вашого Arduino. В іншому випадку, вам доведеться підключити його до виводу 3,3В. Далі, GND Arduino підключаємо до GND MPU 6050.
Під’єднання MPU 6050 до Arduino
Програма, з якою ми буде працювати, також використовує виводи переривання Arduino. Таким чином, підключіть цифровий віивід 2 Arduino (вивід переривання 0) до контакту, позначеному як INT на MPU 6050. Далі, ми повинні налаштувати шину I2C. Для цього підключіть вивід, позначений як SDA на MPU 6050 до аналогового входу 4 (SDA) Arduino. А вивід, позначений як SCL на MPU 6050 до аналогового входу 5 (SCL) Arduino в. На цьому ви закінчили під’єднання MPU 6050 до Arduino.
Крок 2: Завантаження коду і тестування Arduino з MPU 6050
Щоб перевірити Arduino з MPU 6050, спочатку завантажте бібліотеку Arduino для MPU 6050, розроблену Jeff Rowberg. Ви можете знайти бібліотеку тут. Далі ви повинні розпакувати/витягати цю бібліотеку. А потім взяти папку з ім'ям "MPU6050" і вставити її в папку "library" в Arduino. Тобто, перейдіть в папку, куди ви встановили Arduino (Arduino –> libraries) і вставте її в папку бібліотек. Вам також, можливо, доведеться робити те ж саме для установки бібліотеки I2Cdev, якщо у вас її ще немає на Arduino. Виконайте ті ж дії, як зазначено вище для її установки, файл ви можете знайти тут: бібліотека I2Cdev.
Якщо ви все зробили правильно то, коли відкриваєте Arduino IDE, то можете побачити "MPU6050" в File –> Examples. Потім відкрийте приклад програми з: File –> Examples –> MPU6050 –> Examples –> MPU6050_DMP6.
Код DMP Arduino MPU 6050
Тепер ви повинні завантажити цей код в Arduino. Після завантаження коду, відкрийте монітор послідовного порту і установіть швидкість передачі даних 115200. Потім перевірте, чи бачите такі речі, як "Initializing I2C devices…" на послідовному моніторі. Якщо ні, просто натисніть кнопку скидання. Тепер ви побачите рядок з написом "Send any character to begin DMP programming and demo:":
Перевірка роботи Arduino MPU 6050 з монітором послідовного порта
Тому просто введіть будь-який символ на моніторі послідовного порта і відправте його. І ви почнете бачити значення нишпорення, тангажу і крену, що йдуть з MPU 6050. Ось так:
Монітор послідовного порта для Arduino MPU 6050
DMP означає Digital Motion Processing (цифрове оброблення руху). Так, Invense в MPU 6050 має вбудований процесор руху. Він обробляє значення від акселерометра і гіроскопа, щоб дати нам точні 3D-значення.
Крім того, треба буде почекати близько 10 секунд, перш ніж отримаєте точні значення з Arduino MPU 6050. Після чого, значення застабілізуються. Подивіться відео, якщо є питання:
Крок 3: Моделювання в 3D значень з Arduino MPU 6050
Для перегляду 3D-представлення даних з MPU 6050, необхідно встановити програмне забезпечення "Processing", яке можете завантажити звідси: Processing IDE. Processing IDE майже аналогічний Arduino IDE, за винятком декількох функцій. Processing в основному використовується для візуалізації даних і робить її в 2D/3D моделях.
Arduino MPU 6050 з Processing
Після установки Processing IDE, ви повинні завантажити бібліотеку під назвою "Toxi". Ця бібліотека необхідна для нашого Arduino MPU 6050 прикладу Processing. Завантажте останню версію zip-файла бібліотеки звідси. Далі, ви повинні витягти цей файл і вставити папку з ім'ям "toxiclibs-complete-0020" в каталог бібліотеки Processing.
Але тут можлива проблема, бо пустий каталог бібліотеки "libraries" створюється лише після першого запуску Processing, тож спочатку запустіть програму.
Новостворений каталог "libraries" можете знайти за шляхом Users (Користувачі) > You Name (Ваше ім’я користувача) > My Documents (Мої документи) > Processing > libraries. Якщо такої папки там немає, то вам доведеться її там створити з ім'ям "libraries" і вставити в неї toxiclibs.
Для візуалізації 3D моделі обробки, спочатку ви повинні завантажити код Arduino для MPU 6050 (MPU6050_DMP6). Перед цим, необхідно закоментувати рядок у коді Arduino MPU6050_DMP6:
#define OUTPUT_READABLE_YAWPITCHROLL
щоб він виглядав так:
//#define OUTPUT_READABLE_YAWPITCHROLL.
І розкоментувати рядок:
//#define OUTPUT_TEAPOT
щоб він виглядав так:
#define OUTPUT_TEAPOT.
Далі, ви повинні відкрити приклад processing для MPU 6050. Відкрийте processing, потім: File -> Open. І далі перейдіть до папки, в яку ви встановили бібліотеку MPU6050 для Arduino. Ви можете знайти приклад processing в: MPU6050 –> Examples –> MPU6050_DMP6 –> Processing –> MPUTeapot.
У цьому коді, ви повинні перевірити послідовний порт, який визначений в ньому. За замовчуванням рядок, який визначає його для користувачів linux/mac:
String portName = “/dev/ttyUSB1″;.
Ви повинні змінити ttyUSB1 на порт, до якого підключений ваш Arduino.
Редагування файлу обробки для MPU 6050
А для користувачів Windows необхідно закоментувати рядок:
String portName = “/dev/ttyUSB1″;
щоб він виглядав так:
//String portName = “/dev/ttyUSB1″;
І розкоментувати рядок:
/String portName = “COM4″;
щоб він виглядав так:
String portName = “COM4″;
Замініть "COM4" COM-портом, до якого підключений ваш Arduino (перевірте його, зайшовши в Arduino та Tools –> Serial Port).
Тепер можемо перевірити всю установку. По-перше, завантажте код Arduino (MPU6050_DMP6) в Arduino. І, будь ласка, нагадуємо, НЕ ВІДКРИВАЙТЕ монітор послідовного порту. На наступному кроці запустіть код processing (MPUTeapot), натиснувши на кнопку з символом "play". Ви побачите невеликий літак, як об'єкт. Почекайте близько 10 секунд для отримання значень з MPU 6050, щоб все стабілізувалося. Після, який цього можете побачити 3D-модель вашого MPU 6050, яка рухається відповідно з датчиком. Тепер, можете перевірити демо-версію 3D моделі для Arduino MPU 6050:
(За матеріалами: diyhacking.com)