Гіроскоп MPU-6050 з Arduino UNO

Використання датчиків різної дії для побудови детекторів перешкод, сонарів, вимірювання товщини та відстані до обєктів. Ультравукові, оптичні, фотоелектричні датчики відстані
Відповісти
Аватар користувача
Arduino
Site Admin
Повідомлень: 98
З нами з: 16 травня 2017 18:18

Гіроскоп MPU-6050 з Arduino UNO

Повідомлення Arduino » 01 квітня 2018 12:02

MPU-6050 - це датчик IMU, який містить акселерометр MEMS (мікроелектромеханічну систему) та гіроскоп MEMS на одному чіпі. Тут, IMU Sensor, де IMU виступає за інерційну одиницю вимірювання, - це пристрій, який вимірює спеціальну силу за допомогою акселерометра, кутовий швидкість, використовуючи магнітометри з допомогою гіроскопа та магнітного поля.

Датчики IMU використовуються для самостійного балансування роботів, літаків, мобільних телефонів, планшетів, космічних апаратів, супутників, безпілотних літальних апаратів (безпілотних літальних апаратів тощо) для виявлення, виявлення позицій, виявлення орієнтації, відстеження руху та контролю над польотом.

Два поширені IMU - ADXL 335 Accelerometer та MPU-6050. ADXL 335 містить 3-х осьовий акселерометр.
Зайти до магазину за Гіроскопом MPU-6050

У випадку з MPU-6050 це шестиосьовий пристрій спостереження руху, який поєднує в собі 3-х осьовий акселерометр і 3-х осі гіроскоп на одному чіпі.
MPU6050.jpg
MPU-6050 - шестиосьовий пристрій спостереження руху, розроблений компанією InvenSense. Основні характеристики пристрою MPU6050 наведено нижче.
  • Триосний акселерометр
  • Триосний гіроскоп
  • Датчик температури цифрового виходу
  • Шість 16-розрядних АЦП (три для акселерометра та три для гіроскопів)
  • Інтегрований процесор цифрового руху (DMP)
  • 1024B FIFO Buffer
  • Шість осі MPU-6050 деякий час називається пристроєм 6 DoF (Six Degrees of Freedom), оскільки він забезпечує шість вихідних значень (три з Accelerometer і три з Gyro). MPU-6050 може спілкуватися за допомогою протоколу I2C.
Цифровий процесор двигуна або DMP - вбудований процесор, який може зменшити обчислювальний навантаження від хост-процесора, як-от Arduino, шляхом придбання та обробки даних з Accelerometer, Gyroscope та зовнішнього магнітометра.

Взаємодія з MPU6050 з Arduino
Як згадувалося раніше, MPU6050 підтримує тільки I2C Communication, і, отже, він повинен бути підключений тільки до I2C Pins Arduino. Штифти I2C Arduino мультиплектуються з аналоговими штифтами A4 і A5, тобто A4 є SDA, а A5 - SCL.
MPU6050-Image-Breakout-Board.jpg
Схема підключення MPU6050

Наступне зображення показує схему для взаємодії MPU6050 з Arduino UNO. Як згадувалося раніше, інтерфейс між MPU6050 і Arduino повинен бути реалізований за допомогою протоколу I2C.

Отже, SCL-штифт Arduino (A5) підключений до SCL-контакту MPU6050. Аналогічним чином, Pin SDA для Arduino (A4) підключається до шини SDA плати MPU6050.

Крім того, ми будемо використовувати функцію переривання MPU6050 для позначення (або переривання) Arduino, коли буфер FIFO 1024 байт заповнений. Отже, підключіть INT-штифт MPU6050 до шпильки зовнішнього переривання 0 (INT0) Arduino UNO, тобто Pin 2.

ПРИМІТКА. У комунікації I2C MPU-6050 завжди працює як ведома.
MPU6050-Image-Circuit-Diagram.jpg
Читання значення RAW з MPU6050
Перш ніж завантажувати фактичну програму, ми спочатку глянемо просту програму для читання сирих значень з акселерометра, гіроскопа та датчика температури. Просто підключіть дріт SCL та SDA до MPU6050 до відповідних штифтів I2C Arduino (A4 та A5) та завантажте наступний код.

