MPU6050: modul för positionering med Arduino

MPU6050-kort

Om du behöver skapa ett projekt och placera det, det vill säga vet hur placeras den när det gäller utrymme kan du använda modulen MPU6050. Det vill säga den här modulen är en tröghetsmätningsenhet eller IMU (Inertial Measurment Units) med 6 frihetsgrader (DoF). Det är tack vare 3-axliga sensorer av accelerometertyp och ett 3-axligt gyroskop som det implementerar för att fungera.

Denna MPU6050 kan veta hur det innehållande objektet är placerat för användning i tillämpningar navigering, goniometri, stabilisering, gestkontroll etc. Mobiltelefoner innehåller vanligtvis denna typ av sensorer för att till exempel styra vissa funktioner genom gester, som att stanna om smarttelefonen vänds, att köra fordon i videospel genom att vrida mobilen som om det var en ratt etc.

Vad är en accelerometer och ett gyroskop?

MEMS Exempel

MEMS Exempel

Låt oss gå i delar. Det första är att se vad dessa typer av sensorer är det kan upptäcka acceleration och svängar, som kan dras av deras egna namn.

  • accelerometer: mäter acceleration, det vill säga förändringen i hastighet per tidsenhet. Kom ihåg att förändringen i hastighet med tiden i fysik (a = dV / dt) är definitionen av acceleration. Enligt Newtons andra lag har vi också att a = F / m, och det är vad accelerometrar använder för att arbeta, det vill säga de använder parametrarna för objektets kraft och massa. För att detta ska kunna implementeras i elektronik används MEMS-tekniker (Micro Electro Mechanical Systems), som skiljer sig från konventionella elektroniska chiptillverkningstekniker, eftersom mekaniska delar skapas i en MEMS. I detta fall skapas spår eller element som kan mäta accelerationer. Detta innebär att många andra enheter kan tas, såsom hastighet (om acceleration integreras i tid), om den integreras igen har vi förskjutning etc. Det vill säga mycket intressanta parametrar för att känna till ett objekts position eller detektera rörelse.
  • gyroskop: även kallat gyroskop, det är en anordning som mäter ett objekts vinkelhastighet, det vill säga vinkelförskjutningen per tidsenhet eller hur snabbt en kropp roterar runt sin axel. I detta fall används MEMS-tekniker också för att mäta denna hastighet med en effekt som kallas Coriolis. Tack vare detta kan vinkelhastigheten mätas eller, genom att integrera vinkelhastigheten med avseende på tiden, kan vinkelförskjutningen erhållas.

MPU6050-modul

MPU6050 pinout

Nu när du vet vad accelerometern och gyroskopet är, MPU6050-modulen Det är ett elektroniskt kort som integrerar dessa två element så att du kan mäta dessa förändringar i ett element och därmed kunna generera en reaktion. Till exempel att när ett objekt rör sig tänds en LED eller andra mycket mer komplexa saker.

Som jag sa har den sex frihetsaxlar, DoF, 3-axlig X-, Y- och Z-accelerationsmätare och annat 3-axligt gyroskop för att mäta vinkelhastigheten. Du måste ta hänsyn till att inte göra ett misstag i hur du placerar modulen och rotationsriktningen för mätningarna, eftersom om du gör fel tecken blir det lite kaotiskt. Titta på följande bild där den anger riktningen på axlarna (dock observera att PCB själv också har den tryckt på ena sidan):

Datablad MPU6050

Med tanke på detta och pinout, mer eller mindre har du allt klart för att börja använda MPU6050. Som du kan se i föregående bild är anslutningarna ganska enkla och det gör att I2C-kommunikation kan vara kompatibel med de flesta mikrokontroller, inklusive Arduino. SCL- och SDA-stiften har ett uppdragningsmotstånd på kortet för direkt anslutning till Arduino-kortet, så du behöver inte oroa dig för att lägga till dem själv.

För att arbeta med båda riktningarna på I2C-bussen kan du använda dessa stift och anvisningar:

  • AD0 = 1 eller hög (5v): för I0C-adress 69x2.
  • AD0 = 0 eller låg (GND eller Nc): för adress 0x68 på I2C-bussen.

Kom ihåg att modellens driftspänning är 3v3, men lyckligtvis har den en inbyggd regulator, så den kan bytas med Arduinos 5v utan problem och den kommer att förvandla den till 3.3v.

Förresten, med ett internt motstånd mot GND, om denna stift inte är ansluten, adressen som standard är det 0x68, eftersom den kommer att anslutas som standard till jorden, och tolkas som en logisk 0.

Integration med Arduino

Arduino och MPU6050 anslutning

Du kan få mer information om I2C-bussen i den här artikeln. Du vet redan att pinnarna som används för bussen varierar beroende på Arduino-kortet, men i Arduino UNO är den analoga stiftet A4 och A5, för SDA (data) och SCL (klocka) respektive. De är de enda Arduino-stiften, tillsammans med 5v och GND för att driva kortet, som du ska använda. Så anslutningen är så enkel som möjligt.

För funktionerna i MPU6050 kan du använda biblioteken där du kan få mer information i den här länken för I2C av modulen och bussens MPU6050.

Arduino-kortprogrammering är inte så enkel med MPU6050, så det är inte för nybörjare. Dessutom, om du känner till gränserna för accelerationerna eller vinklarna, kan du kalibrera för att bestämma exakt rörelse eller acceleration. Men så att du åtminstone kan ha ett exempel på hur du kan kommentera att använda den kan du se den här koden från Exempel på skiss för din Arduino IDE som läser värdena registrerade av accelerometern och gyroskopet:

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

Om du är nybörjare och inte vet det bra hur man programmerar med Arduino IDEDetta blir svårt för dig att förstå, så du kan läsa vår manual med introduktionskursen till Arduino programmering gratis ...


Bli först att kommentera

Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.