Indholdsfortegnelse:
Video: Arduino & MPU6050 baseret digitalt vaterpas: 3 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:25
Velkommen til min første instruerbare nogensinde! Jeg håber, at du finder det informativt. Du er velkommen til at give feedback, hvad enten den er positiv eller negativ.
Dette projekt er at lave et arduino & MPU6050 baseret digitalt vaterpas. Selvom det færdige design og koden er min, er det originale koncept og meget af den kode, jeg har arbejdet ud fra, ikke. Jeg er ikke til plagiat, så jeg er mere end glad for at give æren til dem, der har ideer, jeg har bygget videre på. De 2 hovedpersoner, jeg vil give et råb til, er YouTubers Paul McWhorter og DroneBot Workshop. Jeg inkluderer links til dem i min youtube nyttige links PDF. Tak også til EEEnthusiast for hans informative video om brug af MPU6050 inklusive opsætning og læsning fra modulet uden et eksternt bibliotek (hans link er i samme PDF).
Det projekt, jeg har produceret, fungerer 'som det er' og er fairy -præcist, helt sikkert op til 45% i begge retninger. Du kan bruge det nøjagtigt, som jeg har designet det, eller du kan skræddersy det til din egen smag. Jo mere kloge du vil bemærke, at mit projekt ser næsten identisk ud med det, der blev produceret af DroneBot -værkstedet, men vær sikker på, at der er betydelige forskelle, især når det kommer til koden til beregning af vinkler, plus muligheden for at gemme kalibreringsværdier i Eeprom!
Nogle funktioner til at vække din appetit:
Pitch and roll vinkler tilgængelige inden for 0,1 grad.
Automatisk registrering af orienteringen af gyroenheden (vandret eller lodret)
Fuld kalibrering med resultater, der automatisk gemmes på eeprom
LED -indikation fra -2 til +2 grader (kan ændres i kode)
Yderligere hørbar indikation af niveau (kan tændes/slukkes på flyet)
Kompakt kurv, der kræver minimale komponenter
Lad os komme igang.
Forbrugsvarer
Dette projekt (som det er) bruger følgende elementer:
1 x Arduino nano (min er en klon)
1 x MPU6050 gyro/accelerometer -modul
1 x LCD - 16 x 2 + I2C -forbindelse
1 x Tryk for at foretage switch
1 x Piezo -summer
1 x grøn LED
2 x gule lysdioder
2 x røde lysdioder
5 x 220 ohm modstande
Forskellige springkabler
Brødbræt
Strømforsyning (min brugte en 5v USB strømbank, når den ikke var tilsluttet min pc, men du kunne bruge et batteri korrekt tilsluttet)
Trin 1: Kredsløbet
Forudsat at du har alle komponenterne, skal du bygge dit brødbræt.
Jeg viser mit setup som en guide, men forbindelserne er som følger:
Arduino pin D2 forbindes til 1 side af trykkontakten. Den anden side af trykkontakten forbindes til jorden
Arduino pin D3 forbindes til 1 side af 220 ohm modstand. Den anden side af modstanden tilsluttes til annode af rød LED. Katode af rød LED går til jorden.
Arduino pin D4 forbindes til 1 side af 220 ohm modstand. Den anden side af modstanden tilsluttes til annode af gul LED. Katode af gul LED går til jorden.
Arduino pin D5 forbindes til 1 side af 220 ohm modstand. Den anden side af modstanden tilsluttes til annode af grøn LED. Katode af grøn LED går til jorden.
Arduino pin D6 forbindes til 1 side af 220 ohm modstand. Den anden side af modstanden tilsluttes til annode af gul LED. Katode af gul LED går til jorden.
Arduino pin D7 forbindes til 1 side af 220 ohm modstand. Den anden side af modstanden tilsluttes til annode af rød LED. Katode af rød LED går til jorden.
Arduino pin D8 forbinder til den ene side af Piezo summer. Den anden side af summeren forbindes til jorden.
Arduino pin A4 tilsluttes SDA ben på MPU6050 OG LCD'en.
Arduino pin A5 tilsluttes SCL benene på MPU6050 OG LCD'et
5v strøm og Gnd til MPU6050 og LCD kommer fra henholdsvis Arduino Nano 5v og GND benene.
Når den er fuldført, skal den ligne min viste opsætning. Jeg lagde blu tak under MPU6050 for at stoppe det med at bevæge sig og også på LCD'et for at holde det på kanten af brødbrættet.
Trin 2: Koden
Den vedhæftede kode er den kode, jeg har brugt til dette projekt. Det eneste bibliotek, du måske har et problem med, er
LiquidCrystal_I2C.h bibliotek, da jeg importerede dette, da jeg først begyndte at arbejde med LCD'er. Desværre er der et par biblioteker, der bruger den samme #include -sætning, men er lidt forskellige. Hvis du har problemer med din, skal du finde en anden LCD -kode, der fungerer for dig, og ændre koden i overensstemmelse hermed. Det er kun sandsynligt, at opsætningen er forskellig. Alle 'print' -kommandoer skal fungere ens.
Hele koden er blevet kommenteret, og forudsat at jeg har gjort det rigtigt, vil der også være en video, der forklarer alt, men her er et par punkter at bemærke:
LiquidCrystal_I2C lcd (0x27, 16, 2);
Ovenstående kode er opsætningen til min LCD. Hvis dit bibliotek er anderledes, skal du muligvis ikke kun ændre dit bibliotek, men også denne linje.
{lcd.setCursor (0, 1); lcd.print ("Vandret!"); orientering = HORIZONTAL; // Læs rå acc- og gyrodata fra MPU-6050 1000 gange for (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // Tilføj gyro x -forskydningen til gyro_x_cal -variablen gyro_x_cal += gyro_x; // Tilføj gyro y -forskydningen til gyro_y_cal -variablen gyro_y_cal += gyro_y; // Tilføj gyro z -forskydningen til gyro_z_cal -variablen gyro_z_cal += gyro_z; // Tilføj acc x -forskydningen til variablen acc_x_cal acc_x_cal += acc_x; // Tilføj acc y -forskydningen til variablen acc_y_cal acc_y_cal += acc_y; } // Divider alle resultater med 1000 for at få gennemsnitlig forskydning gyro_x_cal /= 1000.0; gyro_y_cal /= 1000,0; gyro_z_cal /= 1000,0; acc_x_cal /= 1000,0; acc_y_cal /= 1000,0; horisontal kalibrering = 255; eeprom_address = 0; EEPROM.put (eeprom_adresse, horisontal kalibrering); 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); // Bemærk, vi gemmer ikke en forskydning for acc_z på grund af tyngdekraften! forsinkelse (500); }
Ovenstående kodeblok udføres til kalibreringsrutine. Denne kode er til den vandrette kalibrering. Der er næsten identisk kode til den lodrette kalibrering (bemærk, koden ved, om din MPU6050 er monteret vandret eller lodret!). MPU6050, læses 1000 gange. passende værdier tilføjes kumulativt derefter divideret med 1000 for at give en gennemsnitlig 'offset' -værdi. Disse værdier gemmes derefter på Nano eeprom. Alle vandrette kalibreringsværdier gemmes begyndende på eeprom -adresse 0. Alle vertikale værdier gemmes begyndende på eeprom -adresse 24. Kalibreringen SKAL udføres på en helt plan overflade, ellers betyder de ingenting.
/ * * De næste par linjer behandler rådataene for at ændre det til vinkler, der kan sendes til LCD'en og LED'erne. * Værdien på 4096, som accelerationsdata er divideret med, er taget fra MPU6050 -databladet og er baseret på samplingshastighed. * Værdien af 9,8 er tyngdekraften * Atan2-funktionen er fra matematikmodulet og bruges til at beregne vinklerne fra de givne data */thetaM = -atan2 ((acc_x/4096.0) /9.8, (acc_z/4096.0) /9.8) /2/3.141592656 * 360; // Rå data phiM = -atan2 ((acc_y/4096.0) /9.8, (acc_z/4096.0) /9.8) /2/3.141592656 * 360; // Rå data dt = (millis ()-millisOld)/1000.; millisOld = millis (); / * * Dette afsnit bruger gyrodataene til at gøre systemet mere lydhørt * værdien på 65,5, som gyrodataene er divideret med, er taget fra MPU6050 -databladet og er baseret på samplingshastigheden */ theta = (theta+(gyro_y/ 65,5)*dt)*. 96 + thetaM*.04; // Lavpasfilter phi = (phi + (gyro_x/65,5)*dt)*. 96 + phiM*.04; // Lavpasfilter
Ovenstående kode er de ting, der beregner vinklerne. Forhåbentlig giver kommentarerne et lille indblik i, hvordan det fungerer, men for en dybdegående forklaring, tjek Paul McWhorters -video, der er linket til i den vedhæftede PDF. Hvad jeg dog vil sige, er, at du kan ændre prøvehastigheden for gyroen og accelerometeret (som udføres i opsætningen MPU6050 -underprogram i bunden af min kode). Hvis du ændrer samplingshastigheden, skal du også ændre, hvor meget rådata er divideret med. For accelerometer -data er den aktuelle værdi 4096. For gyroen er den aktuelle værdi 65,5.
Se de vedhæftede datablade og videoen fra EEEntusiast (link i den vedhæftede PDF) for mere detaljeret information om, hvordan prøve- og offsetværdierne findes.
Trin 3: Næste trin
På dette tidspunkt vil forhåbentlig have lavet dette projekt, men hvad nu?
For det første, hvorfor egentlig ikke bygge det ind på et vaterpas, som du kan bruge. Du kan købe et billigt vaterpas (sørg for at det er boksetypen), som du kan tilpasse, eller hvis du har sættet, skal du printe dit eget niveau/kasse.
Måske lege med gyro- og accelerometerprøvehastighederne for at se, om de fungerer bedre med en hastighed end en anden.
Prøv at finjustere koden yderligere. For eksempel på nuværende tidspunkt, ud over 45 grader, er den angivne vinkel mildest talt grov. Er der en vej udenom det?
Hvis du har spørgsmål, uanset hvor enkle de kan se ud, så spørg venligst. Hvis jeg kan hjælpe, gør jeg det.
Hvis du kan lide dette instruerbart, giv det et like, så jeg ved det.
Hvis du laver dette, skal du vise mig det (især hvis det er i en arbejdssag).
TAK SKAL DU HAVE
Anbefalede:
DIY Digital vaterpas: 5 trin (med billeder)
DIY Digital vaterpas: I dette projekt vil vi se nærmere på accelerometer -IC'er og finde ud af, hvordan vi kan bruge dem med en Arduino. Bagefter vil vi kombinere sådan en IC med et par komplementære komponenter og et 3D -printet kabinet for at skabe en digital
Arduino -baseret digitalt termometer: 3 trin
Arduino baseret digitalt termometer: I dette projekt er der designet et Arduino baseret digitalt termometer, der kan bruges til at analysere rummets temperatur. Termometeret bruges generelt som et temperaturmåleinstrument. Der er forskellige principper, der kan bruges til at måle
Digital vaterpas et DIY -projektmodul af Electronicslovers: 6 trin
Digital vaterpas et DIY -projektmodul af Electronicslovers: Der er en tid, hvor du skal montere et møbel eller lignende i dit hjem og for en lige montering, bruger alle normalt et vaterpas. ElectronicsLovers Tech Team byggede dette modul, som har en forskel fra et sædvanligt: jeg
Arduino -baseret ikke -kontakt infrarødt termometer - IR -baseret termometer ved hjælp af Arduino: 4 trin
Arduino -baseret ikke -kontakt infrarødt termometer | IR -baseret termometer ved hjælp af Arduino: Hej fyre i denne instruktion vil vi lave et kontaktfrit termometer ved hjælp af arduino. Da nogle gange temperaturen på væsken/faststoffet er alt for høj eller for lav, og så er det svært at komme i kontakt med det og læse dets temperaturen derefter i den scene
Opret et elektrisk vaterpas: 15 trin
Opret et elektrisk vaterpas: Brug dette vaterpas til hurtigt og nemt at vise tiltningen af ethvert vedhæftet objekt! Oprettet af Kaitlyn fra Raffles Institution