Код: Виділити все

#include<Wire.h>
const int MPU6050_addr=0x68;
int16_t AccX,AccY,AccZ,Temp,GyroX,GyroY,GyroZ;
void setup(){
  Wire.begin();
  Wire.beginTransmission(MPU6050_addr);
  Wire.write(0x6B);
  Wire.write(0);
  Wire.endTransmission(true);
  Serial.begin(9600);
}
void loop(){
  Wire.beginTransmission(MPU6050_addr);
  Wire.write(0x3B);
  Wire.endTransmission(false);
  Wire.requestFrom(MPU6050_addr,14,true);
  AccX=Wire.read()<<8|Wire.read();
  AccY=Wire.read()<<8|Wire.read();
  AccZ=Wire.read()<<8|Wire.read();
  Temp=Wire.read()<<8|Wire.read();
  GyroX=Wire.read()<<8|Wire.read();
  GyroY=Wire.read()<<8|Wire.read();
  GyroZ=Wire.read()<<8|Wire.read();
  Serial.print("AccX = "); Serial.print(AccX);
  Serial.print(" || AccY = "); Serial.print(AccY);
  Serial.print(" || AccZ = "); Serial.print(AccZ);
  Serial.print(" || Temp = "); Serial.print(Temp/340.00+36.53);
  Serial.print(" || GyroX = "); Serial.print(GyroX);
  Serial.print(" || GyroY = "); Serial.print(GyroY);
  Serial.print(" || GyroZ = "); Serial.println(GyroZ);
  delay(100);
}
Якщо ви відкриєте серійний термінал, ви отримаєте вихідні значення з акселерометра та гіроскопа та відкалібруєте температуру від датчика температури. Дані виглядають так, як ці.
MPU6050-Image-2.jpg
Як можна бачити, читати даних з датчика MPU6050 легко, але ці дані, і ми повинні виконати додатковий розрахунок на ці дані, щоб отримати Yaw, Pitch та Roll.

В сенсорі MPU6050 є спеціальний процесор DMP або Digital Motion Processor, який вбудований в той же чіп, що і акселерометр та гіроскоп. Використання цього DMP полягає в тому, що його можна запрограмувати з прошивкою для виконання складних обчислень за даними датчиків.

Але немає ясної документації про DMP з боку InvenSense, і в результаті ми не отримуємо швидкі обчислення даних датчика безпосередньо на чіпі.

Завантаження коду до Arduino та тестування MPU6050
Перед завантаженням коду ми повинні завантажити дві бібліотеки для Arduino. Це I2Cdev та MPU6050. Нижче наведено посилання на завантаження та офіційні посилання GitHub.

I2Cdev: СКАЧАТИ БІБЛІОТЕК I2CDEV або відвідайте GitHub LINK

MPU6050: СКАЧУЙТЕ БІБЛІОТЕКА MPU6050 або відвідайте GitHub LINK

Завантажте бібліотеку MPU6050 та витягуйте вміст, розпакуючи завантажений файл. Ви отримаєте папку з назвою "MPU6050". Скопіюйте цю папку та вставте її в папку бібліотек Arduino.

У моєму випадку, він знаходиться в "C: \ Program Files (x86) \ Arduino \ бібліотеках". Зробіть те ж саме для бібліотеки I2Cdev.

