Kazalo:

Arduino in MPU6050 digitalna vodna raven: 3 koraki
Arduino in MPU6050 digitalna vodna raven: 3 koraki

Video: Arduino in MPU6050 digitalna vodna raven: 3 koraki

Video: Arduino in MPU6050 digitalna vodna raven: 3 koraki
Video: MPU6050 Sensor Arduino Tutorial 2024, Julij
Anonim
Image
Image
Vezje
Vezje

Dobrodošli v mojem prvem poučevanju! Upam, da se vam bo zdel informativen. Prosimo, pustite povratne informacije, pozitivne ali negativne.

Ta projekt naj bi izdelal digitalno libelo, ki temelji na arduinu in MPU6050. Čeprav sta končana zasnova in koda moja, prvotni koncept in večina kode, iz katere sem delal, nista. Ne ukvarjam se s plagiatorstvom, zato z veseljem pripisujem priznanje tistim, na katerih idejah sem gradil. Dva glavna človeka, na katera bi se rad oglasil, sta YouTuberjeva Paul McWhorter in DroneBot Workshop. Povezave do njih vključujem v svoj YouTube uporabne povezave PDF. Hvala tudi EEEnthusiastu za njegov informativni video o uporabi MPU6050, vključno z nastavitvijo in branjem iz modula brez zunanje knjižnice (njegova povezava je v istem PDF -ju).

Projekt, ki sem ga produciral, deluje tako kot je in je pravljično natančen, zagotovo do 45% v obe smeri. Lahko ga uporabite točno tako, kot sem ga oblikoval, ali pa ga prilagodite svojemu okusu. Bolj bistri od vas bodo opazili, da je moj projekt skoraj enak tistemu, ki ga je izdelala delavnica DroneBot, vendar bodite prepričani, da obstajajo pomembne razlike, zlasti ko gre za kodo za izračun kotov, in možnost shranjevanja kalibracijskih vrednosti v Eeprom!

Nekatere lastnosti, ki vam lahko povečajo apetit:

Kot nagiba in nagiba je na voljo do 0,1 stopinje.

Samodejno zaznavanje orientacije žiroskopske enote (vodoravno ali navpično)

Popolna kalibracija z rezultati, samodejno shranjenimi v eepromu

LED indikacija od -2 do +2 stopinj (spremenljivo v kodi)

Dodatni zvočni prikaz nivoja (lahko ga vklopite/izklopite med letenjem)

Kompaktna torbica, ki zahteva minimalne komponente

Začnimo.

Zaloge

Ta projekt (takšen kot je) uporablja naslednje elemente:

1 x Arduino nano (moj je klon)

1 x žiroskopski/merilnik pospeška MPU6050 modul

1 x LCD - 16 x 2 + I2C povezava

1 x Pritisnite za vklop stikala

1 x piezo zvočni signal

1 x zelena LED

2 x rumeni LED

2 x rdeči LED

5 x 220 ohmski upori

Različni mostični kabli

Ogledna plošča

Napajanje (moj je uporabljal 5 -voltni USB -napajalnik, ko ni povezan z računalnikom, lahko pa uporabite ustrezno priključeno baterijo)

1. korak: vezje

Vezje
Vezje
Vezje
Vezje

Ob predpostavki, da imate vse komponente, boste morali sestaviti svojo osnovo.

Svojo nastavitev pokažem kot vodilo, vendar so povezave naslednje:

Arduino pin D2 se poveže z 1 stranjo potisnega stikala. Druga stran potisnega stikala je povezana z maso

Arduino pin D3 se poveže z eno stranjo upora 220 ohmov. Druga stran upora se poveže z anodo rdeče LED. Rdeča LED katoda gre na tla.

Arduino pin D4 se poveže z eno stranjo upora 220 ohmov. Druga stran upora se poveže z anodo rumene LED. Katoda rumene LED diode gre na tla.

Arduino pin D5 se poveže z eno stranjo upora 220 ohmov. Druga stran upora se poveže z anodo zelene LED. Zelena LED katoda gre na tla.

Arduino pin D6 se poveže z eno stranjo upora 220 ohmov. Druga stran upora je povezana z anodo rumene LED. Katoda rumene LED diode gre na tla.

Arduino pin D7 se poveže z eno stranjo upora 220 ohmov. Druga stran upora se poveže z anodo rdeče LED. Rdeča LED katoda gre na tla.

Arduino pin D8 se poveže z eno stranjo zvočnika Piezo. Druga stran zvočnika se poveže z maso.

Arduino pin A4 se poveže z zatiči SDA na MPU6050 IN LCD.

Arduino pin A5 se poveže z nožicami SCL na MPU6050 IN LCD

Napajanje 5v in Gnd za MPU6050 in LCD prihajata iz nožic Arduino Nano 5v in GND.

Ko bo končan, bi moral biti podoben prikazani nastavitvi. Blu tak sem dal pod MPU6050, da se ustavi, in tudi na LCD, da ostane na robu mize.

2. korak: Koda

Priložena koda je koda, ki sem jo uporabil za ta projekt. Edina knjižnica, s katero imate lahko težave, je

Knjižnica LiquidCrystal_I2C.h, ko sem jo uvozila, ko sem prvič začela delati z LCD -ji. Na žalost obstaja nekaj knjižnic, ki uporabljajo isti stavek #include, vendar so nekoliko drugačne. Če imate težave z vašim, poiščite drugo kodo LCD, ki vam ustreza, in jo ustrezno spremenite. Verjetno se bo le nastavitev razlikovala. Vsi ukazi za tiskanje morajo delovati enako.

Vsa koda je bila komentirana in ob predpostavki, da sem naredil prav, bo na voljo tudi videoposnetek, ki vse razlaga, vendar je treba opozoriti na nekaj točk:

