- Čo je to akcelerometer a gyroskopický senzor?
- Akcelerometer MPU6050 a modul gyroskopického snímača
- Súčasti sú povinné
- Schéma zapojenia
- Vysvetlenie programovania
MPU6050 je IC 3-osi akcelerometer a gyroskop 3 os spojené do jednej jednotky. Je tu tiež umiestnený teplotný senzor a DCM na vykonávanie zložitých úloh. MPU6050 sa bežne používa na výrobu robotov Drone a iných vzdialených robotov, ako je samovyvažovací robot. V tomto projekte postavíme digitálny uhlomer pomocou MPU6050 a Arduino. Tu sa na zobrazenie uhla na uhlomere používa servomotor. Hriadeľ servomotora je pripevnený k ihle, ktorá sa bude otáčať na uhlomere tak, aby indikovala uhol, ktorý sa tiež zobrazuje na displeji 16xLCD. Predtým, ako sa pustíme do podrobností, poďme sa dozvedieť viac o senzore gyroskopu.
Čo je to akcelerometer a gyroskopický senzor?
Na meranie zrýchlenia sa používa akcelerometer. V skutočnosti sníma statické aj dynamické zrýchlenie. Napríklad mobilné telefóny používajú senzor akcelerometra na zistenie, že je mobilný telefón v režime na šírku alebo na výšku. Predtým sme použili akcelerometer s Arduinom na vytvorenie mnohých projektov ako:
Na meranie uhlovej rýchlosti sa používa gyroskop, ktorý pomocou zemskej gravitácie určuje orientáciu objektu v pohybe. Uhlová rýchlosť je rýchlosť zmeny uhlovej polohy rotujúceho telesa.
Napríklad dnešné mobily používajú gyroskopické senzory na hranie mobilných hier podľa orientácie mobilného telefónu. Náhlavná súprava VR tiež využíva gyroskopický snímač na zabezpečenie pohľadu v 360-stupňovej orientácii
Aj keď akcelerometer dokáže merať lineárne zrýchlenie, gyroskop môže pomôcť nájsť rotačné zrýchlenie. Pri použití oboch snímačov ako samostatných modulov je ťažké nájsť orientáciu, polohu a rýchlosť. Kombináciou týchto dvoch senzorov však funguje ako jednotka inerciálnej merania (IMU). Takže v module MPU6050 sú akcelerometer a gyroskop prítomné na jedinej PCB na zistenie orientácie, polohy a rýchlosti.
Aplikácie:
- Používa sa v dronoch na riadenie smeru
- Samovyvažovacie roboty
- Ovládanie robotickým ramenom
- Senzor náklonu
- Používa sa v mobilných telefónoch a herných konzolách
- Humanoidní roboti
- Používa sa v lietadle, automobilovom priemysle atď.
Akcelerometer MPU6050 a modul gyroskopického snímača
MPU6050 je mikroelektromechanický systém (MEMS), ktorý sa skladá z 3- osého akcelerometra a 3-osého gyroskopu v jeho vnútri. Má tiež teplotný senzor.
Môže merať:
- Zrýchlenie
- Rýchlosť
- Orientácia
- Výtlak
- Teplota
Tento modul má v sebe tiež (DMP) digitálny pohybový procesor, ktorý je dostatočne výkonný na to, aby vykonával zložité výpočty, a tým uvoľňoval prácu pre mikrokontrolér.
Modul má tiež dva pomocné piny, ktoré možno použiť na prepojenie externých modulov IIC, napríklad magnetometra. Pretože adresa IIC modulu je konfigurovateľná, je možné prepojiť viac ako jeden snímač MPU6050 s mikrokontrolérom pomocou kolíka AD0.
Vlastnosti a špecifikácie:
- Napájanie: 3-5V
- Komunikácia: protokol I2C
- Zabudovaný 16-bitový ADC poskytuje vysokú presnosť
- Zabudovaný DMP poskytuje vysoký výpočtový výkon
- Môže byť použitý na prepojenie s inými zariadeniami IIC, ako je napríklad magnetometer
- Konfigurovateľná adresa IIC
- Zabudovaný snímač teploty
Pinout MPU6050:
PIN kód | Názov špendlíka | Použite |
1 | Vcc | Poskytuje napájanie modulu, môže byť + 3 V až + 5 V. Spravidla sa používa + 5 V. |
2 | Uzemnenie | Pripojené k zemi systému |
3 | Sériové hodiny (SCL) | Používa sa na zabezpečenie hodinového impulzu pre komunikáciu I2C |
4 | Sériové údaje (SDA) | Používa sa na prenos údajov prostredníctvom komunikácie I2C |
5 | Pomocné sériové údaje (XDA) | Môže byť použitý na prepojenie iných I2C modulov s MPU6050. Je to voliteľné |
6 | Pomocné sériové hodiny (XCL) | Môže byť použitý na prepojenie iných I2C modulov s MPU6050. Je to voliteľné |
7 | AD0 | Ak sa použije viac ako jedna jednotka MPU6050 v jednom MCU, je možné tento kolík použiť na zmenu adresy |
8 | Prerušiť (INT) | Prerušovací kolík označuje, že údaje sú k dispozícii na čítanie MCU. |
Predtým sme použili MPU6050 s Arduinom na zostavenie Self Balancing Robot a Inclinometer.
Súčasti sú povinné
- Arduino UNO
- Modul gyroskopu MPU6050
- 16 x 2 LCD displej
- Potenciometer 10k
- Servomotor SG90
- Obrázok uhlomera
Schéma zapojenia
Schéma zapojenia tohto DIY Arduino uhlomera je uvedená nižšie:
Obvodové prepojenia medzi Arduino UNO a MPU6050:
MPU6050 |
Arduino UNO |
VCC |
+ 5V |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Pripojenie obvodu medzi Arduino UNO a servomotorom:
Servo motor |
Arduino UNO |
ČERVENÁ (VCC) |
+ 5V |
ORANŽOVÁ (PWM) |
9 |
HNEDÝ (GND) |
GND |
Obvodové prepojenia medzi Arduino UNO a 16x2 LCD:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Na stredový PIN potenciometra Na kontrolu kontrastu LCD |
RS |
2 |
RW |
GND |
E |
3 |
D4 |
4 |
D5 |
5 |
D6 |
6 |
D7 |
7 |
A |
+ 5V |
K |
GND |
Vysvetlenie programovania
Ako obvykle je kompletný program s ukážkovým videom uvedený na konci tohto tutoriálu.
Tu je servomotor spojený s Arduinom a jeho hriadeľ sa premieta na uhlomerný obraz označujúci uhol skloneného MPU6050. Programovanie tohto tutoriálu je jednoduché. Pozrime sa na to podrobne.
Najskôr zahrňte všetky požadované knižnice - knižnica servomotorov pre použitie servomotorov, knižnica LCD pre použitie LCD a knižnica drôtov pre používanie komunikácie I2C.
MPU6050 využíva komunikáciu I2C, a preto musí byť pripojená iba k I2C pinom Arduina. Takže Wire.h knižnica slúži na nadviazanie komunikácie medzi Arduino UNO a MPU6050. Predtým sme prepojili MPU6050 s Arduinom a zobrazili sme hodnoty súradníc x, y, z na 16x2 LCD.
#include
Ďalej definujte piny LCD displeja RS, E, D4, D5, D6, D7, ktoré sú spojené s Arduino UNO.
LiquidCrystal lcd (2,3,4,5,6,7);
Ďalej je definovaná I2C adresa MPU6050.
const int MPU_addr = 0x68;
Potom inicializujte objekt myservo na použitie triedy Servo a troch premenných na ukladanie hodnôt osi X, Y a Z.
Servo myservo; int16_t os_X, os_Y, os_Z;
Ďalšia minimálna a maximálna hodnota je nastavená na 265 a 402 pre meranie uhla od 0 do 360.
int minVal = 265; int maxVal = 402;
void setup ():
Vo funkcii nastavenia neplatnosti sa začína prvá komunikácia I2C a prenos sa začal s MPU6050 s adresou 0x68.
Wire.begin (); Wire.beginTransmission (MPU_addr);
Prepnite jednotku MPU6050 do režimu spánku napísaním textu 0x6B a potom ho prebuďte napísaním 0
Wire.write (0x6B); Wire.write (0);
Po aktivovaní MPU6050 ukončite prenos
Wire.endTransmission (true);
Tu je pin PWM servomotora spojený s pinom Arduino UNO 9.
myservo.attach (9);
Hneď ako zapneme obvod, LCD zobrazí uvítaciu správu a po 3 sekundách ju zruší
lcd.začiatok (16,2); // Nastaví LCD v režime 16X2 lcd.print ("CIRCUIT DIGEST"); oneskorenie (1 000); lcd.clear (); lcd.setCursor (0,0); lcd.print ("Arduino"); lcd.setCursor (0,1); lcd.print ("MPU6050"); oneskorenie (3 000); lcd.clear ();
neplatná slučka ():
I2C komunikácia sa opäť začína s MPU6050.
Wire.beginTransmission (MPU_addr);
Potom začnite registrom 0x3B (ACCEL_XOUT_H)
Wire.write (0x3B);
Teraz sa proces reštartuje nastaveným koncovým prenosom na hodnotu false, ale pripojenie je aktívne.
Wire.endTransmission (false);
Potom si teraz vyžiadajte údaje zo 14 registrov.
Wire.requestFrom (MPU_addr, 14, true);
Teraz sa získavajú rešpektované hodnoty registra osi (x, y, z) a ukladajú sa do premenných axis_X, axis_Y, axis_Z.
axis_X = Wire.read () << 8-Wire.read (); axis_Y = Wire.read () << 8-Wire.read (); axis_Z = Wire.read () << 8-Wire.read ();
Potom namapujte tieto hodnoty od 265 do 402 ako -90 až 90. Toto sa deje pre všetky tri osi.
int xAng = mapa (axis_X, minVal, maxVal, -90,90); int yAng = mapa (os_Y, minVal, maxVal, -90,90); int zAng = mapa (os_Z, minVal, maxVal, -90,90);
Vzorec na výpočet hodnoty x v stupňoch (0 až 360) je uvedený nižšie. Tu prevádzame iba x, pretože rotácia servomotora je založená na pohybe hodnoty x.
x = RAD_TO_DEG * (atan2 (-yAng, -zAng) + PI);
Hodnota uhla X, od 0 do 360 stupňov, sa prevedie na 0 až 180 stupňov.
int pos = mapa (x, 0,180,0,180);
Potom napíšte hodnotu uhla na otočenie serva na uhlomerný obrázok a vytlačte tieto hodnoty na 16x2 LCD displej.
myservo.write (pos); lcd.setCursor (0,0); lcd.print ("Uhol"); lcd.setCursor (0,1); lcd.print (x); oneskorenie (500); lcd.clear ();
Takto je možné použiť MPU6050 s Arduino na meranie uhla. Kompletný kód a video k tomuto projektu sú uvedené nižšie.