MPU6050: modul for posisjonering med Arduino

MPU6050 brett

Hvis du trenger å lage et prosjekt og posisjonere det, det vil si vite hvordan er den plassert når det gjelder plass, kan du bruke modulen MPU6050. Det vil si at denne modulen er en treghetsmåleenhet eller IMU (Inertial Measurment Units) med 6 frihetsgrader (DoF). Det er takket være 3-akse sensorer av akselerometer-typen og et 3-akset gyroskop som den implementerer for å fungere.

Denne MPU6050 kan vite hvordan det inneholder objektet er plassert for bruk i programmer navigasjon, goniometri, stabilisering, gestkontroll, etc. Mobiltelefoner inkluderer vanligvis denne typen sensorer for for eksempel å kontrollere bestemte funksjoner gjennom bevegelser, for eksempel å stoppe hvis smarttelefonen blir snudd, kjøre biler i videospill ved å vri på mobilen som om det var et ratt, etc.

Hva er et akselerometer og et gyroskop?

MEMS Eksempler

MEMS Eksempler

Vel, la oss gå i deler. Det første er å se hva disse typer sensorer er det er i stand til å oppdage akselerasjon og svinger, som kan trekkes fra eget navn.

  • akselerometer: måler akselerasjon, det vil si endring i hastighet per tidsenhet. Husk at i fysikk er hastighetsendring med tid (a = dV / dt) definisjonen av akselerasjon. I følge Newtons andre lov har vi også at a = F / m, og det er det akselerometre bruker for å arbeide, det vil si at de bruker parametere for kraft og masse av objektet. For at dette kan implementeres i elektronikk, brukes MEMS (Micro Electro Mechanical Systems) teknikker, som skiller seg fra konvensjonelle elektroniske chipproduksjonsteknikker, siden mekaniske deler er opprettet i en MEMS. I dette tilfellet opprettes spor eller elementer som er i stand til å måle akselerasjoner. Dette innebærer at mange andre enheter kan tas, for eksempel hastighet (hvis akselerasjon er integrert i tide), hvis den er integrert igjen, har vi forskyvning osv. Det vil si veldig interessante parametere for å kjenne posisjonen eller oppdage bevegelse av et objekt.
  • gyroskop: også kalt et gyroskop, det er en enhet som måler vinkelhastigheten til et objekt, det vil si vinkelforskyvningen per tidsenhet eller hvor raskt et legeme roterer rundt sin akse. I dette tilfellet brukes også MEMS-teknikker for å måle denne hastigheten ved hjelp av en effekt kjent som Coriolis. Takket være dette kan vinkelhastigheten måles, eller ved å integrere vinkelhastigheten med hensyn til tid, kan vinkelforskyvningen oppnås.

MPU6050-modul

MPU6050 pinout

Nå som du vet hva akselerometeret og gyroskopet er, MPU6050-modulen Det er et elektronisk kort som integrerer disse to elementene slik at du kan måle disse endringene i posisjonen til et element og dermed være i stand til å generere en reaksjon. For eksempel at når et objekt beveger seg, lyser en LED, eller andre mye mer komplekse ting.

Som jeg sa, den har 6 frihetsakser, DoF, 3-akse X, Y og Z akselerasjonsmåler og annet 3-akset gyroskop for å måle vinkelhastighet. Du må ta i betraktning å ikke gjøre en feil i måten du plasserer modulen og rotasjonsretningen for målingene, siden hvis du gjør feil tegn, vil det være litt kaotisk. Se på følgende bilde der det angir retningen på aksene (men vær oppmerksom på at PCB selv også har det trykket på den ene siden):

Dataark MPU6050

Tatt i betraktning dette og pinout, mer eller mindre har du alt klart for å begynne å bruke MPU6050. Som du kan se i forrige bilde, er tilkoblingene ganske enkle og gjør at I2C-kommunikasjon kan være kompatibel med de fleste mikrokontrollere, inkludert Arduino. SCL- og SDA-pinnene har en opptrekksmotstand på kortet for direkte tilkobling til Arduino-kortet, så du trenger ikke å bekymre deg for å legge dem til selv.

For å jobbe med begge retninger på I2C-bussen, kan du bruke disse pinner og retninger:

  • AD0 = 1 eller høy (5v): for I0C-adresse 69x2.
  • AD0 = 0 eller lav (GND eller Nc): for adresse 0x68 til I2C-bussen.

Husk at driftsspenningen til modellen er 3v3, men heldigvis har den en innebygd regulator, så den kan byttes med Arduino's 5v uten problemer, og den vil forvandle den til 3.3v.

Forresten, å ha en intern motstand mot GND, hvis denne pinnen ikke er koblet til, adressen som standard vil den være 0x68, siden den som standard blir koblet til bakken, og tolker den som et logisk 0.

Integrasjon med Arduino

Arduino og MPU6050 tilkobling

Du kan få mer informasjon om I2C-bussen i denne artikkelen. Du vet allerede at avhengig av Arduino-kortet varierer pinnene som brukes til bussen, men i Arduino UNO er den analoge stiften A4 og A5, for SDA (data) og SCL (klokke) henholdsvis. De er de eneste Arduino-pinnene, sammen med 5v og GND som driver strømbrettet, som du bør bruke. Så forbindelsen er så enkel som mulig.

For funksjonene til MPU6050 kan du bruke bibliotekene som du kan få mer informasjon i denne lenken for I2C av modulen og bussen MPU6050.

Programmering av Arduino-brett er ikke så grei med MPU6050, så det er ikke for nybegynnere. I tillegg, ved å vite grensene for akselerasjonene eller områdene til vinklene, kan du kalibrere for å bestemme hva den eksakte bevegelsen eller akselerasjonen var. Men slik at du i det minste kan ha et eksempel på hvordan du kan kommentere ved å bruke den, kan du se denne koden fra Eksempelskisse for din Arduino IDE som vil lese verdiene registrert av akselerometeret 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 nybegynner og ikke kjenner godt hvordan du programmerer med Arduino IDE, dette vil være vanskelig for deg å forstå, så du kan konsultere vår manual med introduksjonskurset til Arduino programmering gratis ...


Bli den første til å kommentere

Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.