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, така че не е за начинаещи. Освен това, знаейки границите на ускоренията или диапазоните на ъглите, можете да калибрирате, за да определите какво точно е било движението или ускорението. За да можете поне да имате пример за това как да коментирате използването му, можете да видите този код от Примерен скица за вашия Arduino IDE който ще отчете стойностите, записани от акселерометъра и жироскопа:

// 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. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.