Якщо все добре, відкрийте IDE Arduino та перейдіть за наступним шляхом: Файл -> Приклади -> MPU6050 -> Приклади -> MPU6050_DMP6 і відкрийте приклад коду MPU6050_DMP6.
MPU6050-Image-3.jpg
Завантажте цей код в Arduino (припускаючи, що ви вже зробили з'єднання за схемою схеми), а після завантаження коду відкрийте послідовний термінал.

Встановіть швидкість передачі даних на послідовному терміналі до 115200, і ви отримаєте наступний текст.

" Ініціалізація DMP ...

Ініціалізація пристроїв I2C ...

З'єднання випробувального пристрою ...

Підключення MPU6050 успішно

Надішліть будь-який персонаж для початку програмування та демонстрації DMP: "

Якщо ви не отримуєте жодних даних або все ще отримуєте дані сміття, просто скиньте Arduino. Якщо ви подивитеся на останнє речення, це говорить: "Відправити будь-який персонаж для початку програмування та демонстрації DMP". Таким чином, введіть будь-який символ, такий як 1 або а в серійному моніторі, і надішліть його. Як тільки ви натиснете enter, ви можете почати бачити значення Yaw, Pitch і Roll (ypr) на моніторі послідовного порта.
MPU6050-Image-4.jpg
ПРИМІТКА. За цей час тримайте MPU6050 на стабільній та горизонтальній поверхні. Крім того, зачекайте 10 секунд, щоб значення з MPU6050 стабілізувались.

3D-моделювання в обробці на основі значень з інтерфейсу Arduino та MPU6050
На наступному етапі проекту ми розглянемо 3D-моделювання сенсора MPU6050, використовуючи Processing IDE, де ви можете переглядати 3D-подання даних з датчика. Обробка - мова програмування та IDE, розроблена для електронного мистецтва та візуального дизайну. Фактично, IDE Arduino також базується на мові програмування обробки.

Щоб завантажити Processing IDE, відвідайте цей LINK . Завантажте та встановіть обробку IDE за допомогою даної посилання.

Після завантаження Processing IDE та встановлення (просто розпакуйте вміст із завантаженого zip-файлу), вам потрібно завантажити бібліотеку для обробки під назвою "Toxi". Ви можете завантажити бібліотеку Toxi з цього LINK .

Я вибрав файл "toxiclibs-complete-0020". Після завантаження цього файлу, витягніть вміст у папку з назвою "toxiclibs-complete-0020".

Скопіюйте цю папку та вставте її в папку бібліотек обробки. У моєму випадку це "C: \ Users \ Ravi \ Documents \ Обробка \ бібліотеки".

Після копіювання папки ви вже готові до 3D-моделювання. По-перше, вам потрібно завантажити попередній код Arduino (MPU6050_DMP6) з декількома модифікаціями.

Відкрийте MPU6050_DMP6 (приклад програми, яку ми завантажили раніше) в IDE Arduino. Прокрутіть вниз до лінії, яка говорить наступне.


#define OUTPUT_READABLE_YAWPITCHROLL
Коментувати цю лінію, додавши подвійну прямокутну косу риску перед нею.


// визначити OUTPUT_READABLE_YAWPITCHROLL
Також знайдіть рядок, який говорить // #, визначити OUTPUT_TEAPOT і відкоментувати його, видаливши подвійну косу рису . Тепер ви можете завантажити код. Що ми змінили в коді, а не надсилати дані на послідовний термінал, ми пересилаємо його до Processing IDE.

Тепер відкрийте Processing IDE і натисніть Файл -> Відкрити. Тепер перейдіть до папки, на якій встановлено бібліотеку MPU6050 для Arduino. Відкрийте приклад обробки з назвою "MPUTeapot".

У моєму випадку розташування для цього прикладу є C: \ Program Files (x86) \ Arduino \ бібліотеки \ MPU6050 \ Приклади \ MPU6050_DMP6 \ Обробка \ MPUTeapot.

Ця програма має положення для автоматичного вибору номера PORT, до якого підключено Arduino. Лінія в коді, пов'язаному з цим, є


String portName = Serial.list () [0];
Інший спосіб вказати номер порту Arduino - це вручну ввести номер COM-порту. Для цього коментуйте наведену вище лінію та скасуйте наступну лінію та замініть номер COM Port на відповідний номер COM-порту, до якого підключено Arduino.


// String portName = "COM4";
Перед тим, як натиснути кнопку запуску в пункті «Обробка», переконайтеся, що Serial Monitor Arduino IDE закрито. Тепер натисніть на кнопку запуску в обробці IDE. Ви отримаєте вікно з літаком, як структура. Зачекайте 10 секунд перед 3D-моделюванням MPU6050.

Рухи, зроблені MPU6050, можна побачити через 3D-об'єкт на екрані.

Відповісти

Повернутись до “Модулі детекції першкод, переміщення, відстані”