LiquidCrystal_I2C LCD (0x27, 16, 2);

Zgornja koda je nastavitev za moj LCD. Če je vaša knjižnica drugačna, boste morda morali spremeniti ne le knjižnico, ampak tudi to vrstico.

{lcd.setCursor (0, 1); lcd.print ("Vodoravno!"); orientacija = HORIZONTALNO; // 1000-krat preberite neobdelane računske in žiroskopske podatke iz MPU-6050 za (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // Dodaj premik žiroskopa x spremenljivki gyro_x_cal gyro_x_cal += gyro_x; // Dodaj odmik žiro y spremenljivki gyro_y_cal gyro_y_cal += gyro_y; // Dodaj odmik žiroskopa z spremenljivki gyro_z_cal gyro_z_cal += gyro_z; // Dodamo zamik acc x spremenljivki acc_x_cal acc_x_cal += acc_x; // Dodamo odmik računa y spremenljivki acc_y_cal acc_y_cal += acc_y; } // Vse rezultate delite s 1000, da dobite povprečni odmik gyro_x_cal /= 1000,0; žiroskop_y_cal /= 1000,0; žiro_z_kal /= 1000,0; acc_x_cal /= 1000,0; acc_y_cal /= 1000,0; horizonalCalibration = 255; eeprom_address = 0; EEPROM.put (eeprom_address, horizonalCalibration); eeprom_address += sizeof (int); EEPROM.put (eeprom_address, gyro_x_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, gyro_y_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, gyro_z_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, acc_x_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, acc_y_cal); eeprom_address += sizeof (float); // Upoštevajte, da zaradi gravitacije ne shranjujemo odmika za acc_z! zamuda (500); }

Zgornji blok kode se izvede v kalibracijsko rutino. Ta koda je za vodoravno umerjanje. Obstaja skoraj enaka koda za navpično umerjanje (upoštevajte, da koda ve, ali je vaš MPU6050 nameščen vodoravno ali navpično!). MPU6050, se prebere 1000 -krat. ustrezne vrednosti se kumulativno dodajo in nato delijo s 1000, da dobimo povprečno vrednost "odmika". Te vrednosti se nato shranijo v Nano eeprom. Vse vodoravne umeritvene vrednosti se shranijo od naslova eeprom 0. Vse navpične vrednosti se shranijo od začetka na naslovu eeprom 24. Umerjanje MORATE opraviti na popolnoma ravni površini, sicer ne pomenijo nič.

/ * * Naslednjih nekaj vrstic obdela surove podatke, da jih spremeni v kote, ki jih je mogoče predvajati na LCD in LED. * Vrednost 4096, s katero se delijo podatki o pospeševanju, je vzeta iz podatkovnega lista MPU6050 in temelji na vzorčni frekvenci. * Vrednost 9.8 je gravitacija * Funkcija atan2 je iz matematičnega modula in se uporablja za izračun kotov iz danih podatkov */thetaM = -atan2 ((acc_x/4096.0) /9.8, (acc_z/4096.0) /9.8) /2/3.141592656 * 360; // Surovi podatki phiM = -atan2 ((acc_y/4096.0) /9.8, (acc_z/4096.0) /9.8) /2/3.141592656 * 360; // Surovi podatki dt = (millis ()-millisOld)/1000.; millisOld = millis (); / * * V tem razdelku so podatki o žiroskopu bolj odzivni * vrednost 65,5, s katero se delijo žiroskopski podatki, je vzeta iz podatkovnega lista MPU6050 in temelji na frekvenci vzorčenja */ theta = (theta+(gyro_y/ 65,5)*dt)*. 96 + thetaM*.04; // Nizkoprepustni filter phi = (phi + (gyro_x/65,5)*dt)*. 96 + phiM*.04; // Nizkoprepustni filter

Zgornja koda je stvar, ki izračuna kote. Upajmo, da bodo komentarji dali malo vpogleda v to, kako deluje, toda za poglobljeno razlago si oglejte videoposnetek Paul McWhorters, povezan s tem v priloženem PDF -ju. Rekel pa bom, da lahko spremenite frekvenco vzorčenja za žiroskop in merilnik pospeška (kar je narejeno v podprogramu za nastavitev MPU6050 na dnu moje kode). Če spremenite stopnjo vzorčenja, morate spremeniti tudi količino neobdelanih podatkov. Za podatke merilnika pospeška je trenutna vrednost 4096. Za žiroskop je trenutna vrednost 65,5.

Za podrobnejše informacije o tem, kako najdemo vzorčenje in odmik, si oglejte priložene podatkovne liste in videoposnetek EEEntusiast (povezava v priloženem PDF -ju).

3. korak: Naslednji koraki

Upajmo, da bo do tega trenutka ta projekt uspel, kaj pa zdaj?

Prvič, zakaj ga dejansko ne bi vgradili v libelo, ki jo lahko uporabite. Lahko kupite poceni vodno tehtnico (prepričajte se, da je to vrsta škatle), ki jo lahko prilagodite, ali če imate komplet, natisnite svojo raven/škatlo.

Morda se poigrajte z vzorčenjem žiroskopa in merilnika pospeška, da preverite, ali delujejo bolje pri eni stopnji kot drugi.

Poskusite dodatno izboljšati kodo. Na primer, trenutno je nad 45 stopinj navedeni kot vsaj grob. Ali obstaja način, kako to obiti?

Če imate kakršna koli vprašanja, ne glede na to, kako preprosta se zdijo, vprašajte. Če lahko pomagam, bom.

Če vam je ta pouk všeč, ga všečkajte, da bom vedel.

Če to naredite, mi ga pokažite (še posebej, če je v delovnem ohišju).

HVALA VAM

Priporočena: