MPU6050: module voor positionering met Arduino

MPU6050-kaart

Als u een project moet maken en het moet positioneren, dat wil zeggen, weet het hoe wordt het geplaatst wat betreft ruimte kun je gebruik maken van de module MPU6050. Dat wil zeggen, deze module is een traagheidsmeeteenheid of IMU (Inertial Measurment Units) met 6 vrijheidsgraden (DoF). Dat is te danken aan de 3-assige sensoren van het accelerometer-type en een 3-assige gyroscoop die het implementeert om te werken.

Deze MPU6050 kan weten hoe het bevattende object is gepositioneerd voor gebruik in toepassingen navigatie, goniometrie, stabilisatie, gebarencontrole, enz. Mobiele telefoons bevatten meestal dit soort sensoren om bijvoorbeeld bepaalde functies te bedienen door middel van gebaren, zoals stoppen als de smartphone wordt omgedraaid, voertuigen besturen in videogames door de mobiel te draaien alsof het een stuur is, enz.

Wat is een versnellingsmeter en een gyroscoop?

MEMS-voorbeelden

MEMS-voorbeelden

Nou, laten we in delen gaan. Het eerste is om te zien wat dit soort sensoren zijn kunnen versnellingen en bochten detecteren, zoals kan worden afgeleid uit hun eigen namen.

  • accelerometer: meet de versnelling, dat wil zeggen de verandering in snelheid per tijdseenheid. Onthoud dat in de natuurkunde de verandering in snelheid met de tijd (a = dV / dt) de definitie van versnelling is. Volgens de tweede wet van Newton hebben we ook die a = F / m, en dat is wat versnellingsmeters gebruiken om te werken, dat wil zeggen, ze gebruiken parameters van kracht en massa van het object. Om dit in de elektronica te implementeren, worden MEMS-technieken (Micro Electro Mechanical Systems) gebruikt, die verschillen van conventionele fabricagetechnieken voor elektronische chips, aangezien mechanische onderdelen worden gemaakt in een MEMS. In dit geval worden sporen of elementen gemaakt die versnellingen kunnen meten. Dit houdt in dat veel andere eenheden kunnen worden genomen, zoals snelheid (als versnelling in de tijd wordt geïntegreerd), als het weer wordt geïntegreerd, hebben we verplaatsing, enz. Dat wil zeggen, zeer interessante parameters om de positie te kennen of beweging van een object te detecteren.
  • gyroscoop: ook wel gyroscoop genoemd, het is een apparaat dat de hoeksnelheid van een object meet, dat wil zeggen de hoekverplaatsing per tijdseenheid of hoe snel een lichaam om zijn as draait. In dit geval worden MEMS-technieken ook gebruikt om deze snelheid te meten met behulp van een effect dat bekend staat als Coriolis. Hierdoor kan de hoeksnelheid worden gemeten of, door de hoeksnelheid in de tijd te integreren, de hoekverplaatsing worden verkregen.

MPU6050-module

MPU6050 pinout

Nu je weet wat de versnellingsmeter en gyroscoop zijn, de MPU6050-module Het is een elektronisch bord dat deze twee elementen integreert, zodat u deze veranderingen in de positie van een element kunt meten en zo een reactie kunt genereren. Bijvoorbeeld dat wanneer een object beweegt een LED gaat branden, of andere veel complexere dingen.

Zoals ik al zei, het heeft 6 assen van vrijheid, DoF, 3-assige X-, Y- en Z-acceleratiemeter en andere 3-assige gyroscoop om de hoeksnelheid te meten. U moet er rekening mee houden dat u geen fouten maakt in de manier waarop u de module positioneert en de draairichting voor de metingen, want als u het verkeerde teken maakt, wordt het een beetje chaotisch. Kijk naar de volgende afbeelding waar het de richting van de assen aangeeft (merk echter op dat het op de print zelf ook aan één kant is bedrukt):

Gegevensblad MPU6050

Gezien dit en de pinout, min of meer heb je alles duidelijk om de MPU6050 te gaan gebruiken. Zoals je in de vorige afbeelding kunt zien, zijn de verbindingen vrij eenvoudig en is I2C-communicatie compatibel met de meeste microcontrollers, inclusief de Arduino. De SCL- en SDA-pinnen hebben een pull-up-weerstand op het bord voor directe verbinding met het Arduino-bord, dus je hoeft je geen zorgen te maken om ze zelf toe te voegen.

Om met beide richtingen op de I2C-bus te werken, kunt u deze gebruiken pinnen en aanwijzingen:

  • AD0 = 1 of Hoog (5v): voor I0C-adres 69x2.
  • AD0 = 0 of Low (GND of Nc): voor adres 0x68 van de I2C-bus.

Onthoud dat de bedrijfsspanning van het model 3v3 is, maar gelukkig heeft het een ingebouwde regelaar, zodat het probleemloos kan worden aangesloten op de 5v van de Arduino en het zal transformeren naar 3.3v.

Trouwens, met een interne weerstand tegen GND, als deze pin niet is aangesloten, het adres standaard is het 0x68, aangezien het standaard verbonden zal zijn met aarde, het interpreteren als een logische 0.

Integratie met Arduino

Arduino en MPU6050-verbinding

Je kan krijgen meer informatie over de I2C-bus in dit artikel. Je weet al dat afhankelijk van het Arduino-bord de pinnen die voor de bus worden gebruikt, variëren, maar in de Arduino UNO is de analoge pin A4 en A5, voor SDA (data) en SCL (klok) respectievelijk. Dit zijn de enige Arduino-pinnen, samen met de 5v- en GND-pinnen om het bord van stroom te voorzien, die je zou moeten gebruiken. De verbinding is dus zo eenvoudig mogelijk.

Voor de functies van de MPU6050 kunt u de bibliotheken gebruiken waarvan u meer informatie kunt krijgen in deze link voor de I2C van de module en die van de bus MPU6050.

Het programmeren van Arduino-boards is niet zo eenvoudig met de MPU6050, dus het is niet voor beginners. Als u bovendien de limieten van de versnellingen of het bereik van de hoeken kent, kunt u kalibreren om te bepalen wat de exacte beweging of versnelling is geweest. Om u echter op zijn minst een voorbeeld te geven van hoe u commentaar kunt geven op het gebruik ervan, kunt u deze code zien in het Voorbeeldschets voor uw Arduino IDE die de waarden zal lezen die zijn geregistreerd door de versnellingsmeter en gyroscoop:

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

Als je een beginner bent en je weet het niet goed hoe te programmeren met Arduino IDEDit zal voor u moeilijk te begrijpen zijn, dus u kunt onze handleiding met de inleidende cursus Arduino programmeren gratis raadplegen ...


Wees de eerste om te reageren

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.