- Reikalingos medžiagos:
- Grandinės schema:
- Jūsų sąrankos maitinimas:
- „Arduino“ programavimas:
- „Android“ programos paruošimas naudojant apdorojimą:
- „Arduino Inclinometer“ veikimas:
MPU6050 yra IC 3-ašis pagreičio ir 3-ašis giroskopo kartu į vieną vienetą. Jame taip pat yra temperatūros jutiklis ir DCM, kad būtų galima atlikti sudėtingą užduotį. MPU6050 paprastai naudojamas kuriant „Drone“ ir kitus nuotolinius robotus, pvz., Savaime balansuojančius robotus. Šiame projekte mes sužinosime, kaip naudotis MPU6050 yra pastatytas Inclinometer arba gulsčiukas. Kaip žinome, kad nuolydžio matuoklis naudojamas norint patikrinti, ar paviršius yra idealiai išlygintas, ar ne, juos galima įsigyti kaip spragų burbulus arba kaip skaitmeninius matuoklius. Šiame projekte ketiname sukurti skaitmeninį nuolydžio matuoklį, kurį galima stebėti naudojant „ Android“ programą. Priežastis naudoti nuotolinį ekraną kaip mobilųjį telefoną yra ta, kad mes galime stebėti MPU6050 reikšmes, nežiūrėdami į aparatinę įrangą. Tai labai praverstų, kai MPU6050 būtų pastatytas ant drono ar kitose neprieinamose vietose.
Reikalingos medžiagos:
- „Arduino Pro-mini“ (5V)
- MPU6050 giroskopo jutiklis
- „HC-05“ arba „HC-06“ „Bluetooth“ modulis
- FTDI lenta
- Bandomoji Lenta
- Jungiamieji laidai
- Išmanusis telefonas
Grandinės schema:
Visa šio „ Arduino Tilt Sensor“ projekto schema parodyta žemiau. Jis turi tik tris komponentus ir gali būti lengvai pastatomas ant duonos lentos.
Kad MPU6050 susisiekia su I2C pagalba, taigi ir SDA kaiščio yra prijungtas prie A4 kaiščio Arduino, kuri yra SDA kaištis ir LAT kaištis yra prijungtas prie A5 kaiščio Arduino. „ HC-06 Bluetooth“ modulis veikia nuoseklaus ryšio pagalba, todėl „Bluetooth“ Rx kaištis yra prijungtas prie D11 kaiščio, o „Bluetooth“ Tx kaištis yra prijungtas prie „Arduino“ D10 kaiščio. Šie kaiščiai D10 ir D11 bus sukonfigūruoti kaip nuoseklūs kaiščiai programuojant „Arduino“. HC-05 modulis ir MSP6050 modulis veikia + 5 V įtampoje, todėl juos maitina „Arduino“ Vcc kaištis, kaip parodyta aukščiau.
Aš panaudojau keletą lentos jungiamųjų laidų ir pastatiau konstrukciją virš mažos duonos lentos. Atlikus ryšius, mano lenta atrodo taip žemiau.
Jūsų sąrankos maitinimas:
Galite arba maitinti savo grandinę per FTDI programavimo plokštę, kaip ir aš, arba naudoti 9 V bateriją arba 12 V adapterį ir prijungti jį prie „Arduino pro mini“ neapdoroto kaiščio. „Arduino Pro-mini“ turi įmontuotą įtampos reguliatorių, kuris paverstų šią išorinę įtampą, reguliuojamą + 5 V.
„Arduino“ programavimas:
Kai aparatūra bus paruošta, galime pradėti programuoti savo „Arduino“. Kaip visada, visą šio projekto kodą galite rasti šio puslapio apačioje. Bet norėdamas geriau suprasti projektą, aš sulaužiau kodą mažiems chinkams ir paaiškinau juos kaip toliau pateiktus veiksmus.
Pirmasis žingsnis būtų MPU6050 sąsaja su „Arduino“. Šiam projektui naudosime Korneliusz sukurtą biblioteką, kurią galite atsisiųsti iš žemiau pateiktos nuorodos
„MPU6050 Liberty“ - Korneliusz Jarzebski
Atsisiųskite ZIP failą ir pridėkite jį prie „Arduino IDE“. Tada eikite į Failas-> Pavyzdžiai-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Tai atvers pavyzdinę programą, naudojančią ką tik atsisiųstą biblioteką. Taigi spustelėkite „Įkelti“ ir palaukite, kol programa bus įkelta į „Arduino Pro mini“. Kai tai bus padaryta, atidarykite nuoseklųjį monitorių ir nustatykite baudos greitį į 115200 ir patikrinkite, ar gaunate šiuos dalykus.
Iš pradžių visos trys reikšmės bus lygios nuliui, tačiau judėdami lentą galite stebėti, kaip šios vertės keičiasi. Jei jie pakeis, tai reiškia, kad jūsų ryšys teisingas, dar patikrinkite ryšius. Skirkite šiek tiek laiko, pastebėkite, kaip trys „Pitch Roll“ ir „Yaw“ vertės skiriasi priklausomai nuo to, kaip pakreipiate jutiklį. Jei sutriksite, paspauskite „Arduino“ atstatymo mygtuką ir reikšmės vėl bus nustatytos į nulį, tada pakreipkite jutiklį viena kryptimi ir patikrinkite, kurios vertės skiriasi. Žemiau pateiktas paveikslėlis padės geriau suprasti.
Iš šių trijų parametrų mus domina tik „ Roll and Pitch“. „Roll“ vertė pasakys apie X ašies pasvirimą, o „Pitch“ vertė - apie Y ašies pasvirimą. Dabar, kai supratome pagrindus, galime pradėti programuoti „Arduino“, kad perskaitytų šias vertes, per „Bluetooth“ persiųskite jį „Arduino“. Kaip visada, pradėkime nuo visų bibliotekų, reikalingų šiam projektui, įtraukimo
# įtraukti
Tada mes inicijuojame „Bluetooth“ modulio programinės įrangos seriją. Tai įmanoma dėl „Arduino“ programinės įrangos serijos bibliotekos, IO kaiščius galima užprogramuoti veikti kaip nuoseklius. Čia mes naudojame skaitmeninius kaiščius D10 ir D11, kur D10 id Rx ir D11 yra Tx.
„SoftwareSerial BT“ (10, 11); // RX, TX
Po to mes inicijuojame kintamuosius ir objektus, reikalingus programai, ir pereiname prie sąrankos () funkcijos, kur nurodome serijos monitoriaus ir „Bluetooth“ perdavimo greitį. HC-05 ir HC-06 perdavimo sparta yra 9600, todėl privaloma naudoti tą patį. Tada mes patikriname, ar „Arduino“ IIC magistralė yra prijungta prie MPU6050, jei ne, atspausdiname įspėjamąjį pranešimą ir liekame ten tol, kol įrenginys prijungtas. Po to mes kalibruosime giroskopą ir nustatysime jo ribines vertes, naudodamiesi atitinkamomis funkcijomis, kaip parodyta žemiau.
negaliojanti sąranka () {Serial.begin (115200); BT. Pradžia (9600); // pradėkite „Bluetooth“ ryšį 9600 baudos greičiu // Inicializuokite MPU6050 vėlavimas (500); } mpu.calibrateGyro (); // Kalibruoti žiroskopą paleidimo metu mpu.setThreshold (3); // Kontroliuoja jautrumą}
Eilutė „ mpu.calibrateGyro ();“ kalibruokite MPU6050 pagal padėtį, kurioje jis šiuo metu yra. Šią eilutę galima kelis kartus iškviesti programoje, kai reikia kalibruoti MPU6050 ir visas reikšmes nustatyti į nulį. „Mpu.setThreshold (3);“ ši funkcija kontroliuoja, kiek keičiasi jutiklio judesio vertė, o per maža vertė padidins triukšmą, todėl būkite atsargūs, tuo nesivaržydami.
Viduje tuštumos kilpos (), mes pakartotinai skaitome giroskopo ir temperatūros jutiklio reikšmes, apskaičiuojame pikio, ritinėlio ir žiovulio vertę, siunčiame į „Bluetooth“ modulį. Šiose dviejose eilutėse bus skaitomos neapdorotos giroskopo vertės ir temperatūros vertės
Vektoriaus norma = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Tada apskaičiuosime aukštį, ritinį ir posūkį padauginę iš laiko žingsnio ir pridedant jį prie ankstesnių verčių. „ TimeStep“ yra ne kas kita, o intervalas tarp vienas po kito einančių skaitinių.
pikis = pikis + norma. YAxis * timeStep; ritinys = ritinys + norma.XAxis * timeStep; žiovulys = žiovulys + norma. ZAxis * timeStep;
Norėdami geriau suprasti laiko žingsnį, pažvelkime į žemiau pateiktą eilutę. Ši eilutė dedama norint tiksliai nuskaityti MPU6050 reikšmes 10 mS arba 0,01 sekundės intervalu. Taigi „timeStep“ vertę deklaruojame kaip 0,01. Jei yra daugiau laiko, naudokite žemiau esančią eilutę, jei norite laikyti programą. (milis () - laikmatis ()) nurodo laiką, kol programa vykdoma iki šiol. Mes tiesiog atimame jį su 0,01 sekundės, o likusį laiką mes tiesiog laikome savo programą ten, naudodami uždelsimo funkciją.
delsa ((timeStep * 1000) - (milis () - laikmatis));
Kai baigsime nuskaityti ir apskaičiuoti vertes, galime jas siųsti į savo telefoną per „Bluetooth“. Bet čia yra laimikis. Naudojamas „Bluetooth“ modulis gali siųsti tik 1 baitą (8 bitus), o tai leidžia mums siųsti numerius tik nuo 0 iki 255. Taigi mes turime suskirstyti savo vertes ir susieti ją šiame diapazone. Tai daroma šiomis eilutėmis
if (ritinys> -100 && ritinys <100) x = žemėlapis (ritinys, -100, 100, 0, 100); if (žingsnis> -100 && žingsnis <100) y = žemėlapis (aukštis, -100, 100, 100, 200); if (temp> 0 && temp <50) t = 200 + int (temp);
Kaip jūs galite tai suprasti, ritinio vertė susiejama nuo 0 iki 100 į kintamąjį x, o žingsnis - nuo 100 iki 200 į kintamąjį y, o temp - į 200 ir daugiau į kintamąjį t. Tą pačią informaciją galime naudoti norėdami gauti duomenis iš to, ką išsiuntėme. Galiausiai mes rašome šias reikšmes per „Bluetooth“, naudodami šias eilutes.
BT.write (x); BT. Parašyti (y); BT. Parašyti (t);
Jei supratote visą programą, slinkite žemyn, kad galėtumėte pažvelgti į programą, ir įkelkite ją į „Arduino“ lentą.
„Android“ programos paruošimas naudojant apdorojimą:
Šio „ Arduino Inclinometer “ „Android“ programa buvo sukurta naudojant „ Processing IDE“. Tai labai panašu į „Arduino“ ir gali būti naudojama kuriant sistemos programas, „Android“ programas, interneto dizainus ir daug daugiau. Mes jau panaudojome apdorojimą kurdami kai kuriuos kitus mūsų žemiau išvardytus šaunius projektus
- „Ping Pong“ žaidimas naudojant „Arduino“
- Išmaniojo telefono valdomas FM radijas, naudojant apdorojimą.
- „Arduino“ radarų sistema naudojant apdorojimo ir ultragarso jutiklį
Tačiau neįmanoma paaiškinti viso kodo, kaip sukurti šią programą. Taigi turite tai padaryti dviem būdais. Arba galite atsisiųsti APK failą iš toliau pateiktos nuorodos ir įdiegti „Android“ programą tiesiai į savo telefoną. Arba slinkite žemiau, kad rastumėte visą apdorojimo kodą ir patys sužinotumėte, kaip jis veikia
ZIP failo viduje galite rasti aplanką, vadinamą duomenimis, kurį sudaro visi vaizdai ir kiti šaltiniai, kuriuos reikia įkelti į „Android“ programą. Žemiau esančioje eilutėje nusprendžiama, prie kurio vardo „Bluetooth“ turėtų prisijungti automatiškai
„bt.connectToDeviceByName“ („HC-06“);
Funkcijos „ draw ()“ viduje veiksmai bus vykdomi pakartotinai, čia mes piešime vaizdus, rodome tekstą ir animuojame juostas pagal „Bluetooth“ modulio reikšmes. Galite patikrinti, kas vyksta kiekvienoje funkcijoje, perskaitę programą.
void draw () // Begalinė kilpa {background (0); „imageMode“ (CENTRAS); vaizdas (logotipas, plotis / 2, aukštis / 1,04, plotis, aukštis / 12); load_images (); textfun (); getval (); }
Galiausiai, reikia paaiškinti dar vieną svarbų dalyką. Atminkite, kad pikio, ritinio ir temp vertės reikšmę padalijome nuo 0 iki 255. Taigi čia mes vėl sugrąžiname ją į įprastas vertes, atvirkščiai susiejant ją su normaliomis vertėmis.
if (info <100 && info> 0) x = žemėlapis (info, 0, 100, - (plotis / 1,5) / 3, + (plotis / 1,5) / 3); // x = informacija; else if (info <200 && info> 100) y = žemėlapis (info, 100, 200, - (plotis / 4,5) /0,8, + (plotis / 4,5) /0,8); // y = informacija; else if (info> 200) temp = info -200; println (temp, x, y);
Yra daug geresnių būdų gauti duomenis iš „Bluetooth“ modulio į telefoną, tačiau kadangi tai tik hobio projektas, mes juos ignoravome, jei norite, galite gilintis.
„Arduino Inclinometer“ veikimas:
Pasiruošę aparatinei įrangai ir programai, pats laikas linksmintis su tuo, ką sukūrėme. Įkelkite „Arduino“ kodą į plokštę, taip pat galite pašalinti komentarus apie „ Serial.println“ eilutes ir patikrinti, ar aparatinė įranga veikia taip, kaip tikėtasi, naudodamiesi nuosekliuoju monitoriumi. Bet kokiu atveju tai yra visiškai neprivaloma.
Kai kodas bus įkeltas, paleiskite „Android“ programą savo mobiliajame telefone. Programa turėtų automatiškai prisijungti prie jūsų HC-06 modulio ir programos viršuje bus rodoma „Prisijungti prie: HC-06“, kaip parodyta žemiau.
Iš pradžių visos vertės bus lygios nuliui, išskyrus temperatūros vertę. Taip yra todėl, kad „Arduino“ kalibravo MPU-6050 šiai padėčiai kaip orientacinį, dabar galite pakreipti aparatinę įrangą ir patikrinti, ar kartu su animacija keičiasi ir mobiliosios programos vertės. Visą programos veikimą galite rasti žemiau pateiktame vaizdo įraše. Taigi dabar galite uždėti duonos lentą bet kur ir patikrinti, ar paviršius yra visiškai išlygintas.
Tikiuosi, kad supratote projektą ir sužinojote iš jo kažką naudingo. Jei turite kokių nors abejonių, naudokite toliau pateiktą komentarų skyrių arba forumus, kad jis būtų išspręstas.