- Kaj je merilnik pospeška in žiroskopski senzor?
- MPU6050 Merilnik pospeška in žiroskopski senzorski modul
- Potrebne komponente
- Shema vezja
- Pojasnilo programiranja
MPU6050 je IC 3-osni pospeška in 3-osni žiroskop združimo v eno enoto. V njem sta tudi temperaturni senzor in DCM za izvajanje zapletenih nalog. MPU6050 se pogosto uporablja pri izdelavi Drone in drugih oddaljenih robotov, kot je samoravnotežni robot. V tem projektu bomo zgradili digitalni kotomer z uporabo MPU6050 in Arduino. Tu se servo motor uporablja za prikaz kota na sliki kotomera. Gred servo motorja je pritrjena z iglo, ki se bo vrtela na sliki kotomera, da označuje kot, ki je prikazan tudi na 16xLCD zaslonu. Preden se spustimo v podrobnosti, se naučimo o senzorju žiroskopa.
Kaj je merilnik pospeška in žiroskopski senzor?
Za merjenje pospeška se uporablja merilnik pospeška. Pravzaprav zazna tako statični kot dinamični pospešek. Na primer, mobilni telefoni uporabljajo senzor pospeška, da zaznajo, da je mobilni telefon v ležečem ali pokončnem načinu. Pred tem smo z merilnikom pospeška uporabljali Arduino za gradnjo številnih projektov, kot so:
Žiroskop se uporablja za merjenje kotne hitrosti, ki s pomočjo gravitacije zemlje določa usmerjenost predmeta v gibanju. Kotna hitrost je hitrost spremembe kotnega položaja vrtečega se telesa.
Današnji mobilniki na primer uporabljajo giroskopske senzorje za igranje mobilnih iger glede na usmeritev mobilnega telefona. Tudi slušalke VR uporabljajo giroskopski senzor za poglede v 360 usmerjenosti
Medtem ko merilnik pospeška lahko meri linearni pospešek, lahko žiroskop pomaga najti rotacijski pospešek. Pri uporabi obeh senzorjev kot ločenih modulov je težko najti orientacijo, položaj in hitrost. Toda s kombinacijo obeh senzorjev deluje kot inercialna merilna enota (IMU). Tako so v modulu MPU6050 na enem tiskanem vezju prisotni merilnik pospeška in žiroskop za iskanje orientacije, položaja in hitrosti.
Aplikacije:
- Uporablja se v Drones za nadzor smeri
- Samoravnotežni roboti
- Robotsko krmiljenje roke
- Senzor nagiba
- Uporablja se v mobilnih telefonih, igralnih konzolah
- Humanoidni roboti
- Uporablja se v letalih, avtomobilih itd.
MPU6050 Merilnik pospeška in žiroskopski senzorski modul
MPU6050 je mikroelektromehanski sistem (MEMS), ki je sestavljen iz 3-osnega merilnika pospeška in 3-osnega žiroskopa v njem. Ima tudi temperaturni senzor.
Lahko meri:
- Pospešek
- Hitrost
- Usmerjenost
- Izpodrivanje
- Temperatura
V tem modulu je tudi (DMP) digitalni procesor gibanja, ki je dovolj zmogljiv za izvajanje zapletenih izračunov in tako sprosti delo za mikrokrmilnik.
Modul ima tudi dva pomožna zatiča, ki ju je mogoče uporabiti za povezovanje zunanjih modulov IIC, kot je magnetometer. Ker je naslov IIC modula nastavljiv, je mogoče več kot en senzor MPU6050 povezati z mikrokrmilnikom s pomočjo zatiča AD0.
Lastnosti in specifikacije:
- Napajanje: 3-5V
- Komunikacija: protokol I2C
- Vgrajeni 16-bitni ADC zagotavlja visoko natančnost
- Vgrajeni DMP zagotavlja visoko računsko moč
- Lahko se uporablja za vmesnike z drugimi napravami IIC, kot je magnetometer
- Nastavljiv naslov IIC
- Vgrajen temperaturni senzor
Izrez MPU6050:
PIN številka | Pripnite ime | Uporaba |
1. | Vcc | Omogoča napajanje modula, lahko je od + 3V do + 5V. Običajno se uporablja + 5V |
2. | Tla | Povezan z zemljo sistema |
3. | Zaporedna ura (SCL) | Uporablja se za zagotavljanje takta za komunikacijo I2C |
4. | Zaporedni podatki (SDA) | Uporablja se za prenos podatkov prek komunikacije I2C |
5. | Pomožni serijski podatki (XDA) | Lahko se uporablja za povezovanje drugih modulov I2C z MPU6050. Neobvezno |
6. | Pomožna serijska ura (XCL) | Lahko se uporablja za povezovanje drugih modulov I2C z MPU6050. Neobvezno |
7. | AD0 | Če se za en MCU uporablja več kot en MPU6050, lahko s tem zatičem spremenite naslov |
8. | Prekinitev (INT) | Prekinitveni zatič označuje, da so MCU na voljo podatki za branje. |
Pred tem smo uporabili MPU6050 z Arduino za izdelavo samoravnovesnega robota in Inclinometra.
Potrebne komponente
- Arduino UNO
- MPU6050 modul za žiroskop
- LCD zaslon 16x2
- Potenciometer 10k
- SG90-servo motor
- Slika kotomera
Shema vezja
Shema vezja tega DIY Arduino kotomera je podana spodaj:
Vezja med Arduino UNO in MPU6050:
MPU6050 |
Arduino UNO |
VCC |
+ 5V |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Vezja med Arduino UNO in servo motorjem:
Servo motor |
Arduino UNO |
RDEČA (VCC) |
+ 5V |
ORANŽNA (PWM) |
9. |
RJAVA (GND) |
GND |
Vezja med Arduino UNO in LCD 16x2:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Na kodo PIN Potentiometer Center Za nadzor kontrasta LCD-ja |
RS |
2. |
RW |
GND |
E |
3. |
D4 |
4. |
D5 |
5. |
D6 |
6. |
D7 |
7. |
A |
+ 5V |
K |
GND |
Pojasnilo programiranja
Kot običajno je na koncu te vadnice podan celoten program z demonstracijskim videoposnetkom.
Tu je servo motor povezan z Arduino in njegova gred je projicirana na sliko kotomera, ki kaže kot nagnjenega MPU6050. Programiranje te vadnice je preprosto. Poglejmo podrobno.
Najprej vključite vse zahtevane knjižnice - knjižnico Servo Motor za uporabo Servo, knjižnico LCD za uporabo LCD in knjižnico Wire za uporabo I2C komunikacije.
MPU6050 uporablja komunikacijo I2C, zato mora biti povezan samo z zatiči I2C Arduina. Torej, knjižnica Wire.h se uporablja za vzpostavitev komunikacije med Arduino UNO in MPU6050. Pred tem smo MPU6050 povezali z Arduinom in na LCD zaslonu 16x2 prikazali vrednosti koordinat x, y, z.
#include
Nato določite zatiče LCD zaslona RS, E, D4, D5, D6, D7, ki so povezani z Arduino UNO.
LCD LiquidCrystal (2,3,4,5,6,7);
Nato je definiran naslov I2C MPU6050.
const int MPU_addr = 0x68;
Nato inicializirajte objekt myservo za uporabo razreda Servo in treh spremenljivk za shranjevanje vrednosti osi X, Y in Z.
Servo myservo; int16_t os_X, os_Y, os_Z;
Naslednja najmanjša in največja vrednost je nastavljena na 265 in 402 za merjenje kota od 0 do 360.
int minVal = 265; int maxVal = 402;
void setup ():
V funkciji void setup se začne prva komunikacija I2C in prenos se začne z MPU6050 z naslovom 0x68.
Wire.begin (); Wire.beginTransmission (MPU_addr);
Prenesite MPU6050 v način mirovanja tako, da napišete 0x6B in ga nato zbudite tako, da napišete 0
Wire.write (0x6B); Wire.write (0);
Ko aktivirate MPU6050, končajte prenos
Wire.endTransmission (true);
Tu je PWM zatič servo motorja povezan z Arduino UNO zatičem 9.
myservo.attach (9);
Takoj, ko vklopimo vezje, LCD prikaže pozdravno sporočilo in ga po 3 sekundah izbriše
lcd.begin (16,2); // nastavi LCD v načinu 16X2 lcd.print ("CIRCUIT DIGEST"); zamuda (1000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("MPU6050"); zamuda (3000); lcd.clear ();
void loop ():
Spet se komunikacija I2C začne z MPU6050.
Wire.beginTransmission (MPU_addr);
Nato začnite z registrom 0x3B (ACCEL_XOUT_H)
Wire.write (0x3B);
Zdaj se postopek znova začne z nastavljenim prenosom kot lažnim, vendar je povezava aktivna.
Wire.endTransmission (false);
Po tem zdaj zahtevajte podatke iz 14 registrov.
Wire.requestFrom (MPU_addr, 14, resnično);
Zdaj upoštevane vrednosti registra osi (x, y, z) so pridobljene in shranjene v spremenljivkah osi_X, osi_Y, osi_Z.
axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Nato te vrednosti preslikajte od 265 do 402 kot -90 do 90. To se naredi za vse tri osi.
int xAng = zemljevid (os_X, minVal, maxVal, -90,90); int yAng = zemljevid (os_Y, minVal, maxVal, -90,90); int zAng = zemljevid (os_Z, minVal, maxVal, -90,90);
Formula za izračun vrednosti x v stopinjah (0 do 360) je podana spodaj. Tu pretvorimo samo x, ker rotacija servo motorja temelji na gibanju vrednosti x.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI);
Vrednost kota X, od 0 do 360 °, se pretvori v 0 do 180.
int pos = zemljevid (x, 0,180,0,180);
Nato zapišite vrednost kota, da zasukate servo na smeri kotomera, in te vrednosti natisnite na LCD zaslon 16x2.
myservo.write (pos); lcd.setCursor (0,0); lcd.print ("Kot"); lcd.setCursor (0,1); lcd.print (x); zamuda (500); lcd.clear ();
Tako lahko MPU6050 z Arduino uporabimo za merjenje kota. Popolna koda in video za ta projekt sta navedena spodaj.