MPU6050: module vir posisionering met Arduino

MPU6050 bord

As u 'n projek moet opstel en dit moet plaas, weet u dit hoe word dit geplaas ten opsigte van ruimte, kan u die module gebruik MPU6050. Dit wil sê, hierdie module is 'n traagheidseenheid of IMU (traagheidseenhede) met 6 vryheidsgrade (DoF). Dit is te danke aan die sensors van die 3-as-versnellingsmeter en 'n 3-as-gyroscoop wat dit gebruik om te werk.

Hierdie MPU6050 kan weet hoe die bevattende voorwerp geposisioneer is vir gebruik in aansoeke navigasie, goniometrie, stabilisering, gebaarbeheer, ens. Mobiele telefone bevat gewoonlik hierdie tipe sensors om byvoorbeeld sekere funksies deur gebare te beheer, soos om te stop as die slimfoon omgesit word, om motors in videospeletjies te bestuur deur die selfoon te draai asof dit 'n stuurwiel is, ens.

Wat is 'n versnellingsmeter en 'n gyroscoop?

MEMS Voorbeelde

MEMS Voorbeelde

Wel, kom ons gaan in dele. Die eerste ding is om te sien wat hierdie tipe sensors is kan versnelling en draaie opspoor, soos uit hul eie name afgelei kan word.

  • versnelling: meet versnelling, dit wil sê die verandering in spoed per tydseenheid. Onthou dat die verandering van snelheid met die tyd (a = dV / dt) in die fisika die definisie van versnelling is. Volgens Newton se tweede wet het ons ook dat a = F / m, en dit is wat versnellingsmeters gebruik om te werk, dit wil sê, hulle gebruik parameters van krag en massa van die voorwerp. Sodat dit in elektronika geïmplementeer kan word, word MEMS (Micro Electro Mechanical Systems) -tegnieke gebruik, wat verskil van konvensionele elektroniese skyfievervaardigingstegnieke, aangesien meganiese onderdele in 'n MEMS geskep word. In hierdie geval word spore of elemente geskep wat versnellings kan meet. Dit impliseer dat baie ander eenhede geneem kan word, soos snelheid (as versnelling betyds geïntegreer is), as dit weer geïntegreer is, het ons die verplasing, ens. Dit wil sê baie interessante parameters om die posisie of beweging van 'n voorwerp te ken.
  • gyroscoop: ook genoem gyroscoop, dit is 'n toestel wat die hoeksnelheid van 'n voorwerp meet, dit wil sê die hoekverplasing per tydseenheid of hoe vinnig 'n liggaam om sy as draai. In hierdie geval word MEMS-tegnieke ook gebruik om hierdie spoed te meet met behulp van 'n effek wat bekend staan ​​as Coriolis. Hierdeur kan die hoeksnelheid gemeet word, of deur die hoeksnelheid te integreer ten opsigte van tyd, kan die hoekverplasing verkry word.

MPU6050-module

MPU6050 pinout

Noudat u weet wat die versnellingsmeter en gyroscoop is, die MPU6050-module is 'n elektroniese bord wat hierdie twee elemente integreer om u in staat te stel om hierdie veranderinge in die posisie van 'n element te meet en sodoende 'n reaksie te genereer. Byvoorbeeld, wanneer 'n voorwerp beweeg, brand 'n LED, of ander baie meer ingewikkelde dinge.

Soos ek gesê het, dit het 6 asse van vryheid, DoF, 3-as X-, Y- en Z-versnellingsversnellingsmeter, en ander 3-as-gyroscoop om hoeksnelheid te meet. U moet in ag neem om nie foute te maak in die manier waarop u die module en die draairigting vir die metings plaas nie, want as u die verkeerde teken maak, sal dit 'n bietjie chaoties wees. Kyk na die volgende afbeelding waar dit die rigting van die asse spesifiseer (let egter op dat die printplaat self ook aan die een kant laat druk):

Datablad MPU6050

Oorweging van hierdie en die pinout, min of meer het u alles duidelik om die MPU6050 te begin gebruik. Soos u in die vorige prentjie kan sien, is die verbindings redelik eenvoudig en dit laat I2C-kommunikasie toe met die meeste mikrobeheerders, insluitend die Arduino. Die SCL- en SDA-penne het 'n uittrekselweerstand op die bord vir direkte verbinding met die Arduino-bord, dus u hoef nie bekommerd te wees om dit self by te voeg nie.

Om met beide rigtings op die I2C-bus te werk, kan u dit gebruik penne en aanwysings:

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

Onthou dat die werkspanning van die model 3v3 is, maar gelukkig het dit 'n ingeboude reguleerder, sodat dit sonder probleme met die Arduino se 5v kan geskakel word en dit in 3.3v sal omskakel.

Terloops, met 'n interne weerstand teen GND, as hierdie pen nie gekoppel is nie, die adres dit sal standaard 0x68 wees, aangesien dit standaard aan die aarde gekoppel sal word, en dit as 'n logiese 0 interpreteer.

Integrasie met Arduino

Arduino en MPU6050 verbinding

Jy kan kry meer inligting oor die I2C-bus in hierdie artikel. U weet reeds dat die penne wat vir die bus gebruik word, afhangend van die Arduino-bord, maar in die Arduino UNO is die analoog pen A4 en A5, vir SDA (data) en SCL (klok) onderskeidelik. Dit is die enigste Arduino-penne, saam met die 5v- en GND-een wat die bord van krag voorsien. Die verbinding is dus so eenvoudig as moontlik.

Vir die funksies van die MPU6050 kan u die biblioteke gebruik waarvan u meer inligting in hierdie skakel vir die I2C van die module en die van die bus MPU6050.

Arduino-bordprogrammering is nie te eenvoudig met die MPU6050 nie, dus dit is nie vir beginners nie. Daarbenewens kan u die limiete van die versnellings of omvang van die hoeke ken, en u kan ook kalibreer om vas te stel wat die presiese beweging of versnelling was. Sodat u ten minste 'n voorbeeld kan hê van hoe u kommentaar daaroor kan lewer, kan u hierdie kode van die Voorbeeldskets vir u Arduino IDE wat die waardes wat deur die versnellingsmeter en gyroscoop aangeteken is, sal lees:

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

As u 'n beginner is en u nie goed weet nie hoe om met Arduino IDE te programmeer, dit sal moeilik wees om te verstaan, dus kan u ons handleiding met die inleidingskursus vir Arduino-programmering gratis raadpleeg ...


Die inhoud van die artikel voldoen aan ons beginsels van redaksionele etiek. Klik op om 'n fout te rapporteer hier.

Wees die eerste om te kommentaar lewer

Laat u kommentaar

Jou e-posadres sal nie gepubliseer word nie. Verpligte velde gemerk met *

*

*

  1. Verantwoordelik vir die data: Miguel Ángel Gatón
  2. Doel van die data: Beheer SPAM, bestuur van kommentaar.
  3. Wettiging: U toestemming
  4. Kommunikasie van die data: Die data sal nie aan derde partye oorgedra word nie, behalwe deur wettige verpligtinge.
  5. Datastoor: databasis aangebied deur Occentus Networks (EU)
  6. Regte: U kan u inligting te alle tye beperk, herstel en verwyder.