- Tarvittavat materiaalit:
- Piirikaavio:
- Asennuksen virransaanti:
- Arduinon ohjelmointi:
- Android-sovelluksen valmistelu prosessoinnin avulla:
- Arduino-kaltevuusmittarin toiminta:
MPU6050 on IC 3-akselin kiihtyvyysanturi ja 3-akselin gyroskooppi yhdistetty yhdeksi yksiköksi. Siinä on myös lämpötila-anturi ja DCM monimutkaisen tehtävän suorittamiseksi. MPU6050: tä käytetään yleisesti Drone- ja muiden etärobottien kuten itsetasapainottavan robotin rakentamiseen. Tässä projektissa opimme kuinka MPU6050 on rakennettu kaltevuusmittari tai vesivaaka. Kuten tiedämme, kaltevuusmittaria käytetään tarkistamaan, onko pinta täysin tasainen vai ei, niitä on saatavana joko sprit-kuplana tai digitaalisena mittarina. Tässä projektissa aiomme rakentaa digitaalisen kaltevuusmittarin, jota voidaan seurata Android-sovelluksella. Syy käyttää etänäyttöä matkapuhelimen tapaan on se, että voimme tarkkailla MPU6050: n arvoja tarvitsematta tarkastella laitteistoa. Tämä olisi erittäin kätevää, kun MPU6050 asetetaan dronelle tai muuhun paikkaan, johon ei pääse.
Tarvittavat materiaalit:
- Arduino Pro-mini (5V)
- MPU6050-gyroanturi
- HC-05 tai HC-06 Bluetooth-moduuli
- FTDI-kortti
- Leipälauta
- Johtojen liittäminen
- Älypuhelin
Piirikaavio:
Tämän Arduino Tilt Sensor -projektin täydellinen kytkentäkaavio on esitetty alla. Siinä on vain kolme osaa ja se voidaan helposti rakentaa leivän päälle.
MPU6050 kommunikoi avulla I2C ja siten SDA tappi on liitetty A4 pin Arduino joka on SDA tappi ja SCL tappi on liitetty A5 pin Arduino. HC-06 Bluetooth-moduuli toimii avulla Serial viestintä siten Rx tappi Bluetooth on kytketty tapin D11 ja Tx tappi Bluetooth on kytketty tapin D10 Arduino. Nämä nastat D10 ja D11 määritetään sarjaliittimiksi ohjelmoimalla Arduino. HC-05-moduuli ja MSP6050-moduuli toimivat + 5 V: n jännitteellä, joten ne saavat virtansa Arduinon Vcc-nastasta, kuten yllä on esitetty.
Käytin joitain leipälautan liitäntäjohtoja ja rakensin kokoonpanon pienen leipälautan päälle. Kun liitännät on tehty, tauluni näyttää tältä alla.
Asennuksen virransaanti:
Voit joko kytkeä virtasi piiriin FTDI-ohjelmointikortin kautta kuten minä, tai käyttää 9 V: n akkua tai 12 V: n sovitinta ja liittää sen Arduino pro minin Raw-nastaan. Arduino Pro-mini -laitteessa on sisäänrakennettu jännitesäädin, joka muuntaa tämän ulkoisen jännitteen säädetyn + 5 V: n.
Arduinon ohjelmointi:
Kun laitteisto on valmis, voimme aloittaa Arduinon ohjelmoinnin. Kuten aina, tämän projektin täydellinen koodi löytyy tämän sivun alaosasta. Mutta ymmärtääkseni projektin paremmin olen rikkonut koodin pieniksi puristuksiksi ja selittänyt ne alla olevina vaiheina.
Ensimmäinen vaihe olisi liittää MPU6050 Arduinoon. Tähän projektiin aiomme käyttää Korneliuszin kehittämää kirjastoa, jonka voi ladata alla olevasta linkistä
MPU6050 Liberty - Korneliusz Jarzebski
Lataa ZIP-tiedosto ja lisää se Arduino IDE -laitteeseesi. Siirry sitten kohtaan Tiedosto-> Esimerkit-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Tämä avaa esimerkkiohjelman, joka käyttää juuri lataamamme kirjastoa. Napsauta sitten Lataa ja odota, että ohjelma ladataan Arduino Pro miniin. Kun se on valmis, avaa sarjamittari ja aseta tiedonsiirtonopeudeksi 115200 ja tarkista saako seuraavia.
Aluksi kaikki kolme arvoa ovat nollia, mutta kun siirrät leipätaulua, voit tarkkailla näiden arvojen muuttumista. Jos he muuttavat sitä, yhteys on oikein, tarkista muuten yhteydet. Käytä täällä jonkin aikaa huomaa, kuinka kolme arvoa Pitch Roll ja Yaw vaihtelevat anturin kallistustavan mukaan. Jos olet hämmentynyt, paina Arduinon nollauspainiketta ja arvot nollautuvat uudelleen nollaan, kallista sitten anturia yhteen suuntaan ja tarkista, mitkä arvot vaihtelevat. Alla oleva kuva auttaa sinua ymmärtämään paremmin.
Näistä kolmesta parametrista olemme kiinnostuneita vain Roll and Pitchistä. Roll-arvo kertoo meille X-akselin kaltevuudesta ja Pitch-arvo kertoo meille Y-akselin kaltevuudesta. Nyt kun olemme ymmärtäneet perusasiat, voimme todella aloittaa Arduinon ohjelmoinnin lukemaan nämä arvot lähettämään sen Arduinolle Bluetoothin kautta. Kuten aina, aloitetaan sisällyttämällä kaikki tähän projektiin tarvittavat kirjastot
#sisältää
Sitten alustamme ohjelmistosarjan Bluetooth-moduulille. Tämä on mahdollista Arduinon Software Serial -kirjastosta johtuen, IO-nastat voidaan ohjelmoida toimimaan sarjaliittiminä. Tässä käytetään digitaalisia nastoja D10 ja D11, joissa D10 id Rx ja D11 on Tx.
SoftwareSerial BT (10, 11); // RX, TX
Tämän jälkeen alustamme ohjelmassa tarvittavat muuttujat ja objektit ja siirrymme setup () -toimintoon, jossa määritämme tiedonsiirtonopeuden sarjamonitorille ja Bluetoothille. HC-05: n ja HC-06: n siirtonopeus on 9600, joten samaa on pakko käyttää. Sitten tarkistamme, onko Arduinon IIC-väylä kytketty MPU6050: een, jos ei, tulostamme varoitusviestin ja pysymme siellä niin kauan kuin laite on kytketty. Sen jälkeen kalibroimme hyrrän ja asetamme sen kynnysarvot vastaavilla toiminnoilla alla olevan kuvan mukaisesti.
void setup () {Sarja.alku (115200); BT.alku (9600); // aloita Bluetooth-yhteys 9600 baudinopeudella // Alusta MPU6050 taas (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Voimassa olevaa MPU6050-anturia ei löydy, tarkista johdotus!"); viive (500); } mpu.calibrateGyro (); // Kalibroi gyroskooppi käynnistyksen aikana mpu.setThreshold (3); // Ohjaa herkkyyttä}
Rivi “ mpu.calibrateGyro ();” kalibroi MPU6050 asentoon, johon se on tällä hetkellä asetettu. Tätä linjaa voidaan kutsua useita kertoja ohjelman sisällä aina, kun MPU6050 on kalibroitava ja kaikki arvot on asetettava nollaksi. "Mpu.setThreshold (3);" tämä toiminto ohjaa sitä, kuinka paljon arvo vaihtelee anturilla tapahtuvan liikkeen suhteen. Liian pieni arvo lisää kohinaa, joten ole varovainen hämmentäessäsi tätä.
Sisällä void silmukka (), me toistuvasti lukea arvot gyroskooppi ja Lämpötila-anturi laskea arvon piki, telan ja suuntakulman, lähettää sen Bluetooth-moduuli. Seuraavat kaksi riviä lukevat raaka-gyro-arvot ja lämpötila-arvon
Vektorin normi = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Seuraavaksi laskemme sävelkorkeuden, rullauksen ja kallistuksen kertomalla aika-askeleen ja lisäämällä sen edellisiin arvoihin. TimeStep ei ole mitään, mutta peräkkäisten lukemien.
pitch = pitch + norm. YAxis * timeStep; rulla = rulla + norm.XAxis * timeStep; haaroitus = haaroitus + norm. ZAxis * timeStep;
Katsotaanpa alla olevaa riviä ymmärtääksemme ajan askel paremmin. Tämä rivi on asetettu lukemaan MPU6050: n arvot tarkalleen 10 mS: n tai 0,01 sekunnin välein. Joten julistamme timeStep: n arvoksi 0,01. Ja käytä alla olevaa riviä pitämään ohjelmaa, jos siellä on, jos aikaa on enemmän. (millis () - ajastin ()) antaa ohjelman suorittamiseen kuluvan ajan. Vähennämme sen vain 0,01 sekunnilla ja pidämme jäljellä olevan ajan ohjelmamme siellä viive-toiminnolla.
delay ((timeStep * 1000) - (millis () - ajastin));
Kun olemme lukeneet ja laskeneet arvot, voimme lähettää ne puhelimeemme Bluetoothin kautta. Mutta täällä on saalis. Käyttämämme Bluetooth-moduuli voi lähettää vain yhden tavun (8 bittiä), mikä antaa meille mahdollisuuden lähettää numeroita vain 0: sta 255: een. Joten meidän on jaettava arvomme ja kartoitettava se tämän alueen sisällä. Tämä tehdään seuraavilla riveillä
if (rulla> -100 && rulla <100) x = kartta (rulla, -100, 100, 0, 100); if (sävelkorkeus> -100 && sävelkorkeus <100) y = kartta (sävelkorkeus, -100, 100, 100, 200); jos (temp> 0 && temp <50) t = 200 + int (lämpötila);
Kuten voit selvittää, rullan arvo kartoitetaan 0-100 muuttujaan x ja sävelkorkeus 100-200: een muuttujaan y ja lämpötila kartoitetaan 200: een ja yli muuttujaan t. Voimme käyttää samoja tietoja tietojen hakemiseen lähettämistämme tiedoista. Lopuksi kirjoitamme nämä arvot Bluetoothin kautta seuraavia rivejä käyttäen.
BT.write (x); BT. Kirjoita (y); BT. Kirjoita (t);
Jos olet ymmärtänyt koko ohjelman, selaa alaspäin katsomaan ohjelmaa ja lataa se Arduino-levylle.
Android-sovelluksen valmistelu prosessoinnin avulla:
Tämän Arduino Inclinometer -mallin Android-sovellus on kehitetty Processing IDE: n avulla. Tämä on hyvin samanlainen kuin Arduino ja sitä voidaan käyttää luomaan järjestelmäsovelluksia, Android-sovelluksia, verkkosivuja ja paljon muuta. Olemme jo käyttäneet prosessointia muiden alla lueteltujen hienojen projektien kehittämiseen
- Ping Pong -peli Arduinoa käyttämällä
- Älypuhelimella ohjattu FM-radio prosessointia käyttäen.
- Arduino-tutkajärjestelmä, joka käyttää prosessointia ja ultraäänianturia
Koko koodia tämän sovelluksen luomisesta ei kuitenkaan voida selittää. Joten sinulla on kaksi tapaa käydä tämä läpi. Joko voit ladata APK-tiedoston alla olevasta linkistä ja asentaa Android-sovelluksen suoraan puhelimeesi. Tai vieritä alla löytääksesi koko käsittelykoodin ja oppia itse, miten se toimii
ZIP-tiedoston sisällä on kansio nimeltä data, joka koostuu kaikista kuvista ja muista lähteistä, jotka ladataan Android-sovellukseen. Alla oleva rivi päättää, mihin nimeen Bluetooth pitäisi muodostaa automaattisesti
bt.connectToDeviceByName ("HC-06");
Sisällä draw () -toiminto, asiat toteutetaan toistuvasti täällä me piirtää kuvia, tuo teksti ja animoida palkit arvojen perusteella muodostamaan Bluetooth-moduuli. Voit tarkistaa, mitä tapahtuu jokaisessa toiminnossa, lukemalla ohjelman läpi.
void draw () // Ääretön silmukka {tausta (0); imageMode (KESKUS); kuva (logo, leveys / 2, korkeus / 1,04, leveys, korkeus / 12); load_images (); textfun (); getval (); }
Lopuksi on vielä yksi tärkeä asia selitettävissä, muista, että jakoimme sävelkorkeuden, rullan ja lämpötilan arvon 0: sta 255: een. Tässä sitten palautamme sen takaisin normaaliarvoihin kartoittamalla sen käänteisesti normaaliarvoihin.
if (info <100 && info> 0) x = kartta (info, 0, 100, - (leveys / 1,5) / 3, + (leveys / 1,5) / 3); // x = info; muuten jos (info <200 && info> 100) y = kartta (info, 100, 200, - (leveys / 4,5) /0,8, + (leveys / 4,5) /0,8); // y = info; muuten jos (info> 200) lämpötila = info -200; println (lämpötila, x, y);
On paljon parempia tapoja saada tietoja Bluetooth-moduulista puhelimeen, mutta koska tämä on vain harrastusprojekti, olemme jättäneet ne huomiotta, voit kaivaa syvälle, jos olet kiinnostunut.
Arduino-kaltevuusmittarin toiminta:
Kun olet valmis laitteistoon ja sovellukseen, on aika pitää hauskaa rakentamallamme. Lataa Arduino-koodi taululle, voit myös poistaa kommentit Serial.println- riveistä ja tarkistaa, toimiiko laitteisto odotetulla tavalla sarjamonitorilla . Joka tapauksessa, se on täysin valinnainen.
Kun koodi on ladattu, käynnistä Android-sovellus matkapuhelimellasi. Sovelluksen tulisi muodostaa yhteys automaattisesti HC-06-moduuliin ja sen yläosassa näkyy "Yhdistä: HC-06" alla olevan kuvan mukaisesti.
Aluksi kaikki arvot ovat nollia, paitsi lämpötila-arvo. Tämä johtuu siitä, että Arduino on kalibroinut MPU-6050: n tälle sijainnille viitteenä. Nyt voit kallistaa laitteistoa ja tarkistaa, että myös mobiilisovelluksen arvot muuttuvat animaation mukana. Sovelluksen täydellinen toiminta löytyy alla olevasta videosta. Joten nyt voit sijoittaa leipälevyn mihin tahansa ja tarkistaa, onko pinta tasainen.
Toivottavasti ymmärrät projektin ja opit siitä jotain hyödyllistä. Jos sinulla on epäilyksiä, käytä alla olevaa kommenttiosaa tai foorumeita sen ratkaisemiseksi.