- Що таке акселерометр і гіроскопічний датчик?
- MPU6050 Акселерометр і модуль гіроскопічного датчика
- Потрібні компоненти
- Кругова діаграма
- Пояснення програмування
MPU6050 є ІК 3-осьовий акселерометр і 3-осьовий гіроскоп в поєднанні в єдине ціле. У ньому також є датчик температури та DCM для виконання складних завдань. MPU6050 зазвичай використовується для створення Drone та інших віддалених роботів, таких як самобалансуючий робот. У цьому проекті ми побудуємо цифровий кутомір, використовуючи MPU6050 та Arduino. Тут сервомотор використовується для відображення кута на кутомірному зображенні. Вал сервомотора прикріплений голкою, яка буде обертатися на зображенні транспортира, щоб вказати кут, який також відображається на дисплеї 16xLCD. Перш ніж вдаватися до деталей, давайте дізнаємося про датчик гіроскопа.
Що таке акселерометр і гіроскопічний датчик?
Для вимірювання прискорення використовується акселерометр. Він насправді відчуває як статичне, так і динамічне прискорення. Наприклад, мобільні телефони використовують датчик акселерометра, щоб відчути, що мобільний перебуває в альбомному або книжковому режимі. Раніше ми використовували акселерометр з Arduino для побудови багатьох проектів, таких як:
Гіроскоп використовується для вимірювання кутової швидкості, яка використовує земне тяжіння для визначення орієнтації об’єкта, що рухається. Кутова швидкість - це швидкість зміни кутового положення обертового тіла.
Наприклад, сучасні мобільні телефони використовують гіроскопічні датчики для гри в мобільні ігри відповідно до орієнтації мобільного телефону. Крім того, гарнітура VR використовує датчик гіроскопа, щоб мати види в орієнтації на 360
Отже, хоча акселерометр може вимірювати лінійне прискорення, гіроскоп може допомогти знайти обертальний прискорення. При використанні обох датчиків як окремих модулів стає важко знайти орієнтацію, положення та швидкість. Але поєднуючи два датчики, він працює як інерційний блок вимірювання (ІМУ). Отже, у модулі MPU6050 акселерометр та гіроскоп присутні на одній друкованій платі для визначення орієнтації, положення та швидкості.
Програми:
- Використовується в дронах для управління напрямком
- Самобалансуючі роботи
- Робототехнічне управління руками
- Датчик нахилу
- Використовується в мобільних телефонах, відеоігрових приставках
- Роботи-гуманоїди
- Використовується в літаках, автомобілях тощо.
MPU6050 Акселерометр і модуль гіроскопічного датчика
MPU6050 - це мікроелектромеханічні системи (MEMS), яка складається з 3-осьового акселерометра та 3-осьового гіроскопа всередині нього. Він також має датчик температури.
Він може вимірювати:
- Прискорення
- Швидкість
- Орієнтація
- Переміщення
- Температура
Цей модуль також має (DMP) цифровий процесор руху, який є досить потужним для виконання складних розрахунків і тим самим звільняє роботу для мікроконтролера.
Модуль також має два допоміжні штифти, які можна використовувати для взаємодії із зовнішніми модулями IIC, як магнітометр. Оскільки IIC-адреса модуля може бути налаштована, більше ніж один датчик MPU6050 може бути з'єднаний з мікроконтролером за допомогою виводу AD0.
Особливості та технічні характеристики:
- Блок живлення: 3-5В
- Зв'язок: протокол I2C
- Вбудований 16-розрядний АЦП забезпечує високу точність
- Вбудований DMP забезпечує високу обчислювальну потужність
- Може використовуватися для взаємодії з іншими пристроями IIC, такими як магнітометр
- Настроювана адреса IIC
- Вбудований датчик температури
Розтискання MPU6050:
Номер PIN-коду | Ім'я PIN-коду | Використовуйте |
1 | Vcc | Забезпечує живлення модуля, може становити від + 3В до + 5В. Зазвичай використовується + 5 В. |
2 | Земля | Підключено до заземлення системи |
3 | Серійний годинник (SCL) | Використовується для забезпечення тактового імпульсу для зв'язку I2C |
4 | Серійні дані (SDA) | Використовується для передачі даних через I2C-зв'язок |
5 | Допоміжні послідовні дані (XDA) | Може використовуватися для взаємодії інших модулів I2C з MPU6050. Це необов’язково |
6 | Допоміжний послідовний годинник (XCL) | Може використовуватися для взаємодії інших модулів I2C з MPU6050. Це необов’язково |
7 | AD0 | Якщо в одному MCU використовується більше одного MPU6050, то цей штифт можна використовувати для варіювання адреси |
8 | Переривання (INT) | PIN-код переривання вказує, що дані доступні для читання MCU. |
Раніше ми використовували MPU6050 з Arduino для створення самобалансуючого робота та інклінометра.
Потрібні компоненти
- Arduino UNO
- Модуль гіроскопа MPU6050
- РК-дисплей 16x2
- Потенціометр 10k
- Сервомотор SG90
- Зображення транспортира
Кругова діаграма
Принципова схема для цього саморобного транспортера Arduino наведена нижче:
Схема з'єднань між Arduino UNO та MPU6050:
MPU6050 |
Arduino UNO |
VCC |
+ 5В |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Схема з'єднання між Arduino UNO та сервомотором:
Серводвигун |
Arduino UNO |
ЧЕРВОНИЙ (VCC) |
+ 5В |
ОРАНЖЕВИЙ (ШІМ) |
9 |
КОРИЧНИЙ (GND) |
GND |
Схема з'єднання між Arduino UNO та РК-дисплеєм 16x2:
РК-дисплей |
Arduino Nano |
VSS |
GND |
VDD |
+ 5В |
V0 |
На PIN-код центру потенціометра Для контролю контрастності РК-дисплея |
RS |
2 |
RW |
GND |
Е |
3 |
D4 |
4 |
D5 |
5 |
D6 |
6 |
D7 |
7 |
A |
+ 5В |
К |
GND |
Пояснення програмування
Як зазвичай, повна програма з демонстраційним відео наведена в кінці цього посібника.
Тут сервомотор з'єднаний з Arduino і його вал проектується на зображення транспортира, що вказує кут нахилу MPU6050. Програмування для цього підручника просте. Давайте розберемося докладно.
Спочатку включіть усі необхідні бібліотеки - бібліотеку сервомотора для використання сервоприводу, бібліотеку РК для використання РК та бібліотеку проводів для використання зв'язку I2C.
MPU6050 використовує I2C-зв'язок, отже, він повинен бути підключений лише до I2C-виводів Arduino. Отже, бібліотека Wire.h використовується для встановлення зв'язку між Arduino UNO та MPU6050. Раніше ми зв’язали MPU6050 з Arduino і відобразили значення координат x, y, z на РК-дисплеї 16x2.
#включати
Далі визначте штифти РК-дисплея RS, E, D4, D5, D6, D7, які підключені до Arduino UNO.
Рідкий кристал LiquidCrystal (2,3,4,5,6,7);
Далі визначається адреса I2C MPU6050.
const int MPU_addr = 0x68;
Потім ініціалізуйте об’єкт myservo для використання класу Servo та трьох змінних для зберігання значень осей X, Y та Z.
Серво мисерво; int16_t вісь_X, вісь_Y, вісь_Z;
Наступне мінімальне та максимальне значення встановлюються як 265 та 402 для вимірювання кута від 0 до 360.
int minVal = 265; int maxVal = 402;
void setup ():
У функції налаштування порожнечі починається перший зв'язок I2C і розпочинається передача з MPU6050 з адресою 0x68.
Wire.begin (); Wire.beginTransmission (MPU_addr);
Переведіть MPU6050 в режим сну, написавши 0x6B, а потім пробудіть його, написавши 0
Wire.write (0x6B); Wire.write (0);
Після активації MPU6050 завершіть передачу
Wire.endTransmission (істина);
Тут ШІМ-штир сервомотора з'єднаний з Arduino UNO-штирком 9.
myservo.attach (9);
Як тільки ми вмикаємо ланцюг, на РК-дисплеї відображається привітальне повідомлення та очищається через 3 секунди
lcd.begin (16,2); // Встановлює РК-дисплей у режимі 16X2 lcd.print ("CIRCUIT DIGEST"); затримка (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("MPU6050"); затримка (3000); lcd.clear ();
цикл void ():
Знову ж таки, зв'язок I2C розпочато з MPU6050.
Wire.beginTransmission (MPU_addr);
Потім починайте з реєстру 0x3B (ACCEL_XOUT_H)
Wire.write (0x3B);
Тепер процес перезапускається, встановивши кінцеву передачу як помилкову, але підключення активне.
Wire.endTransmission (false);
Після цього тепер запитуйте дані з 14 реєстрів.
Wire.requestFrom (MPU_addr, 14, true);
Тепер доречні значення реєстру осей (x, y, z) отримуються та зберігаються у змінних осі_X, осі_Y, осі_Z.
ось_Х = Wire.read () << 8-Wire.read (); ось_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Потім відобразіть ці значення від 265 до 402 як -90 до 90. Це робиться для всіх трьох осей.
int xAng = карта (вісь_Х, мінімальне значення, максимальне значення, -90,90); int yAng = карта (вісь_Y, minVal, maxVal, -90,90); int zAng = карта (вісь_Z, minVal, maxVal, -90,90);
Формула для обчислення значення x у градусах (від 0 до 360) наведена нижче. Тут ми перетворюємо лише x, оскільки обертання сервомотора базується на русі значення x.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI);
Значення кута X, від 0 до 360 градусів, перетворюється в 0 до 180.
int pos = карта (x, 0,180,0,180);
Потім напишіть значення кута, щоб повернути сервопривід на кутомірному зображенні, і надрукуйте ці значення на РК-дисплеї 16x2.
myservo.write (pos); lcd.setCursor (0,0); lcd.print ("Кут"); lcd.setCursor (0,1); lcd.print (x); затримка (500); lcd.clear ();
Отже, ось як MPU6050 з Arduino можна використовувати для вимірювання кута. Повний код та відео для цього проекту подано нижче.