MPU6050: modul til positionering med Arduino

MPU6050-kort

Hvis du har brug for at oprette et projekt og positionere det, det vil sige, ved det hvordan er den placeret med hensyn til plads, kan du bruge modulo MPU6050. Med andre ord er dette modul en inertimåleenhed eller IMU (Inertial Measurment Units) med 6 frihedsgrader (DoF). Det er takket være de 3-aksede accelerometer-type sensorer og et 3-akset gyroskop, som det implementerer for at fungere.

Denne MPU6050 kan vide, hvordan objektet, der indeholder det, er placeret til at bruge det i applikationer navigation, retningssøgning, stabilisering, gestuskontrol mv. Mobiltelefoner indeholder normalt denne type sensorer til for eksempel at styre visse funktioner gennem bevægelser, såsom at stoppe, hvis smartphonen vendes om, køre køretøjer i videospil ved at dreje mobilen, som om den var et rat, osv.

Hvad er et accelerometer og et gyroskop?

MEMS eksempler

MEMS eksempler

Ok, lad os gå i dele. Den første ting er at se, hvad disse typer sensorer er er i stand til at registrere acceleration og sving, som det kan udledes af deres egne navne.

  • accelerometer: måler acceleration, det vil sige variationen af ​​hastigheden pr. tidsenhed. Husk, at i fysik er ændringen i hastighed med hensyn til tid (a=dV/dt) definitionen af ​​acceleration. Ifølge Newtons anden lov har vi også, at a=F/m, og det er det, accelerometre bruger til at arbejde, det vil sige, de bruger kraft- og masseparametre for objektet. For at dette kan implementeres i elektronik, anvendes MEMS (Micro Electro Mechanical Systems) teknikker, som adskiller sig fra konventionelle elektroniske chip fremstillingsteknikker, da mekaniske dele er skabt i et MEMS. I dette tilfælde oprettes spor eller elementer, der er i stand til at måle accelerationer. Dette indebærer, at mange andre enheder kan opnås, såsom hastighed (hvis acceleration integreres over tid), hvis den integreres igen, opnås forskydning osv. Det vil sige meget interessante parametre til at kende positionen eller detektere bevægelse af et objekt.
  • gyroskop: Også kaldet et gyroskop, det er en enhed, der måler vinkelhastigheden af ​​et objekt, det vil sige vinkelforskydningen pr. tidsenhed eller hvor hurtigt et legeme roterer om sin akse. I dette tilfælde bruges MEMS-teknikker også til at måle hastigheden ved hjælp af en effekt kendt som Coriolis. Takket være dette kan vinkelhastigheden måles, eller ved at integrere vinkelhastigheden i forhold til tiden kan vinkelforskydningen opnås.

MPU6050 modul

MPU6050 pinout

Nu hvor du ved hvad accelerometeret og gyroskopet er, MPU6050-modulet Det er en elektronisk tavle, der integrerer disse to elementer, så du kan måle disse ændringer i et elements position og dermed være i stand til at generere en reaktion. For eksempel, når et objekt bevæger sig, lyser en LED eller andre meget mere komplekse ting.

Som sagt har den 6 frihedsakser, DoF, 3 akser til accelerometeret X, Y og Z til acceleration og yderligere 3 akser til gyroskopet at måle vinkelhastighed. Du skal tage højde for ikke at lave en fejl i måden du placerer modulet på og omdrejningsretningen for målingerne, da hvis du laver et forkert tegn, bliver det lidt kaotisk. Se på følgende billede, hvor det angiver retningen af ​​akserne (bemærk dog, at selve printkortet også har det trykt på den ene side):

Datablad MPU6050

Under hensyntagen til dette og pinout, mere eller mindre har du alt klart for at begynde at bruge MPU6050. Som du kan se på billedet ovenfor, er forbindelserne ret enkle, og det gør det muligt for I2C-kommunikation at være kompatibel med de fleste mikrocontrollere, inklusive Arduino. SCL- og SDA-stifterne har en pull-up-modstand på kortet for direkte forbindelse til Arduino-kortet, så du ikke selv skal bekymre dig om at tilføje dem.

For at arbejde med begge retninger over I2C-bussen kan du bruge disse stifter og retninger:

  • AD0=1 eller Høj (5v): for I0C-adresse 69x2.
  • AD0=0 eller Lav (GND eller Nc): for adresse 0x68 på I2C-bussen.

Husk at driftsspændingen på modellen er 3v3, men heldigvis har den en integreret regulator, så den kan fodres med Arduino 5v uden problemer og den vil omdanne den til 3.3v.

Forresten, at have en intern modstand mod GND, hvis du ikke forbinder denne pin, retningen som standard vil det være 0x68, da den som standard vil være forbundet til jord, fortolket som en logisk 0.

Integration med Arduino

Arduino og MPU6050 forbindelse

Du kan få mere information om I2C-bussen i denne artikel. Du ved allerede, at afhængigt af Arduino-brættet varierer stifterne, der bruges til bussen, men i Arduino UNO er den analoge pin A4 og A5, for SDA (data) og SCL (ur) henholdsvis. De er de eneste Arduino-stifter, sammen med 5v og GND til at drive kortet, som du skal bruge. Så forbindelsen er så enkel som muligt.

For funktionerne i MPU6050 kan du bruge bibliotekerne, som du kan få mere information om i dette link til I2C af modulet og bussens MPU6050.

Arduino-kortprogrammering er ikke for let med MPU6050, så det er ikke for begyndere. Ved at kende grænserne for accelerationerne eller vinklernes intervaller kan den desuden kalibreres for at bestemme, hvad den nøjagtige bevægelse eller acceleration har været. Men for at du i det mindste kan have et eksempel på, hvordan du kommenterer ved hjælp af det, kan du se denne kode fra eksempelskitse til din Arduino IDE Som vil læse værdierne registreret af accelerometeret og 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);
}

Hvis du er nybegynder og ikke ved godt hvordan man programmerer med arduino ideDette vil være svært for dig at forstå, så du kan konsultere vores manual med det gratis Arduino-programmeringsinitieringskursus...


Vær den første til at kommentere

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.