Indholdsfortegnelse:

Digitalt kompas og Heading Finder: 6 trin
Digitalt kompas og Heading Finder: 6 trin

Video: Digitalt kompas og Heading Finder: 6 trin

Video: Digitalt kompas og Heading Finder: 6 trin
Video: 💦Blackview BV9200 ЧЕСТНЫЙ ОБЗОР ПРОТИВОУДАРНОГО 2024, Juli
Anonim
Digitalt kompas og Heading Finder
Digitalt kompas og Heading Finder

Forfattere:

Cullan Whelan

Andrew Luft

Blake Johnson

Anerkendelser:

California Maritime Academy

Evan Chang-Siu

Introduktion:

Grundlaget for dette projekt er et digitalt kompas med overskriftssporing. Dette gør det muligt for brugeren at følge en overskrift over lange afstande ved hjælp af et digitalt apparat. I daglig tale er en kurs en vinkel målt med uret fra nord, der betragtes som nul grader, som angivet af kompasset. Enheden har to hovedfunktioner: den første viser enhedens aktuelle overskrift på en digital displayreference, og den anden er muligheden for at indtaste en brugeranmodet overskrift, som vil blive vist på en ring med LED'er øverst på kompas hus. Brugeren ville derefter justere enhedens orientering relateret til den oplyste LED. Efterhånden som apparatets retning ændres, vil LED'en bevæge sig til midter -LED'en, hvilket indikerer, at den korrekte kurs er etableret.

Tilbehør:

- DIYmall 6M GPS -modul

- HiLetgo MPU9250/6500 9-akse 9 DOF 16 bit

- Adafruit NeoPixel Ring 16

- MakerFocus 4 stk. 3,7V lithium genopladeligt batteri

- ELEGOO MEGA 2560 R3 Board

- Adafruit Mini Lipo m/Mini -B USB -stik - USB LiIon/LiPoly oplader - v1

- 2,8 TFT LCD med Touchscreen Breakout Board m/MicroSD -stik

Trin 1: Design af projektets funktionalitet

Design af projektets funktionalitet
Design af projektets funktionalitet

Det første trin er at forstå logikken og den endelige operationelle funktionalitet. Dette logiske diagram viser de tre enhedstilstande og de to sensortilstande.

Stat 1: Indlæser stat

Indlæsningstilstanden bruges til at give Arduino Mega mulighed for at få data tilbage fra de to sensorer ved opstart. Enheden viser indlæsning på skærmen, sletter alle talværdierne på skærmen, og lysdioderne på NeoPixel -ringen lyser i en cirkel.

Tilstand 2: Kompasstilstand

I denne tilstand vil enheden fungere som et digitalt kompas. NeoPixel -ringen lyser for at angive nordretningen i forhold til enhedens orientering. Den sande enhedsoverskrift vil også blive vist på LCD -skærmen sammen med enhedens breddegrad og længdegrad. Det vil også være inden for denne tilstand, at brugeren vil kunne indtaste den brugeroverskrift, der skal vises i tilstand 3.

Tilstand 3: Overskriftssporingstilstand

I denne tilstand hjælper enheden nu brugeren med at blive etableret på den ønskede kurs. Enheden vil nu vise enhedsoverskriften og brugernes kurs på LCD -skærmen sammen med data om breddegrad og længdegrad. NeoPixel -ringen lyser nu for at angive brugerens kurs i forhold til enhedsretningen.

Inden for både tilstand 2 og tilstand 3 er der to sensortilstande, disse sensortilstande tillader enheden at trække data fra sensoren, der giver de mest nøjagtige data afhængigt af enhedens driftstilstand.

Sensortilstand 1: MPU

Hvis enheden ikke bevæger sig, trækkes kursdataene fra MPU'en, da det er de mest nøjagtige data, når enheden ikke bevæger sig.

Sensortilstand 2: GPS

Hvis enheden bevæger sig, trækkes kursdataene fra GPS -chippen, da det er de mest nøjagtige data i denne tilstand.

Enheden kan til enhver tid skifte mellem disse til sensortilstande for at tage højde for, at enhedens brugsbetingelser ændres. Dette er vigtigt for enhedens funktion, da begge de to sensorer, der bruges i enheden, har betingelser, der påvirker nøjagtigheden af de data, de leverer. I tilfælde af MPU'en kan chippen let påvirkes af lokale magnetfelter forårsaget af biler og metalkonstruktionsmaterialer i bygninger. Således bruges en GPS -chip, der kan give en meget mere præcis kurs, der ikke påvirkes af de samme påvirkninger. GPS'en kan dog kun levere kursdata, når den bevæger sig, da den beregner kursen ved hjælp af ændringen i breddegrad og længdegrad. Derfor supplerer chipsene hinanden og giver ved hjælp af de to sensortilstande den mest nøjagtige og pålidelige enhedsfunktionalitet.

Trin 2: Opsætning og ledningsdiagram

Opsætning og ledningsdiagram
Opsætning og ledningsdiagram
Opsætning og ledningsdiagram
Opsætning og ledningsdiagram
Opsætning og ledningsdiagram
Opsætning og ledningsdiagram

