MPU6050: mòdul per a posicionament amb Arduino

placa MPU6050

Si necessites crear un projecte i posicionar-lo, és a dir, saber com està col·locat pel que fa a l'espai, pots fer servir el mòdul MPU6050. És a dir, que aquest mòdul és una unitat de mesura inercial o IMU (Inertial measurment Units) amb 6 graus de llibertat (DoF). Això és gràcies als sensors de tipus acceleròmetre de 3 eixos ia un giroscopi de 3 eixos que implementa per treballar.

Aquest MPU6050 pot saber com està posicionat l'objecte que el conté per usar-lo en aplicacions de navegació, goniometria, estabilització, control per gestos, etc. Els telèfons mòbils solen incloure aquest tipus de sensors per a, per exemple, controlar certes funcions mitjançant gestos, com aturar si se li dóna la volta a l'smartphone, conduir vehicles en videojocs girant el mòbil com si fos un volant, etc.

Què és un acceleròmetre i un giroscopi?

Exemples de MEMS

Exemples de MEMS

Bé, anem per parts. El primer és veure què són aquests tipus de sensors que són capaços de detectar acceleració i girs, Com es pot deduir dels seus propis noms.

  • acceleròmetre: Mesura acceleració, és a dir, la variació de velocitat per unitat de temps. Recorda que en física, el canvi de velocitat respecte de el temps (a = dV / dt) és la definició d'acceleració. Segons la Segona Llei de Newton, també tenim que a = F / m, i això és el que fan servir els acceleròmetres per funcionar, és a dir, fan servir paràmetres de força i massa de l'objecte. Perquè això es pugui implementar en l'electrònica, s'usen tècniques de MEMS (Micro Electro Mechanical Systems), que difereixen en les tècniques de fabricació de xips electrònics convencionals, ja que en un MEMS es creen parts mecàniques. En aquest cas, es creen unes pistes o elements capaços de mesurar acceleracions. Això implica que es poden treure moltes altres unitats, com velocitat (si s'integra l'acceleració en el temps), si s'integra novament es té el desplaçament, etc. És a dir, paràmetres molt interessants per saber la posició o detectar moviment d'un objecte.
  • giroscopi: També anomenat giróscope, és un dispositiu que mesura la velocitat angular d'un objecte, és a dir, el desplaçament angular per unitat de temps o la rapidesa amb què gira un cos al voltant del seu eix. En aquest cas, també es fan servir tècniques MEMS per mesurar aquesta velocitat usant un efecte conegut com Coriolis. Gràcies a això es pot mesurar la velocitat angular o, integrant la velocitat angular respecte a el temps, es pot obtenir el desplaçament angular.

mòdul MPU6050

pinout de l'MPU6050

Ara que ja saps què és l'acceleròmetre i el giroscopi, el mòdul MPU6050 és una placa electrònica que integra aquests dos elements per permetre mesurar aquests canvis de posició d'un element i així poder generar una reacció. Per exemple, que quan un objecte es mogui s'encengui un LED, o altres coses molt més complexes.

Com he dit, té 6 eixos de llibertat, DoF, 3 eixos per l'acceleròmetre X, Y, i Z d'acceleració, i altres 3 eixos de l'giroscopi per mesurar la velocitat angular. Has de tenir en compte no equivocar-te en la forma en què posiciones el mòdul i el sentit de el gir per als mesuraments, ja que si t'equivoques de signe serà una mica caòtic. Fixa't en la següent imatge on especifica el sentit dels eixos (no obstant això, fixa't que el la pròpia PCB també ho té imprès en un lateral):

Datasheet MPU6050

Tenint en compte això i el pinout, Més o menys ho tens tot clar per començar a fer servir el MPU6050. Com pots veure en la imatge anterior, les connexions són bastant sencillasy permet la comunicació per I2C per a ser compatible amb la majoria de microcontroladors, inclòs el d'Arduino. Els pins SCL i SDA tenen una resistència pull-up a la placa per una connexió directa amb la placa d'Arduino, de manera que no t'has de preocupar per afegir-les pel teu compte.

Per treballar amb les dues direccions pel bus I2C, pots fer servir aquests pins i adreces:

  • AD0 = 1 o High (5v): per a la direcció 0x69 de l'I2C.
  • AD0 = 0 o Low (GND o Nc): per a la direcció 0x68 de el bus I2C.

Recorda que el voltatge de funcionament de el model és 3v3, però afortunadament té un regulador integrat, de manera que es pot aliemtnar amb el 5v d'Arduino sense problema i el transformarà en 3.3V.

Per cert, a l'tenir una resistència interna a GND, si no es connecta aquest pin, la direcció per defecte serà la 0x68, Ja que estarà connectat per defecte a la terra, interpretant com un 0 lògic.

Integració amb Arduino

connexió d'Arduino i MPU6050

pots obtenir més informació sobre el bus I2C en aquest article. Ja saps que depenent de la placa Arduino varien els pins usats per al bus, però en la Arduino UNO és el pin analògic A4 i A5, per SDA (dades) i SCL (clock) respectivament. Són els únics pins d'Arduino, juntament amb el de 5v i GND per alimentar la placa, que has de fer servir. Així que la connexió és el més senzilla possible.

Per a les funcions de l'MPU6050 pots fer servir les biblioteques de les que pots obtenir més informació en aquest enllaç per a la I2C de la lliçó i la de l'autobús MPU6050.

La programació de la placa Arduino no és massa senzilla amb el MPU6050, així que no és per a principiants. A més, sabent els límits de les acceleracions o rangs dels angles, es pot calibrar per determinar quin ha estat el moviment exacte o acceleració. No obstant això, perquè puguis a el menys tenir un exemple de com comentar les a utilitzar, pots veure aquest codi de l' sketch d'exemple per a la teva Arduino IDE que llegirà els valors registrats per l'acceleròmetre i giroscopi:

// 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);
}

Si ets principiant i no coneixes bé com programar amb Arduino IDE, Això et resultarà complicat d'entendre, per això pots consultar el nostre manual amb el curs d'iniciació a la programació d'Arduino gratis ...


Sigues el primer a comentar

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.