MPU6050: модуль для позиціонування за допомогою Arduino

Плата MPU6050

Якщо вам потрібно створити проект і розмістити його, тобто знайте як він розміщений щодо простору, ви можете використовувати модуль MPU6050. Тобто цей модуль є інерційною одиницею вимірювання або IMU (Інерційні вимірювальні одиниці) з 6 ступенями свободи (DoF). Це завдяки 3-осьовим датчикам акселерометра та 3-осьовому гіроскопу, який він застосовує для роботи.

Цей MPU6050 може знати, як розміщується об'єкт, що містить, для використання в застосування навігація, гоніометрія, стабілізація, управління жестами тощо. Мобільні телефони зазвичай мають цей тип датчиків, наприклад, для управління певними функціями за допомогою жестів, таких як зупинка, якщо смартфон перевернутий, керування транспортними засобами у відеоіграх, повертаючи мобільний телефон так, ніби він був кермом тощо.

Що таке акселерометр і гіроскоп?

Приклади MEMS

Приклади MEMS

Що ж, підемо частинами. Перше, що потрібно побачити, що це за типи датчиків здатні виявляти прискорення і повороти, як це можна зробити з їх власних назв.

  • Акселерометр: вимірює прискорення, тобто зміну швидкості за одиницю часу. Пам'ятайте, що у фізиці зміна швидкості з часом (a = dV / dt) є визначенням прискорення. Відповідно до Другого закону Ньютона, ми також маємо, що a = F / m, і це те, що акселерометри використовують для роботи, тобто вони використовують параметри сили та маси об’єкта. Для того, щоб це можна було впровадити в електроніці, використовуються методи MEMS (Micro Electro Mechanical Systems), які відрізняються від звичайних технологій виготовлення електронних чіпів, оскільки механічні деталі створюються в MEMS. У цьому випадку створюються доріжки або елементи, здатні вимірювати прискорення. Це означає, що можна взяти багато інших одиниць, таких як швидкість (якщо прискорення інтегрується у часі), якщо воно інтегрується знову, ми маємо переміщення тощо. Тобто дуже цікаві параметри, щоб знати положення або виявити рух об’єкта.
  • Гіроскоп: також званий гіроскопом, це пристрій, який вимірює кутову швидкість об’єкта, тобто кутове переміщення за одиницю часу або швидкість обертання тіла навколо своєї осі. У цьому випадку для вимірювання зазначеної швидкості також використовуються методи MEMS з використанням ефекту, відомого як Коріоліс. Завдяки цьому можна виміряти кутову швидкість або, інтегруючи кутову швидкість щодо часу, можна отримати кутове зміщення.

Модуль MPU6050

Розпіновка MPU6050

Тепер, коли ви знаєте, що таке акселерометр і гіроскоп, модуль MPU6050 Це електронна плата, яка інтегрує ці два елементи, щоб дозволити вам виміряти ці зміни в положенні елемента і таким чином мати можливість викликати реакцію. Наприклад, що при русі об’єкта загоряється світлодіод або інші набагато складніші речі.

Як я вже сказав, він має 6 осей свободи, DoF, 3-осьовий акселерометр прискорення X, Y та Z та інший 3-осьовий гіроскоп для вимірювання кутової швидкості. Ви повинні брати до уваги, щоб не робити помилок у тому, як ви позиціонуєте модуль та напрямку обертання для вимірювань, оскільки якщо ви зробите неправильний знак, це буде трохи хаотично. Подивіться на наступне зображення, де воно вказує напрямок осей (однак, зверніть увагу, що на друкованій платі його також надруковано з одного боку):

Таблиця даних MPU6050

Враховуючи це і розпиновка, більш-менш у вас є все зрозуміло, щоб почати використовувати MPU6050. Як ви можете бачити на попередньому зображенні, з'єднання досить прості, і це дозволяє зв'язку I2C бути сумісним з більшістю мікроконтролерів, включаючи Arduino. Виводи SCL та SDA мають на платі підтягуючий резистор для прямого підключення до плати Arduino, тому вам не доведеться турбуватися про їх додавання самостійно.

Для роботи в обох напрямках на шині I2C ви можете використовувати їх шпильки та вказівки:

  • AD0 = 1 або високий (5v): для адреси I0C 69x2.
  • AD0 = 0 або низький (GND або Nc): для адреси 0x68 шини I2C.

Пам'ятайте, що робоча напруга моделі становить 3v3, але, на щастя, вона має вбудований регулятор, тому її можна без проблем перемкнути на 5v від Arduino, і вона перетворить її на 3.3v.

До речі, маючи внутрішній опір GND, якщо цей штифт не підключений, адреса за замовчуванням це буде 0x68, оскільки він за замовчуванням буде підключений до землі, інтерпретуючи це як логічне 0.

Інтеграція з Arduino

З’єднання Arduino та MPU6050

Ти можеш отримати більше інформації про шину I2C у цій статті. Ви вже знаєте, що залежно від дошки Arduino штифти, які використовуються для автобуса, змінюються, але в Arduino UNO є аналоговим штифтом A4 та A5, для SDA (дані) та SCL (годинник) відповідно. Це єдині шпильки Arduino, разом із 5v та GND для живлення плати, які ви повинні використовувати. Тож підключення максимально просте.

Для функцій MPU6050 ви можете використовувати бібліотеки, для яких ви можете отримати більше інформації за цим посиланням для I2C модуля та шини MPU6050.

Програмування плати Arduino не надто зрозуміле з MPU6050, тому воно не для початківців. Крім того, знаючи межі прискорень або діапазони кутів, ви можете відкалібрувати, щоб визначити, яким саме був рух чи прискорення. Однак, щоб ви могли хоча б мати приклад того, як прокоментувати його використання, ви можете побачити цей код із Приклад ескізу для IDE Arduino який буде зчитувати значення, записані акселерометром та гіроскопом:

// Bibliotecas necesarias:
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"

// Dependiendo del estado de AD0, la dirección puede ser 0x68 o 0x69, para controlar así el esclavo que leerá por el bus I2C
MPU6050 sensor;

// Valores RAW o en crudo leidos del acelerometro y giroscopio en los ejes x,y,z
int ax, ay, az;
int gx, gy, gz;

void setup() {
  Serial.begin(57600);    //Función para iniciar el puerto serie con 57600 baudios
  Wire.begin();           //Inicio para el bus I2C 
  sensor.initialize();    //Iniciando del sensor MPU6050

  if (sensor.testConnection()) Serial.println("Sensor iniciado correctamente");
  else Serial.println("Error al iniciar el sensor");
}

void loop() {
  // Leer las aceleraciones y velocidades angulares
  sensor.getAcceleration(&ax, &ay, &az);
  sensor.getRotation(&gx, &gy, &gz);

  // Muestra las lecturas que va registrando separadas por una tabulación 
  Serial.print("a[x y z] g[x y z]:\t");
  Serial.print(ax); Serial.print("\t");
  Serial.print(ay); Serial.print("\t");
  Serial.print(az); Serial.print("\t");
  Serial.print(gx); Serial.print("\t");
  Serial.print(gy); Serial.print("\t");
  Serial.println(gz);

  delay(100);
}

Якщо ви новачок і погано знаєте як програмувати за допомогою Arduino IDEВам це буде важко зрозуміти, тому ви можете безкоштовно ознайомитися з нашим посібником із вступним курсом програмування Arduino ...


Будьте першим, щоб коментувати

Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.