Projektet anvender og Arduino Mega klonbræt svarende til tavlen ovenfor. Alle komponenter i projektet vil blive forbundet til dette kort. Ovenfor er detaljerede diagrammer over, hvordan komponenterne til dette projekt forbindes. Knapperne har ikke et detaljeret kredsløb, da disse kan konfigureres på mange måder. I dette projekt bruger de en 100K pull down -modstand og en simpel knap til at sende et 3 volt signal til den tildelte pin.

Trin 3: Test af komponenter og grundlæggende kode

Projektet vil trække data fra både MPU- og GPS -chippen som beskrevet tidligere. Vedhæftet er tre koder, der muliggør test af data fra MPU, GPS og MPU med skærm for at verificere funktionaliteten af delene. Det er vigtigt at få komponenterne til at fungere i denne fase, da koden er separat for hver chip, og eventuelle problemer kan løses uden frygt for at forårsage uforudsete fejl i den endelige kode.

Påkrævede biblioteker:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Alle disse kan findes ved at søge i titlerne ovenfor. Jeg sender ikke links, da der er mange kopier af disse biblioteker fra flere kilder og overholder fællesskabsstandarden for kun at linke til originaler, jeg lader dig finde disse selv.

Trin 4: MPU -kalibrering

MPU kalibrering
MPU kalibrering

Overskriften fundet via MPU i stat 2 og stat 3 blev delt op i fire kvadranter. Dette var nødvendigt, fordi vores kalibreringsmetode krævede at finde den mindste og maksimale størrelse fra magnetometeret langs dens x- og y -akser. Dette blev gjort ved at dreje enheden tilfældigt om dens tre akser, fri for andre betydelige elektromagnetiske felter end Jordens. Vi tog derefter minimums- og maksimumværdierne langs x- og y -aksen og tilsluttede dem en skaleringsligning for at begrænse størrelserne mellem værdierne for den negative en og en. I ovenstående figur er BigX og BigY de maksimale værdier for magnetometerdata langs henholdsvis x- og y-aksen, LittleX og LittleY er minimumsværdierne for magnetometerdata langs henholdsvis x- og y-aksen, IMU.getMagX_uT () og IMU.getMagY_uT () er de værdier, der til enhver tid trækkes fra magnetometeret langs henholdsvis x- og y-aksen, og Mx og My er de nye skalerede værdier, der bruges til at beregne kursen.

Trin 5: Endelig kode

Endelig kode
Endelig kode
Endelig kode
Endelig kode
Endelig kode
Endelig kode
Endelig kode
Endelig kode

Det sidste trin er at oprette den sidste kode. Jeg har vedlagt en kopi af projektets endelige kode. Inden for er der blevet noteret for at hjælpe med at navigere i koden. Den største udfordring i dette afsnit var at få kvadranterne til at fungere korrekt. Implementeringen af kvadranter viste sig at være mere kedelig og logisk trodsig, end vi nogensinde kunne have forventet. Vi implementerede oprindeligt en grundlæggende arctan (My/Mx) og konverterede derefter fra radianer til grader, da Arduino -output i radianer som standard. Den eneste kvadrant dette arbejdede i var imidlertid fra 90 grader til 180 grader, hvilket gav os et negativt output og endte med at blive Quadrant III. Løsningen på dette var at tage den absolutte værdi, da den stadig steget korrekt. Denne værdi blev derefter trukket fra 360 for at tænde den korrekte NeoPixel LED i tilstand 2, og en lignende matematisk operation blev brugt i tilstand 3 baseret på, om overskriften var større eller mindre end brugerens inputoverskrift, som begge kan ses i ovenstående kode. I ovenstående figurer svarer Heading til NeoPixel -lyset, der vil blive tændt baseret på forskellen mellem enhedens overskrift og afvigelsen fra nord i tilfælde af tilstand 2 og fra brugerens overskrift. I dette tilfælde svarer 90 til 180 grader til kvadrant III. I begge tilfælde får tft.print skærmen til at læse enheden fra nord.

For de tre andre kvadranter førte implementering af arctan (My/Mx) til en inversion af inkrementering, da enheden blev drejet, dvs. kursens vinkel ville tælle ned, når den skulle tælle op og omvendt. Løsningen på dette problem var at vende arctangenten til formen af arctan (Mx/My). Selvom dette løste inkrementationsinversionen, gav det ikke den korrekte enhedsretning, og det var her kvadranterne kom i spil. Den enkle løsning på dette var at tilføje et skift baseret på den tilsvarende kvadrant. Dette kan ses i de følgende figurer, som igen er kodestykker fra tilstand 2 og 3 i hver kvadrant.

Den første if -sætning udføres, hvis overskriften beregnet af MPU -ligningen er større end brugeroverskriften. Under denne betingelse tilføjes brugerens inputoverskrift til enhedsoverskriften, og den tilsvarende værdi trækkes fra 360. Hvis ellers -sætningen udføres, trækkes MPU -overskriftsligningen fra brugerens input -overskrift. Disse betingelser blev implementeret for ikke kun at få en nøjagtig værdi for NeoPixel, men for at undgå at opnå en værdi uden for det acceptable område, som er fra 0 til 359 grader.

Anbefalede: