- Необхідні матеріали:
- Кругова діаграма:
- Увімкнення налаштування:
- Програмування вашого Arduino:
- Підготовка програми Android за допомогою обробки:
- Робота інклінометра Arduino:
MPU6050 є ІК 3-осьовий акселерометр і 3-осьовий гіроскоп в поєднанні в єдине ціле. У ньому також є датчик температури та DCM для виконання складних завдань. MPU6050 зазвичай використовується для створення Drone та інших віддалених роботів, таких як самобалансуючий робот. У цьому проекті ми дізнаємось, як користуватися вбудованим MPU6050 Інклінометром або Спиртовим рівнем. Оскільки ми знаємо, інклінометр використовується для перевірки того, чи ідеально вирівняна поверхня чи ні, вони доступні як у вигляді міхура, так і у вигляді цифрових лічильників. У цьому проекті ми збираємося створити цифровий інклінометр, який можна контролювати за допомогою програми Android. Причиною використання віддаленого дисплея, як мобільний телефон, є те, що ми можемо відстежувати значення з MPU6050, не дивлячись на апаратне забезпечення, це було б дуже до речі, коли MPU6050 розміщується на безпілотнику або в інших недоступних місцях.
Необхідні матеріали:
- Arduino Pro-mini (5 В)
- MPU6050 Гіроскоп
- Модуль Bluetooth HC-05 або HC-06
- Дошка FTDI
- Макет
- Підключення проводів
- Смарт-телефон
Кругова діаграма:
Повна електрична схема цього проекту датчика нахилу Arduino наведена нижче. Він просто має лише три компоненти, і його можна легко встановити на макеті.
У MPU6050 обмінюється даними з допомогою I2C і, отже, SDA висновок підключений до контакту А4 Arduino, який є СДА контактний і штифт SCL з'єднаний з висновком A5 Arduino. Модуль Bluetooth HC-06 працює за допомогою послідовної зв'язку, отже, Rx штир Bluetooth підключений до контактного D11 і тй штифт Bluetooth підключаються до контактного D10 від Arduino. Ці виводи D10 і D11 будуть налаштовані як послідовний висновок шляхом програмування Arduino. Модуль HC-05 та модуль MSP6050 працюють від напруги + 5 В, отже, вони живляться від штифта Vcc Arduino, як показано вище.
Я використав кілька макетних з'єднувальних проводів і побудував установку над невеликою макетною дошкою. Після підключення моя дошка виглядає так нижче.
Увімкнення налаштування:
Ви можете або живити свою схему через плату програмування FTDI, як я це зробив, або використовувати акумулятор 9 В або адаптер 12 В і підключити його до необробленого штиря Arduino pro mini. Arduino Pro-mini має вбудований регулятор напруги, який може перетворити цю зовнішню напругу, регульовану + 5 В.
Програмування вашого Arduino:
Після того, як обладнання буде готове, ми можемо почати програмувати наш Arduino. Як завжди, повний код цього проекту можна знайти внизу цієї сторінки. Але для кращого розуміння проекту я розбив код на невеликі шматочки і пояснив їх кроками нижче.
Першим кроком буде взаємодія MPU6050 з Arduino. Для цього проекту ми будемо використовувати бібліотеку, розроблену Корнеліушем, яку можна завантажити за посиланням нижче
MPU6050 Свобода - Корнеліуш Яжебський
Завантажте ZIP-файл і додайте його до своєї Arduino IDE. Потім перейдіть до Файл-> Приклади-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Це відкриє приклад програми, яка використовує бібліотеку, яку ми щойно завантажили. Тож натисніть на завантаження та зачекайте, поки програма буде завантажена на ваш Arduino Pro mini. Після цього відкрийте послідовний монітор і встановіть швидкість передачі даних в 115200 і перевірте, чи отримуєте ви наступне.
Спочатку всі три значення будуть дорівнювати нулю, але, пересуваючи макет, ви можете спостерігати, як ці значення змінюються. Якщо вони змінюють це означає, що ваш зв’язок правильний, інакше перевірте з’єднання. Потратьте трохи часу тут, зауважте, як три значення Pitch Roll і Yaw змінюються залежно від способу нахилу датчика. Якщо ви заплуталися, натисніть кнопку скидання на Arduino, і значення будуть знову ініціалізовані до нуля, тоді нахиліть датчик в одну сторону і перевірте, які значення змінюються. Наведене нижче зображення допоможе вам краще зрозуміти.
З цих трьох параметрів нас цікавлять лише Roll and Pitch. Значення Ролл розповість нам про нахил в X-осі і значення Pitch розповість нам про нахил в Y-осі. Тепер, коли ми зрозуміли основи, давайте фактично почнемо програмувати Arduino для зчитування цих значень і надсилаємо його в Arduino через Bluetooth. Як завжди, почнемо з включення всіх бібліотек, необхідних для цього проекту
#включати
Потім ми ініціалізуємо серійний номер програмного забезпечення для модуля Bluetooth. Це можливо завдяки бібліотеці послідовного програмного забезпечення в Arduino, виводи IO можна запрограмувати на роботу як послідовні висновки. Тут ми використовуємо цифрові штифти D10 і D11, де D10 id Rx і D11 - Tx.
SoftwareSerial BT (10, 11); // RX, TX
Після цього ми ініціалізуємо змінні та об’єкти, необхідні для програми, і переходимо до функції setup (), де вказуємо швидкість передачі даних для послідовного монітора та Bluetooth. Для HC-05 та HC-06 швидкість передачі даних становить 9600, тому обов'язково використовувати ту саму. Потім ми перевіряємо, чи підключена шина IIC Arduino до MPU6050, якщо не, ми друкуємо попереджувальне повідомлення і залишаємося там, доки пристрій підключено. Після цього ми калібруємо гіроскоп і встановлюємо його порогові значення, використовуючи відповідні функції, як показано нижче.
void setup () {Serial.begin (115200); BT.begin (9600); // розпочати зв’язок Bluetooth зі швидкістю передачі даних 9600 боді // Ініціалізація MPU6050, поки (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Не вдалося знайти дійсний датчик MPU6050, перевірити проводку!"); затримка (500); } mpu.calibrateGyro (); // Калібрувати гіроскоп під час запуску mpu.setThreshold (3); // Керує чутливістю}
Рядок “ mpu.calibrateGyro ();” відкалібруйте MPU6050 для позиції, на якій він знаходиться в даний час. Цей рядок можна викликати кілька разів усередині програми, коли MPU6050 потрібно відкалібрувати, і всі значення повинні бути встановлені на нуль. “Mpu.setThreshold (3);” ця функція контролює, наскільки змінюється значення для руху датчика, а занадто низьке значення збільшить шум, тому будьте обережні, возившись із цим.
Усередині петлі порожнечі () ми неодноразово зчитуємо значення гіроскопа та датчика температури, обчислюємо значення кроку, нахилу та похиту, надсилаємо його на модуль Bluetooth. Наступні два рядки читатимуть вихідні значення гіроскопа та значення температури
Норма вектора = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Далі, ми обчислюємо висоту тону, нахил та похилу, помножуючи на крок часу та додаючи його до попередніх значень. Timestep не що інше, як інтервал між послідовними показаннями.
висота тону = висота + норма.YAxis * timeStep; roll = roll + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
Щоб краще зрозуміти крок часу, давайте поглянемо на рядок нижче. Цей рядок розміщений для зчитування значень з MPU6050 точно з інтервалом 10 мС або 0,01 секунди. Отже, ми оголошуємо значення timeStep як 0,01. І використовуйте рядок нижче, щоб утримати програму, якщо є, якщо залишилось більше часу. (millis () - timer ()) визначає час, необхідний для виконання програми до цих пір. Ми просто віднімаємо його за 0,01 секунди, а решту часу просто тримаємо програму там, використовуючи функцію затримки.
затримка ((timeStep * 1000) - (міліс () - таймер));
Закінчивши читання та обчислення значень, ми можемо надіслати їх на наш телефон через Bluetooth. Але тут є підводка. Модуль Bluetooth, який ми використовуємо, може відправляти лише 1 байт (8 біт), що дозволяє нам надсилати номери лише від 0 до 255. Тому ми повинні розділити наші значення і відобразити його всередині цього діапазону. Це робиться за допомогою наступних рядків
якщо (рулон> -100 && рулон <100) x = карта (рулон, -100, 100, 0, 100); якщо (крок> -100 && крок <100) y = карта (висота тону, -100, 100, 100, 200); якщо (temp> 0 && temp <50) t = 200 + int (temp);
Як ви можете зрозуміти, значення рулону відображається від 0 до 100 у змінну x, а висота - у 100-200 для змінної y, а temp - у 200 і вище у змінну t. Ми можемо використовувати ту саму інформацію для отримання даних з того, що ми надіслали. Нарешті, ми записуємо ці значення через Bluetooth, використовуючи наступні рядки.
BT.write (x); BT.write (y); BT.write (t);
Якщо ви зрозуміли повну програму, прокрутіть вниз, щоб поглянути на програму та завантажте її на дошку Arduino.
Підготовка програми Android за допомогою обробки:
Додаток для android для цього Arduino Inclinometer було розроблено за допомогою середовища обробки IDE. Це дуже схоже на Arduino і може використовуватися для створення системних додатків, додатків для Android, веб-дизайнів та багато іншого. Ми вже використовували обробку для розробки деяких інших наших крутих проектів, перелічених нижче
- Гра в пінг-понг за допомогою Arduino
- Смарт-телефон, керований FM-радіо за допомогою обробки.
- Радіолокаційна система Arduino з використанням процесора та ультразвукового датчика
Однак неможливо пояснити повний код, як створити цю програму. Отже, у вас є два шляхи перейти до цього. Ви можете завантажити файл APK за посиланням нижче та встановити додаток для Android безпосередньо на свій телефон. Або прокрутіть нижче, щоб знайти повний код обробки та дізнатися самі, як це працює
Усередині ZIP-файлу ви можете знайти папку з назвою data, яка складається з усіх зображень та інших джерел, які потрібно завантажити в додаток android. У наведеному нижче рядку вирішується, до якого імені Bluetooth автоматично підключатися
bt.connectToDeviceByName ("HC-06");
Усередині функції draw () речі будуть виконуватися неодноразово, тут ми малюємо зображення, відображаємо текст та анімуємо смуги на основі значень модуля Bluetooth. Ви можете перевірити, що відбувається всередині кожної функції, прочитавши програму.
void draw () // Нескінченний цикл {background (0); imageMode (ЦЕНТР); зображення (логотип, ширина / 2, висота / 1,04, ширина, висота / 12); load_images (); textfun (); getval (); }
Нарешті, є ще одна важлива річ, яку потрібно пояснити, пам’ятайте, що ми розділили значення тону, нахилу та темпу на 0 до 255. Отож тут ми знову повертаємо його до нормальних значень шляхом зворотного відображення до нормальних значень.
if (info <100 && info> 0) x = map (info, 0, 100, - (width / 1.5) / 3, + (width / 1.5) / 3); // x = info; інакше if (info <200 && info> 100) y = map (info, 100, 200, - (width / 4.5) /0.8, + (width / 4.5) /0.8); // y = info; інакше якщо (info> 200) temp = info -200; println (temp, x, y);
Є набагато кращі способи отримати дані з модуля Bluetooth на телефон, але оскільки це лише хобі-проект, ми їх проігнорували, ви можете заглибитися, якщо зацікавлені.
Робота інклінометра Arduino:
Після того, як ви підготуєтесь до апаратного забезпечення та програми, настав час розважитися тим, що ми створили. Завантажте код Arduino на плату, ви також можете видалити коментарі в рядках Serial.println і перевірити, чи працює обладнання належним чином, використовуючи послідовний монітор. У будь-якому випадку, це зовсім необов’язково.
Після завантаження коду запустіть програму Android на своєму мобільному телефоні. Програма повинна автоматично підключитися до вашого модуля HC-06, і у верхній частині програми з’явиться повідомлення «Підключитися до: HC-06», як показано нижче.
Спочатку всі значення будуть нульовими, крім значення температури. Це пов’язано з тим, що Arduino відкалібрував MPU-6050 для цієї позиції як еталон, тепер ви можете нахилити апаратне забезпечення та перевірити, що значення в мобільному додатку також змінюються разом з анімацією. Повну роботу програми можна знайти на відео, поданому нижче. Тож тепер ви можете розмістити макет будь-де і перевірити, чи ідеально вирівняна поверхня.
Сподіваюся, ви зрозуміли проект і дізналися з нього щось корисне. Якщо у вас є які-небудь сумніви, будь ласка, використовуйте розділ коментарів нижче або форуми, щоб вирішити проблему.