- Nødvendige materialer:
- Kredsløbsdiagram:
- Tænd for din opsætning:
- Programmering af din Arduino:
- Forberedelse af Android-applikationen ved hjælp af behandling:
- Arbejde med Arduino Inclinometer:
Den MPU6050 er en IC 3-akset accelerometer og en 3-akse gyroskop kombineret i én enhed. Det huser også en temperatursensor og en DCM til at udføre en kompleks opgave. MPU6050 bruges ofte til at opbygge drone og andre fjernrobotter som en selvbalancerende robot. I dette projekt lærer vi, hvordan man bruger MPU6050 er bygget et hældningsmåler eller Spirit Leveler. Som vi ved, bruges et hældningsmåler til at kontrollere, om en overflade er perfekt udjævnet eller ej, de er tilgængelige enten som spritbobler eller som digitale målere. I dette projekt skal vi bygge et Digital Inclinometer, der kan overvåges ved hjælp af en Android-applikation. Årsagen til at bruge en fjernskærm som en mobiltelefon er, at vi kan overvåge værdierne fra MPU6050 uden at skulle se på hardwaren, dette ville være meget praktisk, når MPU6050 placeres på en drone eller andre utilgængelige placeringer.
Nødvendige materialer:
- Arduino Pro-mini (5V)
- MPU6050 Gyrosensor
- HC-05 eller HC-06 Bluetooth-modul
- FTDI-kort
- Brødbræt
- Tilslutning af ledninger
- Smart telefon
Kredsløbsdiagram:
Det komplette kredsløbsdiagram for dette Arduino Tilt Sensor Project er vist nedenfor. Det har kun tre komponenter og kan let bygges over brødbrættet.
De MPU6050 kommunikerer ved hjælp af I2C og dermed SDA pin er forbundet til A4 pin af Arduino som er SDA stiften og SCL er forbundet til A5 pin af Arduino. Den HC-06 Bluetooth-modul arbejder med hjælp af seriel kommunikation dermed Rx pin af Bluetooth er forbundet til pin D11 og Tx pin af Bluetooth er forbundet til pin D 10 i Arduino. Disse pin D10 og D11 vil blive konfigureret som Serial pin ved at programmere Arduino. HC-05-modulet og MSP6050-modulet fungerer på + 5V, og de drives derfor af Vcc-stiften på Arduino som vist ovenfor.
Jeg brugte nogle breadboard-forbindelsesledninger og byggede opsætningen over et lille breadboard. Når forbindelserne er færdige, ser mit bord sådan ud nedenfor.
Tænd for din opsætning:
Du kan enten tænde dit kredsløb gennem FTDI-programmeringskortet, som jeg har gjort, eller bruge et 9V batteri eller 12V adapter og tilslutte det til Raw pin på Arduino pro mini. Arduino Pro-mini har en indbygget spændingsregulator, der konverterer denne eksterne spændingsregulerede + 5V.
Programmering af din Arduino:
Når hardwaren er klar, kan vi begynde at programmere vores Arduino. Som altid kan den komplette kode for dette projekt findes nederst på denne side. Men for at forstå projektet bedre har jeg brudt koden til små chinks og forklaret dem som trin nedenfor.
Det første trin ville være grænsefladen mellem MPU6050 og Arduino. Til dette projekt skal vi bruge biblioteket udviklet af Korneliusz, som kan downloades fra nedenstående link
MPU6050 Liberty - Korneliusz Jarzebski
Download ZIP-filen og tilføj den til din Arduino IDE. Gå derefter videre til Fil-> Eksempler-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Dette åbner det eksempelprogram, der bruger biblioteket, som vi lige har downloadet. Så klik på upload og vent på, at programmet uploades til din Arduino Pro mini. Når det er gjort, skal du åbne din serielle skærm og indstille din baudrate til 115200 og kontrollere, om du får følgende.
Oprindeligt vil alle de tre værdier være som nul, men når du flytter dit brødbræt, kan du observere, at disse værdier bliver ændret. Hvis de ændrer det, betyder det, at din forbindelse er korrekt, ellers skal du kontrollere dine forbindelser. Brug lidt tid her på at bemærke, hvordan de tre værdier Pitch Roll og Yaw varierer alt efter den måde, du vipper din sensor på. Hvis du bliver forvirret, skal du trykke på nulstillingsknappen på Arduino, og værdierne initialiseres til nul igen, så vipp sensoren i en retning og kontroller, hvilke værdier der varierer. Billedet nedenfor hjælper dig med at forstå bedre.
Ud af disse tre parametre er vi kun interesseret i Roll and Pitch. Rulleværdien fortæller os om hældningen i X-aksen, og Pitch-værdien fortæller os om hældningen i Y-aksen. Nu hvor vi har forstået det grundlæggende, kan vi faktisk begynde at programmere Arduino til at læse disse værdier, send det over til Arduino via Bluetooth. Lad os som altid starte med at inkludere alle de biblioteker, der er nødvendige for dette projekt
#omfatte
Derefter initialiserer vi softwarenserien til Bluetooth-modulet. Dette er muligt på grund af softwarens serielle bibliotek i Arduino, IO-benene kan programmeres til at fungere som serielle ben. Her bruger vi de digitale ben D10 og D11, hvor D10 id Rx og D11 er Tx.
SoftwareSerial BT (10, 11); // RX, TX
Efterfulgt af det initialiserer vi de variabler og objekter, der er nødvendige for programmet, og går videre til setup () -funktionen, hvor vi specificerer baudhastigheden for seriel skærm og Bluetooth. For HC-05 og HC-06 er baudhastigheden 9600, så det er obligatorisk at bruge den samme. Derefter kontrollerer vi, om Arduinos IIC-bus er tilsluttet MPU6050, hvis ikke, udskriver vi en advarselsmeddelelse og forbliver der, så længe enheden er tilsluttet. Derefter kalibrerer vi Gyroen og indstiller dens tærskelværdier ved hjælp af dens respektive funktioner som vist nedenfor.
ugyldig opsætning () {Serial.begin (115200); BT.begin (9600); // start Bluetooth-kommunikationen ved 9600 baudrate // Initialiser MPU6050 mens (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Kunne ikke finde en gyldig MPU6050-sensor, tjek ledningerne!"); forsinkelse (500); } mpu.calibrateGyro (); // Kalibrer gyroskop under start mpu.setThreshold (3); // Kontrollerer følsomheden}
Linjen " mpu.calibrateGyro ();" kalibrer MPU6050 for den position, den aktuelt er placeret på. Denne linje kan kaldes flere gange inde i programmet, når MPU6050 skal kalibreres, og alle værdier skal indstilles til nul. “Mpu.setThreshold (3);” denne funktion styrer, hvor meget værdien varierer for bevægelsen på sensoren. En for lav værdi vil øge støj, så vær forsigtig, når du holder på med dette.
Inde i hulrummet () læser vi gentagne gange værdierne af gyroskop og temperaturføler beregner værdien af tonehøjde, rulle og yaw, send den til Bluetooth-modulet. De følgende to linjer læser de rå Gyro-værdier og temperaturværdien
Vektornorm = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Dernæst beregner vi tonehøjde, rulle og yaw ved at multiplicere med tidstrin og tilføje det op til de tidligere værdier. En timeStep er intet andet end intervallet mellem på hinanden følgende aflæsninger.
tonehøjde = tonehøjde + norm.YAxis * timeStep; roll = roll + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
For at forstå tidsskridt bedre, lad os se på nedenstående linje. Denne linje er placeret til at læse værdierne fra MPU6050 nøjagtigt med et interval på 10mS eller 0,01 sekund. Så vi erklærer værdien af timeStep som 0.01. Og brug linjen nedenfor for at holde programmet, hvis der, hvis der er mere tid tilbage. (millis () - timer ()) giver den tid, det tager for programmet at køre indtil videre. Vi trækker det bare med 0,01 sekunder, og i den resterende tid holder vi bare vores program der ved hjælp af forsinkelsesfunktionen.
forsinkelse ((timeStep * 1000) - (millis () - timer));
Når vi er færdige med at læse og beregne værdierne, kan vi sende dem til vores telefon via Bluetooth. Men der er en fangst her. Bluetooth-modul, som vi bruger, kan kun sende 1 byte (8 bit), som giver os mulighed for kun at sende numre fra 0 til 255. Så vi er nødt til at opdele vores værdier og kortlægge det inden for dette interval. Dette gøres ved hjælp af følgende linjer
hvis (rulle> -100 && rulle <100) x = kort (rulle, -100, 100, 0, 100); hvis (tonehøjde> -100 && tonehøjde <100) y = kort (tonehøjde, -100, 100, 100, 200); hvis (temp> 0 && temp <50) t = 200 + int (temp);
Som du kan finde ud af, kortlægges rullens værdi til 0 til 100 i variablen x, og tonehøjde kortlægges til 100 til 200 i variablen y, og temp kortlægges i 200 og derover i variablen t. Vi kan bruge de samme oplysninger til at hente dataene fra det, vi har sendt. Endelig skriver vi disse værdier via Bluetooth ved hjælp af følgende linjer.
BT.write (x); BT.write (y); BT.write (t);
Hvis du har forstået det komplette program, skal du rulle ned for at se på programmet og uploade det til Arduino-kortet.
Forberedelse af Android-applikationen ved hjælp af behandling:
Android-applikationen til dette Arduino Inclinometer blev udviklet ved hjælp af Processing IDE. Dette ligner meget Arduino og kan bruges til at oprette systemapplikation, Android-applikation, webdesign og meget mere. Vi har allerede brugt behandling til at udvikle nogle af vores andre seje projekter, der er angivet nedenfor
- Ping Pong-spil ved hjælp af Arduino
- Smart telefonstyret FM-radio ved hjælp af behandling.
- Arduino Radar System ved hjælp af Processing og Ultralydssensor
Det er dog ikke muligt at forklare den komplette kode om, hvordan du opretter denne applikation. Så du har to måder at gå over dette på. Enten kan du downloade APK-filen fra nedenstående link og installere Android-applikationen direkte på din telefon. Eller rul nedenunder for at finde den komplette behandlingskode og lær selv, hvordan den fungerer
Inde i ZIP-filen kan du finde en mappe kaldet data, der består af alle de billeder og andre kilder, der skal indlæses i Android-applikationen. Linjen nedenfor beslutter, hvilket navn Bluetooth automatisk skal oprette forbindelse til
bt.connectToDeviceByName ("HC-06");
Inde i tegnefunktionen () udføres tingene gentagne gange her, hvor vi tegner billederne, viser teksten og animerer bjælkerne baseret på værdierne fra Bluetooth-modulet. Du kan kontrollere, hvad der sker inden for hver funktion ved at læse gennem programmet.
void draw () // The infinite loop {background (0); imageMode (CENTER); billede (logo, bredde / 2, højde / 1,04, bredde, højde / 12); load_images (); textfun (); getval (); }
Endelig er der endnu en vigtig ting at forklare. Husk, at vi deler værdien af tonehøjde, rulle og temp til 0 til 255. Så her bringer vi det igen tilbage til normale værdier ved omvendt at kortlægge det til normale værdier.
hvis (info <100 && info> 0) x = kort (info, 0, 100, - (bredde / 1,5) / 3, + (bredde / 1,5) / 3); // x = info; ellers hvis (info <200 && info> 100) y = kort (info, 100, 200, - (bredde / 4,5) /0,8, + (bredde / 4,5) /0,8); // y = info; ellers hvis (info> 200) temp = info -200; println (temp, x, y);
Der er meget bedre måder at få data fra et Bluetooth-modul til telefon, men da dette bare er et hobbyprojekt, har vi ignoreret dem, kan du grave dybt, hvis du er interesseret.
Arbejde med Arduino Inclinometer:
Når du er klar med hardware og applikation, er det tid til at have det sjovt med det, vi har bygget. Upload Arduino-koden til tavlen, du kan også fjerne kommentarerne på Serial.println- linjer og kontrollere, om hardwaren fungerer som forventet ved hjælp af den serielle skærm. Under alle omstændigheder er det helt valgfrit.
Når koden er uploadet, skal du starte Android-applikationen på din mobiltelefon. Applikationen skal automatisk oprette forbindelse til dit HC-06-modul, og det viser "Opret forbindelse til: HC-06" øverst i applikationen som vist nedenfor.
Oprindeligt vil alle værdier være nul bortset fra temperaturværdien. Dette skyldes, at Arduino har kalibreret MPU-6050 til denne position som reference, nu kan du vippe hardwaren og kontrollere, at værdierne på mobilapplikationen også ændrer sig sammen med animationen. Den komplette bearbejdning af applikationen kan findes i videoen nedenfor. Så nu kan du placere brødbrættet hvor som helst og kontrollere, om overfladen er perfekt planeret.
Håber du forstod projektet og lærte noget nyttigt ud af det. Hvis du er i tvivl, bedes du bruge kommentarsektionen nedenfor eller foraerne for at få det løst.