Indholdsfortegnelse:
- Trin 1: Design af projektets funktionalitet
- Trin 2: Opsætning og ledningsdiagram
- Trin 3: Test af komponenter og grundlæggende kode
- Trin 4: MPU -kalibrering
- Trin 5: Endelig kode
Video: Digitalt kompas og Heading Finder: 6 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:25
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
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
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
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
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:
GranDow - Enkelt flersproget digitalt ur: 4 trin
GranDow - Enkelt flersproget digitalt ur: Min bedstemor glemmer hele tiden ugedagen for sine piller. Desværre er alle digitale ure, jeg kan finde, der viser ugedagen, på engelsk. Dette enkle projekt med kun 3 komponenter er billigt, let at bygge, og jeg håber, det vil
Føj et digitalt display til en gammel kommunikationsmodtager: 6 trin (med billeder)
Føj et digitalt display til en gammel kommunikationsmodtager: En af manglerne ved at bruge et ældre kommunikationsudstyr er, at den analoge urskive ikke er særlig præcis. Du gætter altid på den frekvens, du modtager. I AM- eller FM -båndene er dette generelt ikke et problem, fordi du normalt
Sådan laver du et analogt ur og digitalt ur med LED -strip ved hjælp af Arduino: 3 trin
Sådan laver du et analogt ur og et digitalt ur med LED -strip ved hjælp af Arduino: I dag laver vi et analogt ur & Digitalt ur med Led Strip og MAX7219 Dot -modul med Arduino. Det vil rette tiden med den lokale tidszone. Det analoge ur kan bruge en længere LED -strimmel, så det kan hænges på væggen for at blive en kunstværker
Digitalt kompas ved hjælp af Arduino og HMC5883L magnetometer: 6 trin
Digitalt kompas ved hjælp af Arduino og HMC5883L Magnetometer: Hej fyre, Denne sensor kan indikere det geografiske nord, syd, øst og vest, vi mennesker kunne også bruge det til tider, når det er nødvendigt. Så. I denne artikel lad os prøve at forstå, hvordan Magnetometersensor fungerer, og hvordan den kan kobles til en mikrokontro
Sådan bruges GY511 -modulet med Arduino [Lav et digitalt kompas]: 11 trin
Sådan bruges GY511 -modulet med Arduino [Lav et digitalt kompas]: Oversigt I nogle elektronikprojekter skal vi til enhver tid kende den geografiske placering og udføre en specifik operation i overensstemmelse hermed. I denne vejledning lærer du, hvordan du bruger LSM303DLHC GY-511 kompasmodulet med Arduino til at lave en digital kompas