- Nødvendige materialer:
- Kretsdiagram:
- Slår på oppsettet:
- Programmering av Arduino:
- Klargjøre Android-applikasjonen ved hjelp av prosessering:
- Arbeid av Arduino Inclinometer:
Den MPU6050 er en IC tre-akset akselerometer og et tre-akset gyroskop kombinert i en enhet. Det huser også en temperatursensor og en DCM for å utføre en kompleks oppgave. MPU6050 brukes ofte til å bygge Drone og andre eksterne roboter som en selvbalanserende robot. I dette prosjektet vil vi lære hvordan du bruker MPU6050 er bygget et Inclinometer eller Spirit Leveler. Som vi vet, brukes et skråmåler for å sjekke om en overflate er perfekt utjevnet eller ikke, de er tilgjengelige som spritbobler eller som digitale målere. I dette prosjektet skal vi bygge et Digital Inclinometer som kan overvåkes ved hjelp av en Android-applikasjon. Årsaken til å bruke en ekstern skjerm som en mobiltelefon er at vi kan overvåke verdiene fra MPU6050 uten å måtte se på maskinvaren, dette vil være veldig nyttig når MPU6050 plasseres på en drone eller andre utilgjengelige steder.
Nødvendige materialer:
- Arduino Pro-mini (5V)
- MPU6050 gyrosensor
- HC-05 eller HC-06 Bluetooth-modul
- FTDI-brett
- Brettbrett
- Koble ledninger
- Smart telefon
Kretsdiagram:
Det komplette kretsskjemaet for dette Arduino Tilt Sensor Project er vist nedenfor. Den har bare tre komponenter og kan enkelt bygges over brødbordet.
De MPU6050 kommuniserer ved hjelp av I2C og dermed SDA tappen er koblet til A4 tapp av Arduino som er SDA stiften og SCL tappen er koblet til A5 pin av Arduino. Den HC-06 Bluetooth-modulen arbeider ved hjelp av seriekommunikasjon derav Rx pin av Bluetooth er koblet til tappen D11 og Tx-pin av Bluetooth er koblet til tappen D10 av Arduino. Disse pin D10 og D11 vil bli konfigurert som Serial pin ved å programmere Arduino. HC-05-modulen og MSP6050-modulen fungerer på + 5V, og de drives derfor av Vcc-pinnen på Arduino som vist ovenfor.
Jeg brukte noen koblingsledninger for brødbrett og bygde oppsettet over et lite brødbrett. Når tilkoblingene er gjort, ser styret mitt slik ut nedenfor.
Slår på oppsettet:
Du kan enten strømforsyne kretsen din via FTDI-programmeringskortet som jeg har gjort, eller bruke et 9V batteri eller 12V adapter og koble det til Raw pin på Arduino pro mini. Arduino Pro-mini har en innebygd spenningsregulator som konverterer denne eksterne spenningsregulerte + 5V.
Programmering av Arduino:
Når maskinvaren er klar, kan vi begynne å programmere Arduino. Som alltid finner du fullstendig kode for dette prosjektet nederst på denne siden. Men for å forstå prosjektet bedre har jeg ødelagt koden til små chinks og forklart dem som trinn nedenfor.
Det første trinnet ville være å koble MPU6050 til Arduino. For dette prosjektet skal vi bruke biblioteket utviklet av Korneliusz, som kan lastes ned fra lenken nedenfor
MPU6050 Liberty - Korneliusz Jarzebski
Last ned ZIP-filen og legg den til din Arduino IDE. Gå deretter videre til Fil-> Eksempler-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Dette åpner eksempelprogrammet som bruker biblioteket som vi nettopp lastet ned. Så klikk på opplasting og vent på at programmet skal lastes opp til Arduino Pro mini. Når det er gjort, åpner du den serielle skjermen og stiller overføringshastigheten til 115200 og sjekker om du får følgende.
I utgangspunktet vil alle de tre verdiene være som null, men når du flytter brødbordet ditt, kan du observere at disse verdiene blir endret. Hvis de endrer, betyr det at forbindelsen din er riktig, ellers sjekk tilkoblingene dine. Ta deg litt tid her og legg merke til hvordan de tre verdiene Pitch Roll og Yaw varierer i henhold til måten du vipper sensoren på. Hvis du blir forvirret, trykk på tilbakestillingsknappen på Arduino, og verdiene blir initialisert til null igjen, så vipp sensoren i en retning og sjekk hvilke verdier som varierer. Bildet nedenfor hjelper deg med å forstå bedre.
Av disse tre parametrene er vi bare interessert i Roll and Pitch. Rullverdien vil fortelle oss om hellingen i X-aksen og Pitch-verdien vil fortelle oss om hellingen i Y-aksen. Nå som vi har forstått det grunnleggende, kan vi faktisk begynne å programmere Arduino for å lese disse verdiene, og send den til Arduino via Bluetooth. La oss som alltid begynne med å inkludere alle bibliotekene som trengs for dette prosjektet
#inkludere
Deretter initialiserer vi programvareserien for Bluetooth-modulen. Dette er mulig på grunn av programvareseriebiblioteket i Arduino, kan IO-pinnene programmeres til å fungere som serielle pinner. Her bruker vi de digitale pinnene D10 og D11, der D10 id Rx og D11 er Tx.
SoftwareSerial BT (10, 11); // RX, TX
Etterfulgt av at vi initialiserer variablene og objektene som trengs for programmet og går videre til oppsett () -funksjonen der vi spesifiserer overføringshastigheten for seriell skjerm og Bluetooth. For HC-05 og HC-06 er overføringshastigheten 9600, så det er obligatorisk å bruke den samme. Så sjekker vi om IIC-bussen til Arduino er koblet til MPU6050 hvis ikke, skriver vi ut en advarsel og blir værende så lenge enheten er koblet til. Etter det kalibrerer vi Gyro og setter terskelverdiene ved hjelp av de respektive funksjonene som vist nedenfor.
ugyldig oppsett () {Serial.begin (115200); BT.begin (9600); // start Bluetooth-kommunikasjonen ved 9600 baudrate // Initialiser MPU6050 mens (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Kunne ikke finne en gyldig MPU6050-sensor, sjekk ledninger!"); forsinkelse (500); } mpu.calibrateGyro (); // Kalibrer gyroskop under start mpu.setThreshold (3); // Kontrollerer sensitiviteten}
Linjen “ mpu.calibrateGyro ();” kalibrer MPU6050 for posisjonen den for øyeblikket er plassert på. Denne linjen kan kalles flere ganger i programmet når MPU6050 må kalibreres og alle verdiene skal settes til null. “Mpu.setThreshold (3);” denne funksjonen styrer hvor mye verdien varierer for bevegelsen på sensoren, for lav verdi vil øke støyen, så vær forsiktig mens du fikler med dette.
Inne i tomrummet () leser vi gjentatte ganger verdiene til gyroskop og temperatursensor beregner verdien av tonehøyde, rull og gjeng, send den til Bluetooth-modulen. De følgende to linjene vil lese de rå Gyro-verdiene og temperaturverdien
Vektornorm = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Deretter beregner vi pitch, roll og yaw ved å multiplisere med tidstrinnet og legge det opp til de forrige verdiene. En timeStep er bare intervallet mellom påfølgende målinger.
tonehøyde = tonehøyde + norm.YAxis * timeStep; rull = rull + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
For å forstå tidstrinnet bedre, la oss ta en titt på linjen nedenfor. Denne linjen er plassert for å lese verdiene fra MPU6050 nøyaktig med et intervall på 10mS eller 0,01 sekund. Så vi erklærer verdien av timeStep som 0.01. Og bruk linjen nedenfor for å holde programmet hvis det er hvis det er mer tid igjen. (millis () - timer ()) gir tiden det tar for programmet å kjøre så langt. Vi trekker det bare med 0,01 sekunder, og for den resterende tiden holder vi bare vårt program der ved hjelp av forsinkelsesfunksjonen.
forsinkelse ((timeStep * 1000) - (millis () - timer));
Når vi er ferdig med å lese og beregne verdiene, kan vi sende dem til telefonen vår via Bluetooth. Men det er en fangst her. Bluetooth-modulen som vi bruker, kan bare sende 1 byte (8 bits), som lar oss sende nummer bare fra 0 til 255. Så vi må dele verdiene våre og kartlegge det innenfor dette området. Dette gjøres av følgende linjer
hvis (rull> -100 && rull <100) x = kart (rull, -100, 100, 0, 100); hvis (tonehøyde> -100 && tonehøyde <100) y = kart (tonehøyde, -100, 100, 100, 200); hvis (temp> 0 && temp <50) t = 200 + int (temp);
Som du kan finne ut av, blir verdien på rull kartlagt til 0 til 100 i variabelen x og tonehøyde blir kartlagt til 100 til 200 i variabelen y og temp blir kartlagt i 200 og over til variabelen t. Vi kan bruke den samme informasjonen til å hente dataene fra det vi har sendt. Til slutt skriver vi disse verdiene via Bluetooth ved hjelp av følgende linjer.
BT.write (x); BT.write (y); BT.write (t);
Hvis du har forstått hele programmet, blar du ned for å se på programmet og laste det opp til Arduino-kortet.
Klargjøre Android-applikasjonen ved hjelp av prosessering:
Android-applikasjonen for dette Arduino Inclinometer ble utviklet ved hjelp av Processing IDE. Dette ligner veldig på Arduino og kan brukes til å lage systemapplikasjon, Android-applikasjon, webdesign og mye mer. Vi har allerede brukt behandling for å utvikle noen av de andre kule prosjektene våre som er oppført nedenfor
- Ping Pong-spill med Arduino
- Smarttelefonkontrollert FM-radio ved bruk av prosessering.
- Arduino Radar System ved hjelp av prosessering og ultralydssensor
Det er imidlertid ikke mulig å forklare den komplette koden for hvordan du lager denne applikasjonen. Så du har to måter å gå over dette på. Enten kan du laste ned APK-filen fra lenken nedenfor og installere android-applikasjonen direkte på telefonen. Eller bla nedenfor for å finne den fullstendige behandlingskoden og lær selv hvordan den fungerer
Inne i ZIP-filen kan du finne en mappe som heter data som består av alle bildene og andre kilder som skal lastes inn i Android-applikasjonen. Linjen nedenfor bestemmer hvilket navn Bluetooth automatisk skal koble til
bt.connectToDeviceByName ("HC-06");
Inne i tegnefunksjonen () vil tingene utføres gjentatte ganger her. Vi tegner bildene, viser teksten og animerer stolpene basert på verdiene fra Bluetooth-modulen. Du kan sjekke hva som skjer i hver funksjon ved å lese gjennom programmet.
void draw () // The infinite loop {background (0); imageMode (SENTER); bilde (logo, bredde / 2, høyde / 1,04, bredde, høyde / 12); load_images (); textfun (); getval (); }
Til slutt er det en viktig ting å forklare, husk at vi deler verdien av tonehøyde, rull og temp til 0 til 255. Så her bringer vi den tilbake til normale verdier ved å reversere kartlegge den til normale verdier.
hvis (info <100 && info> 0) x = kart (info, 0, 100, - (bredde / 1,5) / 3, + (bredde / 1,5) / 3); // x = info; annet hvis (info <200 && info> 100) y = kart (info, 100, 200, - (bredde / 4,5) / 0,8, + (bredde / 4,5) / 0,8); // y = info; annet hvis (info> 200) temp = info -200; println (temp, x, y);
Det er mye bedre måter å få data fra en Bluetooth-modul til telefonen, men siden dette bare er et hobbyprosjekt vi har ignorert dem, kan du grave dypt hvis du er interessert.
Arbeid av Arduino Inclinometer:
Når du er klar med maskinvare og applikasjon, er det på tide å ha det gøy med det vi har bygget. Last opp Arduino-koden til tavlen, du kan også fjerne kommentarene på Serial.println- linjer og sjekke om maskinvaren fungerer som forventet ved hjelp av den serielle skjermen. Uansett, det er helt valgfritt.
Når koden er lastet opp, starter du Android-applikasjonen på mobiltelefonen din. Applikasjonen skal automatisk koble til HC-06-modulen din, og den vil vise "Koble til: HC-06" på toppen av applikasjonen som vist nedenfor.
I utgangspunktet vil alle verdiene være null bortsett fra temperaturverdien. Dette er fordi Arduino har kalibrert MPU-6050 for denne posisjonen som referanse, nå kan du vippe maskinvaren og sjekke at verdiene på mobilapplikasjonen også endres sammen med animasjonen. Fullstendig bearbeiding av søknaden finner du i videoen nedenfor. Så nå kan du plassere brødplaten hvor som helst og sjekke om overflaten er perfekt utjevnet.
Håper du forsto prosjektet og lærte noe nyttig ut av det. Hvis du er i tvil, bruk kommentarseksjonen nedenfor eller forumene for å få det løst.