MPU6050: modul de poziționare cu Arduino

Placă MPU6050

Dacă trebuie să creați un proiect și să îl poziționați, adică să știți cum este plasat în ceea ce privește spațiul, puteți utiliza modulul MPU6050. Adică, acest modul este o unitate de măsură inerțială sau IMU (Inertial Measurment Units) cu 6 grade de libertate (DoF). Asta datorită senzorilor de tip accelerometru pe 3 axe și unui giroscop pe 3 axe pe care îl implementează pentru a funcționa.

Acest MPU6050 poate ști cum este poziționat obiectul care conține pentru utilizare aplicații navigare, goniometrie, stabilizare, control gestual etc. Telefoanele mobile includ de obicei acest tip de senzori pentru, de exemplu, să controleze anumite funcții prin gesturi, cum ar fi oprirea dacă smartphone-ul este răsturnat, conducerea vehiculelor în jocuri video prin rotirea telefonului ca și cum ar fi un volan etc.

Ce este un accelerometru și un giroscop?

Exemple MEMS

Exemple MEMS

Ei bine, hai să mergem în părți. Primul lucru este să vedem care sunt aceste tipuri de senzori sunt capabili să detecteze accelerația și virajele, după cum se poate deduce din propriile nume.

  • accelerometru: măsoară accelerarea, adică schimbarea vitezei pe unitate de timp. Amintiți-vă că în fizică, schimbarea vitezei cu timpul (a = dV / dt) este definiția accelerației. Conform celei de-a doua legi a lui Newton, avem, de asemenea, că a = F / m, și asta folosesc accelerometrele pentru a lucra, adică folosesc parametri de forță și masă a obiectului. Pentru ca acest lucru să poată fi implementat în electronică, se utilizează tehnici MEMS (sisteme microelectro mecanice), care diferă de tehnicile convenționale de fabricare a cipurilor electronice, deoarece piesele mecanice sunt create într-un MEMS. În acest caz, sunt create piste sau elemente capabile să măsoare accelerațiile. Acest lucru implică faptul că pot fi luate multe alte unități, cum ar fi viteza (dacă accelerația este integrată în timp), dacă este integrată din nou, avem deplasare etc. Adică parametri foarte interesanți pentru a cunoaște poziția sau a detecta mișcarea unui obiect.
  • giroscop: numit și giroscop, este un dispozitiv care măsoară viteza unghiulară a unui obiect, adică deplasarea unghiulară pe unitate de timp sau cât de repede se rotește un corp în jurul axei sale. În acest caz, tehnicile MEMS sunt de asemenea utilizate pentru a măsura această viteză folosind un efect cunoscut sub numele de Coriolis. Datorită acestui fapt, viteza unghiulară poate fi măsurată sau, prin integrarea vitezei unghiulare în raport cu timpul, se poate obține deplasarea unghiulară.

Modul MPU6050

Pinout MPU6050

Acum, că știi ce sunt accelerometrul și giroscopul, modulul MPU6050 Este o placă electronică care integrează aceste două elemente pentru a vă permite să măsurați aceste schimbări în poziția unui element și astfel să puteți genera o reacție. De exemplu, atunci când un obiect se mișcă, un LED se aprinde sau alte lucruri mult mai complexe.

Așa cum am spus, are 6 axe ale libertății, DoF, Accelerometru de accelerare cu 3 axe X, Y și Z și alt giroscop cu 3 axe pentru a măsura viteza unghiulară. Trebuie să luați în considerare să nu faceți o greșeală în modul în care poziționați modulul și direcția de rotație pentru măsurători, deoarece dacă faceți semnul greșit va fi un pic haotic. Uitați-vă la următoarea imagine în care specifică direcția axelor (cu toate acestea, observați că PCB-ul însuși îl are imprimat pe o parte):

Fișă tehnică MPU6050

Având în vedere acest lucru și pinout, mai mult sau mai puțin aveți totul clar pentru a începe să utilizați MPU6050. După cum puteți vedea în imaginea anterioară, conexiunile sunt destul de simple și permit comunicarea I2C să fie compatibilă cu majoritatea microcontrolerelor, inclusiv Arduino. Pinii SCL și SDA au un rezistor pull-up pe placă pentru conectarea directă la placa Arduino, deci nu trebuie să vă faceți griji cu privire la adăugarea lor.

Pentru a lucra cu ambele direcții pe autobuzul I2C, le puteți utiliza pini și direcții:

  • AD0 = 1 sau High (5v): pentru adresa I0C 69x2.
  • AD0 = 0 sau Low (GND sau Nc): pentru adresa 0x68 a magistralei I2C.

Amintiți-vă că tensiunea de funcționare a modelului este de 3v3, dar, din fericire, are un regulator încorporat, deci poate fi comutat cu 5v de la Arduino fără probleme și îl va transforma în 3.3v.

Apropo, având o rezistență internă la GND, dacă acest pin nu este conectat, adresa implicit va fi 0x68, deoarece va fi conectat implicit la masă, interpretându-l ca un 0 logic.

Integrare cu Arduino

Conexiune Arduino și MPU6050

Poți obține mai multe informații despre autobuzul I2C în acest articol. Știți deja că, în funcție de placa Arduino, pinii utilizați pentru autobuz variază, dar în Arduino UNO este pinul analogic A4 și A5, pentru SDA (date) și SCL (ceas) respectiv. Acestea sunt singurele pini Arduino, împreună cu cele 5v și GND care alimentează placa, pe care ar trebui să le utilizați. Deci conexiunea este cât se poate de simplă.

Pentru funcțiile MPU6050 puteți utiliza bibliotecile despre care puteți obține mai multe informații în acest link pentru I2C a modulului și a autobuzului MPU6050.

Programarea plăcilor Arduino nu este prea simplă cu MPU6050, deci nu este pentru începători. În plus, cunoscând limitele accelerațiilor sau intervalelor unghiurilor, puteți calibra pentru a determina care a fost mișcarea sau accelerația exactă. Cu toate acestea, astfel încât să puteți avea cel puțin un exemplu despre cum să comentați utilizarea acestuia, puteți vedea acest cod din Exemplu de schiță pentru IDE-ul dvs. Arduino care va citi valorile înregistrate de accelerometru și giroscop:

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

Dacă ești începător și nu știi bine cum se programează cu Arduino IDE, acest lucru vă va fi dificil de înțeles, așadar puteți consulta gratuit manualul nostru cu cursul introductiv la programarea Arduino ...


Fii primul care comenteaza

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.