Innholdsfortegnelse:
- Trinn 1: Utforming av prosjektets funksjonalitet
- Trinn 2: Oppsett og ledningsdiagram
- Trinn 3: Testing av komponenter og grunnleggende kode
- Trinn 4: MPU -kalibrering
- Trinn 5: Sluttkode
Video: Digitalt kompass og Heading Finder: 6 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:20
Forfattere:
Cullan Whelan
Andrew Luft
Blake Johnson
Bekreftelser:
California Maritime Academy
Evan Chang-Siu
Introduksjon:
Grunnlaget for dette prosjektet er et digitalt kompass med overskriftssporing. Dette gjør at brukeren kan følge en overskrift over lange avstander ved hjelp av et digitalt apparat. Til daglig er en kurs en vinkel målt med klokken fra nord, som regnes som null grader, som angitt av kompasset. Enheten har to hovedfunksjoner: den første viser den nåværende overskriften til enheten på en digital skjermreferanse, og den andre er muligheten til å angi en brukerforespurt overskrift, som vil vises på en ring med LED -er øverst på kompasshus. Brukeren ville deretter justere enhetens orientering relatert til den opplyste LED -en. Etter hvert som apparatets retning endres, vil lysdioden bevege seg til senterlampen, og dermed indikere at riktig retning er etablert.
Rekvisita:
- DIYmall 6M GPS -modul
- HiLetgo MPU9250/6500 9-akse 9 DOF 16 bits
- Adafruit NeoPixel Ring 16
- MakerFocus 4 stk 3.7V litium oppladbart batteri
- ELEGOO MEGA 2560 R3 brett
- Adafruit Mini Lipo m/Mini -B USB -kontakt - USB LiIon/LiPoly lader - v1
- 2,8 TFT LCD -skjerm med berøringsskjerm med MicroSD -kontakt
Trinn 1: Utforming av prosjektets funksjonalitet
Det første trinnet er å forstå logikken og den endelige operasjonelle funksjonaliteten. Dette logiske diagrammet viser de tre enhetstilstandene og de to sensortilstandene.
Stat 1: Lastestat
Lastestatusen brukes til å la Arduino Mega få data tilbake fra de to sensorene ved oppstart. Enheten vil vise belastning på skjermen, slette alle tallverdiene på skjermen, og lysdiodene på NeoPixel -ringen lyser i en sirkel.
Tilstand 2: Kompassmodus
I denne tilstanden vil enheten fungere som et digitalt kompass. NeoPixel -ringen lyser for å indikere nordretningen med hensyn til orienteringen til enheten. Den sanne enhetsoverskriften vil også vises på LCD -skjermen sammen med enhetens breddegrad og lengdegrad. Det vil også være innenfor denne tilstanden at brukeren vil kunne angi brukeroverskriften som skal vises i tilstand 3.
Stat 3: Overskriftssporingsmodus
I denne tilstanden vil enheten nå hjelpe brukeren med å etablere seg på ønsket kurs. Enheten vil nå vise enhetens retning og brukerens kurs på LCD -skjermen sammen med dataene for breddegrad og lengdegrad. NeoPixel -ringen lyser nå for å indikere brukerens kurs med hensyn til enhetsretning.
Innenfor både tilstand 2 og tilstand 3 er det to sensortilstander, disse sensortilstandene lar enheten trekke data fra sensoren som gir de mest nøyaktige dataene, avhengig av enhetens driftstilstand.
Sensortilstand 1: MPU
Hvis enheten ikke beveger seg, vil kursdata bli trukket fra MPU -en, ettersom det er de mest nøyaktige dataene når enheten ikke beveger seg.
Sensortilstand 2: GPS
Hvis enheten beveger seg, vil kursdataene bli trukket fra GPS -brikken, ettersom det er de mest nøyaktige dataene i denne tilstanden.
Enheten kan når som helst veksle mellom disse til sensortilstander for å ta hensyn til bruksforholdene til enheten endres. Dette er viktig for driften av enheten ettersom begge de to sensorene som brukes i enheten har forhold som påvirker nøyaktigheten av dataene de gir. Når det gjelder MPU, kan brikken lett påvirkes av lokale magnetiske felt forårsaket av biler og metallkonstruksjonsmaterialer i bygninger. Dermed brukes en GPS -brikke som kan gi en mye mer nøyaktig kurs som ikke påvirkes av de samme påvirkningene. GPS -en kan imidlertid bare gi kursdata når du beveger deg, ettersom den beregner kursen ved å endre bredde- og lengdegraddata. Derfor utfyller sjetongene hverandre og gir de mest nøyaktige og pålitelige enhetsfunksjonalitetene ved bruk av de to sensortilstandene.
Trinn 2: Oppsett og ledningsdiagram
Prosjektet bruker og Arduino Mega klonebrett som ligner på brettet ovenfor. Alle komponenter i prosjektet vil bli koblet til dette kortet. Over er detaljerte diagrammer over hvordan du kobler til komponentene for dette prosjektet. Knappene har ikke en detaljert krets, da disse kan settes opp på mange måter. I dette prosjektet bruker de en 100K nedtrekksmotstand og en enkel knapp for å sende et 3 volt signal til den tildelte pinnen.
Trinn 3: Testing av komponenter og grunnleggende kode
Prosjektet vil hente data fra både MPU og GPS -brikken som beskrevet tidligere. Vedlagt er tre koder som muliggjør testing av data fra MPU, GPS og MPU med skjerm for å verifisere funksjonaliteten til delene. Det er viktig å få komponentene i drift på dette stadiet, da koden er separat for hver brikke, og eventuelle problemer kan løses uten frykt for å forårsake uforutsette feil i den endelige koden.
Nødvendige biblioteker:
Adafruit_ILI9341_Albert.h
SPI.h
Adafruit_GFX.h
Adafruit_ILI9341.h
TinyGPS ++. H
Adafruit_NeoPixel.h
MPU9250.h
Alle disse finner du ved å søke i titlene ovenfor. Jeg kommer ikke til å legge ut koblinger, siden det er mange kopier av disse bibliotekene fra flere kilder, og i henhold til fellesskapsstandarden for bare å koble til originaler, lar jeg deg finne disse selv.
Trinn 4: MPU -kalibrering
Overskriften som ble funnet via MPU i stat 2 og stat 3 ble delt opp i fire kvadranter. Dette var nødvendig fordi vår kalibreringsmetode krevde å finne minimum og maksimum størrelser fra magnetometeret langs x- og y -aksene. Dette ble gjort ved å rotere enheten tilfeldig rundt sine tre akser, fri for betydelige andre elektromagnetiske felt enn jordens. Vi tok deretter minimums- og maksimumsverdiene langs x- og y -aksen og koblet dem til en skaleringsligning for å begrense størrelsene mellom verdiene til den negative en og en. I figuren ovenfor er BigX og BigY maksimalverdiene for magnetometerdata langs henholdsvis x- og y-aksen, LittleX og LittleY er minimumsverdiene for magnetometerdata langs henholdsvis x- og y-aksen, IMU.getMagX_uT () og IMU.getMagY_uT () er verdiene som trekkes fra magnetometeret når som helst langs henholdsvis x- og y-aksen, og Mx og My er de nye skalerte verdiene som brukes til å beregne kursen.
Trinn 5: Sluttkode
Det siste trinnet er å lage den endelige koden. Jeg har lagt ved en kopi av prosjektets endelige kode. Det er gjort notater for å hjelpe deg med å navigere i koden. Den største utfordringen med denne delen var å få kvadranter til å fungere riktig. Implementeringen av kvadranter viste seg å være mer kjedelig og logisk-trossende enn vi noen gang kunne ha forutsett. Vi implementerte først en grunnleggende arctan (My/Mx) og konverterte deretter fra radianer til grader, siden Arduino -utganger i radianer som standard. Den eneste kvadranten dette fungerte i var imidlertid fra 90 grader til 180 grader, noe som ga oss en negativ effekt og endte med å bli Quadrant III. Løsningen på dette var å ta den absolutte verdien, siden den fortsatt steget riktig. Denne verdien ble deretter trukket fra 360 for å lyse opp den riktige NeoPixel LED i tilstand 2, og en lignende matematisk operasjon ble brukt i tilstand 3 basert på om overskriften var større eller mindre enn brukerens inngangsoverskrift, som begge kan sees i ovenfor kode. I figurene ovenfor tilsvarer Heading NeoPixel -lyset som vil lyse opp basert på forskjellen mellom enhetsoverskriften og avviket fra nord i tilfelle av tilstand 2, og fra brukerens overskrift. I dette tilfellet tilsvarer 90 til 180 grader kvadrant III. I begge tilfeller får tft.print skjermen til å lese enheten på vei nordfra.
For de tre andre kvadranter førte implementering av arctan (My/Mx) til en inversjon av inkrementering ettersom enheten ble rotert, dvs. at kursvinkelen ville telle ned når den skulle telle opp og omvendt. Løsningen på dette problemet var å snu arctangenten til formen av arctan (Mx/My). Selv om dette løste inkrementeringsinversjonen, ga det ikke den riktige enhetsoverskriften, det var her kvadrantene spilte inn. Den enkle løsningen på dette var å legge til et skift basert på den tilsvarende kvadranten. Dette kan sees i de følgende figurene, som igjen er kodebiter fra del 2 og 3 i hver kvadrant.
Den første if -setningen utføres hvis overskriften beregnet av MPU -ligningen er større enn brukeroverskriften. Under denne betingelsen legges brukerens inndatakurs til enhetsoverskriften og den tilsvarende verdien trekkes fra 360. Hvis ellers -setningen blir utført, trekkes MPU -overskriftsligningen fra brukerens inndatakurs. Disse betingelsene ble implementert for ikke bare å få en nøyaktig verdi for NeoPixel, men for å unngå å oppnå en verdi utenfor det akseptable området, som er fra 0 til 359 grader.
Anbefalt:
Et lite kompass med ATtiny85: 12 trinn (med bilder)
Et lite kompass med ATtiny85: Dette er vårt første prosjekt med ATtiny85; et enkelt lomme digitalt kompass (i samarbeid med J. Arturo Espejel Báez). ATtiny85 er en høy ytelse og lav effekt mikrokontroller. Den har 8 Kbyte programmerbart flashminne. På grunn av dette er chal
Kompass for astronomer: 7 trinn
Kompass for astronomer: Ideen om at jeg liker astronomi og kjøpte nylig et teleskop. For å begynne å observere himmelen fant jeg ut at det ville være nødvendig med et nivåkompass og en tiltmåler for å plassere teleskopet mitt riktig. Jeg kunne gjøre all denne kalibreringen med min mobiltelefon. derimot
Digitalt kompass ved bruk av Arduino og HMC5883L magnetometer: 6 trinn
Digitalt kompass ved bruk av Arduino og HMC5883L magnetometer: Hei folkens, Denne sensoren kan indikere det geografiske nord, sør, øst og vest, vi mennesker kan også bruke det til tider når det er nødvendig. Så. I denne artikkelen la oss prøve å forstå hvordan magnetometersensor fungerer og hvordan du kan koble den til en mikrokontro
Hvordan bruke GY511 -modulen med Arduino [Lag et digitalt kompass]: 11 trinn
Hvordan bruke GY511 -modulen med Arduino [Lag et digitalt kompass]: Oversikt I noen elektronikkprosjekter må vi kjenne den geografiske plasseringen når som helst og utføre en spesifikk operasjon deretter. I denne opplæringen lærer du hvordan du bruker LSM303DLHC GY-511 kompassmodulen med Arduino til å lage en digital kompas
LED -kompass og høydemåler: 7 trinn (med bilder)
LED -kompass og høydemåler: Objekter med lysdioder fascinerer meg alltid. Derfor er dette prosjektet for å kombinere den populære digitale kompasssensoren HMC5883L med 48 lysdioder. Ved å plassere lysdiodene i en sirkel, er lysdioden som lyser retningen du er på vei. Hver 7,5 grader vil dr