Innholdsfortegnelse:
Video: Arduino og MPU6050 basert digitalt vater: 3 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
Velkommen til min første instruerbare noensinne! Jeg håper du finner det informativt. Kom gjerne med tilbakemeldinger, enten positive eller negative.
Dette prosjektet skal lage et arduino- og MPU6050 -basert digitalt vaterpas. Selv om den ferdige designen og koden er min, er ikke det originale konseptet og mye av koden jeg har jobbet ut fra. Jeg er ikke interessert i plagiat, så jeg er mer enn glad for å gi æren til de som har ideer jeg har bygget videre på. De to hovedpersonene jeg vil rope ut til er YouTubers Paul McWhorter og DroneBot Workshop. Jeg inkluderer lenker til dem i min youtube nyttige lenker PDF. Takk også til EEEnthusiast for hans informative video om bruk av MPU6050, inkludert oppsett og lesing fra modulen uten et eksternt bibliotek (lenken hans er i samme PDF).
Prosjektet jeg har produsert, fungerer 'som det er' og er fairy -nøyaktig, sikkert opptil 45% i begge retninger. Du kan bruke den akkurat som jeg har designet den, eller du kan skreddersy den etter din egen smak. De mer forstandige av dere vil legge merke til at prosjektet mitt ser nesten identisk ut med det som ble produsert av DroneBot -verkstedet, men vær trygg, det er betydelige forskjeller, spesielt når det gjelder koden for beregning av vinkler, pluss muligheten til å lagre kalibreringsverdier i Eeprom!
Noen funksjoner for å øke appetitten:
Pitch and roll vinkler tilgjengelig innen 0,1 grad.
Automatisk oppdagelse av orienteringen til gyroenheten (horisontal eller vertikal)
Full kalibrering med resultater lagret automatisk på eeprom
LED -indikasjon fra -2 til +2 grader (kan endres i kode)
Ytterligere hørbar indikasjon på nivå (kan slås på/av på flyet)
Kompakt kurv som krever minimale komponenter
La oss komme i gang.
Rekvisita
Dette prosjektet (som det er) bruker følgende elementer:
1 x Arduino nano (min er en klon)
1 x MPU6050 gyro/akselerometer -modul
1 x LCD - 16 x 2 + I2C -tilkobling
1 x Trykk for å gjøre bryteren
1 x Piezo -summer
1 x grønn LED
2 x gule lysdioder
2 x røde lysdioder
5 x 220 ohm motstander
Ulike startkabler
Brødbrett
Strømforsyning (min brukte en 5v USB strømbank når den ikke var koblet til PCen min, men du kan bruke et batteri riktig tilkoblet)
Trinn 1: Kretsen
Forutsatt at du har alle komponentene, må du bygge brødbrettet.
Jeg viser oppsettet mitt som en guide, men tilkoblinger er som følger:
Arduino pin D2 kobles til 1 side av trykkbryteren. Den andre siden av trykkbryteren kobles til bakken
Arduino pin D3 kobles til 1 side av 220 ohm motstand. Den andre siden av motstanden kobles til annode av rød LED. Katode av rød LED går til bakken.
Arduino pin D4 kobles til 1 side av 220 ohm motstand. Den andre siden av motstanden kobles til annode av gul LED. Katoden av gul LED går til bakken.
Arduino pin D5 kobles til 1 side av 220 ohm motstand. Den andre siden av motstanden kobles til annoden til grønn LED. Katode av grønn LED går til bakken.
Arduino pin D6 kobles til 1 side av 220 ohm motstand. Den andre siden av motstanden kobles til annode av gul LED. Katoden av gul LED går til bakken.
Arduino pin D7 kobles til 1 side av 220 ohm motstand. Den andre siden av motstanden kobles til annode av rød LED. Katode av rød LED går til bakken.
Arduino pin D8 kobles til den ene siden av Piezo summer. Den andre siden av summeren kobles til bakken.
Arduino -pinne A4 kobles til SDA -pinner på MPU6050 OG LCD -skjermen.
Arduino -pinne A5 kobles til SCL -pinnene på MPU6050 OG LCD -skjermen
5v strøm og Gnd for MPU6050 og LCD kommer fra henholdsvis Arduino Nano 5v og GND pins.
Når den er fullført, skal den være lik oppsettet mitt som vises. Jeg la blu tak under MPU6050 for å stoppe den i bevegelse og også på LCD -skjermen for å holde den på kanten av brødbrettet.
Trinn 2: Koden
Koden vedlagt er koden jeg har brukt til dette prosjektet. Det eneste biblioteket du kan ha et problem med er
LiquidCrystal_I2C.h bibliotek da jeg importerte dette da jeg først begynte å jobbe med LCD -er. Dessverre er det noen få biblioteker som bruker den samme #include -setningen, men er litt forskjellige. Hvis du har problemer med din, finner du en annen LCD -kode som fungerer for deg, og endrer koden deretter. Det er bare sannsynlig at oppsettet er forskjellig. Alle 'print' kommandoer skal fungere det samme.
All koden har blitt kommentert og forutsatt at jeg har gjort det riktig, vil det også være en video som forklarer alt, men her er noen få punkter å merke seg:
LiquidCrystal_I2C lcd (0x27, 16, 2);
Koden ovenfor er oppsettet for LCD -skjermen min. Hvis biblioteket ditt er annerledes, må du kanskje ikke bare endre biblioteket ditt, men også denne linjen.
{lcd.setCursor (0, 1); lcd.print ("Horisontal!"); orientering = HORIZONTAL; // Les rådata og gyrodata fra MPU-6050 1000 ganger for (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // Legg til gyro x -forskyvningen i gyro_x_cal -variabelen gyro_x_cal += gyro_x; // Legg til gyro y -forskyvningen i gyro_y_cal -variabelen gyro_y_cal += gyro_y; // Legg til gyro z -forskyvningen i gyro_z_cal -variabelen gyro_z_cal += gyro_z; // Legg til acc x -forskyvningen i acc_x_cal -variabelen acc_x_cal += acc_x; // Legg til acc y -forskyvningen i acc_y_cal -variabelen acc_y_cal += acc_y; } // Del alle resultatene med 1000 for å få gjennomsnittlig forskyvning 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); // Merk at vi ikke lagrer en forskyvning for acc_z, på grunn av tyngdekraften! forsinkelse (500); }
Ovennevnte kodeblokk kjøres til kalibreringsrutine. Denne koden er for den horisontale kalibreringen. Det er nesten identisk kode for den vertikale kalibreringen (merk at koden vet om MPU6050 er montert horisontalt eller vertikalt!). MPU6050, blir lest 1000 ganger. passende verdier blir kumulativt lagt til og deretter delt med 1000 for å gi en gjennomsnittlig 'offset' verdi. Disse verdiene lagres deretter på Nano -eeprom. Alle horisontale kalibreringsverdier lagres fra og med eeprom -adresse 0. Alle vertikale verdier lagres i begynnelsen på eeprom -adressen 24. Kalibreringen MÅ gjøres på en helt plan overflate, ellers betyr de ingenting.
/ * * De neste linjene behandler rådataene for å endre det til vinkler som kan sendes ut til LCD og LED. * Verdien på 4096, som akselerasjonsdataene deles med, er hentet fra MPU6050 -databladet og er basert på samplingshastighet. * Verdien på 9,8 er tyngdekraften * Atan2-funksjonen er fra matemodulen og brukes til å beregne vinklene fra de gitte dataene */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 (); / * * Denne delen bruker gyrodataene for å gjøre systemet mer responsivt * verdien på 65,5, som gyrodataene er delt med, er hentet fra MPU6050 -databladet og er basert på samplingshastigheten */ theta = (theta+(gyro_y/ 65,5)*dt)*. 96 + thetaM*.04; // Lavpassfilter phi = (phi + (gyro_x/65,5)*dt)*. 96 + phiM*.04; // Lavpassfilter
Koden ovenfor er ting som beregner vinklene. Forhåpentligvis gir kommentarene et lite innblikk i hvordan det fungerer, men for en grundig forklaring, sjekk Paul McWhorters -videoen som er lenket til i vedlagte PDF. Det jeg vil si er at du kan endre samplingsfrekvensen for gyroen og akselerometeret (som gjøres i oppsettet MPU6050 -underprogrammet nederst i koden min). Hvis du endrer samplingshastigheten, må du også endre hvor mye rådata er delt på. For akselerometerdataene er gjeldende verdi 4096. For gyroen er gjeldende verdi 65,5.
Se de vedlagte databladene og videoen fra EEEntusiast (lenke i vedlagte PDF) for mer detaljert informasjon om hvordan prøve- og forskyvningsverdiene blir funnet.
Trinn 3: Neste trinn
På dette tidspunktet vil forhåpentligvis ha laget dette prosjektet, men hva nå?
For det første, hvorfor egentlig ikke bygge det inn på et vater som du kan bruke. Du kan kjøpe et billig vaterpas (sørg for at det er boksetypen) som du kan tilpasse, eller hvis du har settet, kan du skrive ut ditt eget nivå/eske.
Kanskje leke med gyro- og akselerometerprøvehastighetene for å se om de fungerer bedre i en takt enn en annen.
Prøv å finjustere koden ytterligere. For eksempel, for tiden, utover 45 grader, er den angitte vinkelen minst grov. Er det en vei rundt det?
Hvis du har spørsmål, uansett hvor enkle de kan virke, kan du spørre. Hvis jeg kan hjelpe, vil jeg.
Hvis du liker dette instruerbart, vennligst gi det et like, så jeg vet det.
Hvis du lager dette, vennligst vis meg (spesielt hvis det er i en arbeidssak).
TAKK SKAL DU HA
Anbefalt:
DIY Digital vater: 5 trinn (med bilder)
DIY Digital vater: I dette prosjektet vil vi se nærmere på akselerometer -ICer og finne ut hvordan vi kan bruke dem med en Arduino. Etterpå vil vi kombinere en slik IC med et par komplementære komponenter og et 3D -trykt kabinett for å lage en digital
Arduino -basert digitalt termometer: 3 trinn
Arduino -basert digitalt termometer: I dette prosjektet er et Arduino -basert digitalt termometer designet som kan brukes til å analysere temperaturen i rommet. Termometeret brukes vanligvis som et temperaturmåleinstrument. Det er forskjellige prinsipper som kan brukes til å måle
Arduino -basert ikke -kontakt infrarødt termometer - IR -basert termometer ved bruk av Arduino: 4 trinn
Arduino -basert ikke -kontakt infrarødt termometer | IR -basert termometer ved bruk av Arduino: Hei folkens i denne instruksjonsboken vil vi lage et kontaktfritt termometer ved hjelp av arduino. Siden noen ganger temperaturen på væsken/faststoffet er for høy eller for lav, og da er det vanskelig å få kontakt med det og lese dets temperaturen da i den situasjonen
Lag et elektrisk vater: 15 trinn
Lag et elektrisk vater: Bruk dette vateren for å raskt og enkelt vise vippen til ethvert objekt som er festet! Laget av Kaitlyn fra Raffles Institution
Picaxe -basert digitalt termometer med maks og min: 13 trinn
Picaxe-basert digitalt termometer med maks og min: (Vennligst legg igjen en melding, men ikke vær for kritisk, dette er min første instruerbare !!) Dette er et termometer jeg laget for bobilen vår, for å vise utetemperaturen. Den er basert på en Picaxe -brikke siden de er billige og enkle å bruke. Hvis dette er for