- Potrebni materiali:
- Shema vezja:
- Vklop nastavitve:
- Programiranje vašega Arduina:
- Priprava aplikacije Android s pomočjo obdelave:
- Delovanje Arduino Inclinometer:
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 se bomo naučili, kako uporabljati MPU6050 je vgrajen Inclinometer ali Spirit Leveler. Ker vemo, da se z inklinometrom preverja, ali je površina popolnoma poravnana ali ne, so na voljo bodisi v obliki mehurčkov ali kot digitalni števci. V tem projektu bomo zgradili digitalni inlinometer, ki ga lahko spremljamo z aplikacijo Android. Razlog za uporabo oddaljenega zaslona, kot je mobilni telefon, je, da lahko spremljamo vrednosti iz MPU6050, ne da bi morali gledati strojno opremo, kar bi bilo zelo priročno, če je MPU6050 nameščen na brezpilotnem letalu ali na kakšnem drugem nedostopnem mestu.
Potrebni materiali:
- Arduino Pro-mini (5V)
- MPU6050 giro senzor
- Modul Bluetooth HC-05 ali HC-06
- Plošča FTDI
- Breadboard
- Priključne žice
- Pametni telefon
Shema vezja:
Popoln diagram vezja za ta projekt Arduino Tilt Sensor je prikazan spodaj. Vsebuje le tri komponente in ga je mogoče enostavno vgraditi čez ploščo.
V MPU6050 komunicira s pomočjo I2C in s tem SDA pin je priključen na A4 pin Arduino, ki je SDA pin in SCL pin je priključen na A5 pin Arduino. Bluetooth modul HC-06 deluje s pomočjo serijske komunikacije, zato je Rx pin Bluetooth priključena na pin D11 in TX pin Bluetooth je priključena na pin D 10 Arduino. Ti zatiči D10 in D11 bodo nastavljeni kot zaporedni zatiči s programiranjem Arduina. Modul HC-05 in modul MSP6050 delujeta na + 5V, zato jih napaja Vcc zatič Arduino, kot je prikazano zgoraj.
Uporabil sem nekaj povezovalnih žic in postavil postavitev na majhno ploščo. Ko so povezave končane, je moja plošča videti spodaj takole.
Vklop nastavitve:
Lahko napajate svoje vezje prek programske plošče FTDI, kot sem že jaz, ali pa uporabite 9V baterijo ali 12V adapter in ga priključite na Raw pin Arduino pro mini. Arduino Pro-mini ima vgrajen regulator napetosti, ki pretvori to zunanjo napetost regulirano + 5V.
Programiranje vašega Arduina:
Ko je strojna oprema pripravljena, lahko začnemo programirati naš Arduino. Kot vedno lahko celotno kodo tega projekta najdete na dnu te strani. Toda za boljše razumevanje projekta sem razdelil kodo na majhne dele in jih razložil v spodnjih korakih.
Prvi korak bi bil povezovanje MPU6050 z Arduinom. Za ta projekt bomo uporabili knjižnico, ki jo je razvil Korneliusz in jo lahko prenesete s spodnje povezave
MPU6050 Liberty - Korneliusz Jarzebski
Prenesite datoteko ZIP in jo dodajte v svoj Arduino IDE. Nato pojdite na Datoteka-> Primeri-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . To bo odprlo primer programa, ki uporablja knjižnico, ki smo jo pravkar prenesli. Torej kliknite na nalaganje in počakajte, da se program naloži na vaš Arduino Pro mini. Ko je to končano, odprite serijski monitor in nastavite hitrost prenosa na 115200 in preverite, ali dobite naslednje.
Sprva bodo vse tri vrednosti enake nič, med premikanjem plošče pa lahko opazite, kako se te vrednosti spreminjajo. Če se spremenijo, pomeni, da je vaša povezava pravilna, sicer preverite povezave. Tu si vzemite nekaj časa in opazite, kako se tri vrednosti Pitch Roll in Yaw razlikujejo glede na način nagibanja senzorja. Če se zmedete, pritisnite gumb za ponastavitev na Arduinu in vrednosti bodo spet inicializirane na nič, nato senzor nagnite v eno smer in preverite, katere vrednosti se spreminjajo. Spodnja slika vam bo pomagala bolje razumeti.
Od teh treh parametrov nas zanimajo le Roll and Pitch. Vrednost Roll nam bo povedal o nagiba v X-osi in vrednostjo Pitch nam bo povedal o nagiba v Y-osi. Zdaj, ko smo razumeli osnove, lahko dejansko začnemo programirati Arduino za branje teh vrednosti in ga pošljemo Arduinu prek Bluetootha. Kot vedno začnimo z vključitvijo vseh knjižnic, potrebnih za ta projekt
#include
Nato inicializiramo serijski program za modul Bluetooth. To je mogoče zaradi serijske knjižnice programske opreme v Arduinu, IO zatiče lahko programiramo tako, da delujejo kot serijski zatiči. Tu uporabljamo digitalni nožici D10 in D11, kjer D10 id Rx in D11 Tx.
SoftwareSerial BT (10, 11); // RX, TX
Nato inicializiramo spremenljivke in predmete, potrebne za program, in preidemo na funkcijo setup (), kjer določimo hitrost prenosa za serijski monitor in Bluetooth. Za HC-05 in HC-06 je hitrost prenosa 9600, zato je obvezna uporaba iste. Nato preverimo, ali je IIC vodilo Arduino priključeno na MPU6050, če ne, natisnemo opozorilno sporočilo in ostanemo tam, dokler je naprava priključena. Po tem kalibriramo žiroskop in nastavimo njegove mejne vrednosti z ustreznimi funkcijami, kot je prikazano spodaj.
void setup () {Serial.begin (115200); BT.začetek (9600); // zaženimo komunikacijo Bluetooth pri 9600 baudrate // Inicializirajte MPU6050, medtem ko (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Ne najdem veljavnega senzorja MPU6050, preverite ožičenje!"); zamuda (500); } mpu.calibrateGyro (); // Umerjanje žiroskopa med zagonom mpu.setThreshold (3); // nadzoruje občutljivost}
Vrstica » mpu.calibrateGyro ();« umerite MPU6050 glede na položaj, na katerem je trenutno postavljen. To vrstico lahko v programu večkrat pokličete, kadar je treba MPU6050 umeriti in vse vrednosti nastaviti na nič. "Mpu.setThreshold (3);" ta funkcija nadzoruje, koliko se vrednost spreminja pri gibanju senzorja, prenizka vrednost bo povečala šum, zato bodite previdni, ko se s tem mešate.
Znotraj void zanke () večkrat beremo vrednosti giroskopa in temperaturnega senzorja, izračunamo vrednost koraka, nagibanja in nihanja in ga pošljemo modulu Bluetooth. V naslednjih dveh vrsticah bomo prebrali surove vrednosti giroskopije in vrednost temperature
Norma vektorja = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Nato izračunamo naklon, nagibanje in nihanje z množenjem s časovnim korakom in seštevanjem prejšnjih vrednosti. TimeStep ni nič, ampak interval med zaporednimi odčitki.
smola = smola + norma.YAxis * timeStep; roll = roll + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
Za boljše razumevanje časovnega koraka si oglejmo spodnjo vrstico. Ta vrstica je postavljena tako, da natančno bere vrednosti iz MPU6050 v intervalu 10mS ali 0,01 sekunde. Torej vrednost timeStep razglasimo za 0,01. Če je ostalo več časa, uporabite spodnjo vrstico, da zadržite program. (millis () - timer ()) podaja čas, potreben za dosedanje izvajanje programa. Samo odštejemo ga s 0,01 sekunde, preostali čas pa program držimo tam s funkcijo zakasnitve.
zamuda ((timeStep * 1000) - (milis () - časovnik));
Ko končamo z branjem in izračunavanjem vrednosti, jih lahko prek Bluetootha pošljemo na svoj telefon. Toda tu je ulov. Modul Bluetooth, ki ga uporabljamo, lahko pošlje samo 1 bajt (8 bitov), kar nam omogoča pošiljanje številk le od 0 do 255. Torej moramo svoje vrednosti razdeliti in preslikati znotraj tega obsega. To naredijo naslednje vrstice
if (roll> -100 && roll <100) x = map (roll, -100, 100, 0, 100); if (pitch> -100 && pitch <100) y = map (pitch, -100, 100, 100, 200); če (temp> 0 && temp <50) t = 200 + int (temp);
Kot lahko ugotovite, je vrednost zvitka preslikana na 0 do 100 v spremenljivko x in višina preslikana na 100 do 200 v spremenljivko y in temp je preslikana na 200 in več v spremenljivko t. Iste podatke lahko uporabimo za pridobivanje podatkov iz poslanega. Na koncu te vrednosti zapišemo prek Bluetootha v naslednjih vrsticah.
BT.write (x); BT.write (y); BT.write (t);
Če ste razumeli celoten program, se pomaknite navzdol, da si ogledate program in ga naložite na ploščo Arduino.
Priprava aplikacije Android s pomočjo obdelave:
Aplikacija android za ta Arduino Inclinometer je bila razvita z uporabo Processing IDE. To je zelo podobno Arduinu in se lahko uporablja za ustvarjanje sistemskih aplikacij, aplikacij za Android, spletnih oblik in še veliko več. Obdelavo smo že uporabili za razvoj nekaterih drugih zanimivih projektov, ki so navedeni spodaj
- Igra ping pong z uporabo Arduina
- FM radio, ki ga nadzira pametni telefon s pomočjo obdelave.
- Radarski sistem Arduino z uporabo procesorja in ultrazvočnega senzorja
Vendar popolne kode o tem, kako ustvariti to aplikacijo, ni mogoče razložiti. Torej imate dva načina za prehod na to. Datoteko APK lahko prenesete s spodnje povezave in namestite aplikacijo Android neposredno v telefon. Ali pa se pomaknite spodaj, da najdete celotno kodo za obdelavo in se sami naučite, kako deluje
V datoteki ZIP lahko najdete mapo z imenom podatki, ki vsebuje vse slike in druge vire, ki jih je treba naložiti v aplikacijo android. Spodnja vrstica odloča, na katero ime naj se Bluetooth samodejno poveže
bt.connectToDeviceByName ("HC-06");
Znotraj funkcije draw () se bodo stvari večkrat izvajale. Tu narišemo slike, prikažemo besedilo in animiramo vrstice na podlagi vrednosti iz modula Bluetooth. Z branjem programa lahko preverite, kaj se dogaja znotraj posamezne funkcije.
void draw () // Neskončna zanka {background (0); imageMode (CENTER); slika (logotip, širina / 2, višina / 1,04, širina, višina / 12); load_images (); textfun (); getval (); }
Za konec je treba razložiti še eno pomembno stvar. Ne pozabite, da smo vrednost tona, zvitka in temperature razdelili na 0 do 255. Torej, tukaj jo spet vrnemo na normalne vrednosti, tako da jo obrnemo na normalne vrednosti.
if (info <100 && info> 0) x = map (info, 0, 100, - (width / 1.5) / 3, + (width / 1.5) / 3); // x = info; sicer if (info <200 && info> 100) y = map (info, 100, 200, - (width / 4.5) /0.8, + (width / 4.5) /0.8); // y = info; sicer če (info> 200) temp = info -200; println (temp, x, y);
Obstaja veliko boljših načinov, kako podatke iz modula Bluetooth prenesti na telefon, toda ker je to le hobi projekt, ki smo ga prezrli, lahko poglobite, če vas zanima.
Delovanje Arduino Inclinometer:
Ko se pripravite na strojno opremo in aplikacijo, je čas, da se zabavate s tem, kar smo zgradili. Kodo Arduino naložite na ploščo, lahko tudi odstranite komentarje v vrsticah Serial.println in s serijskim monitorjem preverite, ali strojna oprema deluje po pričakovanjih. Kakorkoli že, to je povsem neobvezno.
Ko je koda naložena, v mobilnem telefonu zaženite aplikacijo Android. Aplikacija se mora samodejno povezati z vašim modulom HC-06 in na vrhu aplikacije bo prikazano “Connect to: HC-06”, kot je prikazano spodaj.
Sprva bodo vse vrednosti enake nič, razen vrednosti temperature. To je zato, ker je Arduino umeril MPU-6050 za ta položaj kot referenco, zdaj lahko nagnete strojno opremo in preverite, ali se vrednosti v mobilni aplikaciji spreminjajo skupaj z animacijo. Celotno delovanje aplikacije najdete na spodnjem videoposnetku. Tako lahko zdaj ploščo postavite kamor koli in preverite, ali je površina popolnoma izravnana.
Upam, da ste projekt razumeli in se iz njega naučili kaj koristnega. Če dvomite, prosimo, uporabite spodnji odsek za komentarje ali forume, da ga rešite.