Innehållsförteckning:

Digital kompass och Heading Finder: 6 steg
Digital kompass och Heading Finder: 6 steg

Video: Digital kompass och Heading Finder: 6 steg

Video: Digital kompass och Heading Finder: 6 steg
Video: 💦Blackview BV9200 ЧЕСТНЫЙ ОБЗОР ПРОТИВОУДАРНОГО 2024, Juli
Anonim
Digital kompass och Heading Finder
Digital kompass och Heading Finder

Författare:

Cullan Whelan

Andrew Luft

Blake Johnson

Erkännanden:

California Maritime Academy

Evan Chang-Siu

Introduktion:

Grunden för detta projekt är en digital kompass med riktningsspårning. Detta gör det möjligt för användaren att följa en rubrik över långa avstånd med hjälp av en digital apparat. I allmänhet är en kurs en vinkel mätt medurs från norr, som betraktas som noll grader, vilket indikeras av kompassen. Enheten har två huvudfunktioner: den första visar enhetens nuvarande rubrik på en digital displayreferens, och den andra är möjligheten att ange en användar begärd rubrik, som kommer att visas på en ring av lysdioder ovanpå kompasshus. Användaren skulle sedan justera enhetens orientering relaterad till den upplysta lysdioden. När enhetens riktning ändras kommer LED -lampan att gå till mitt -LED, vilket indikerar att rätt kurs har fastställts.

Tillbehör:

- DIYmall 6M GPS -modul

- HiLetgo MPU9250/6500 9-Axis 9 DOF 16 Bit

- Adafruit NeoPixel Ring 16

- MakerFocus 4st 3,7V litium uppladdningsbart batteri

- ELEGOO MEGA 2560 R3 bräda

- Adafruit Mini Lipo w/Mini -B USB Jack - USB LiIon/LiPoly laddare - v1

- 2,8 TFT LCD -skärm med pekskärmsbrytarkort med MicroSD -uttag

Steg 1: Designa projektets funktionalitet

Design av projektets funktionalitet
Design av projektets funktionalitet

Det första steget är att förstå logiken och den slutliga operativa funktionaliteten. Detta logiska diagram visar de tre enhetstillstånden och de två sensortillstånden.

Stat 1: Läser in tillstånd

Laddningstillståndet används för att tillåta Arduino Mega att få tillbaka data från de två sensorerna vid start. Enheten visar laddning på skärmen, rensar alla talvärden på skärmen och lysdioderna på NeoPixel -ringen tänds i en cirkel.

Tillstånd 2: Kompassläge

I detta tillstånd fungerar enheten som en digital kompass. NeoPixel -ringen tänds för att indikera norrriktningen med avseende på enhetens orientering. Den riktiga enhetsrubriken kommer också att visas på LCD -skärmen tillsammans med enhetens latitud och longitud. Det kommer också att vara inom detta tillstånd att användaren kommer att kunna ange användarrubriken som ska visas i tillstånd 3.

Tillstånd 3: Spårningsspårningsläge

I detta tillstånd hjälper enheten nu användaren att etablera sig på önskad kurs. Enheten kommer nu att visa enhetens kurs och användarnas kurs på LCD -skärmen tillsammans med data om latitud och longitud. NeoPixel -ringen tänds nu för att indikera användarnas kurs med avseende på enhetens orientering.

Inom både tillstånd 2 och tillstånd 3 finns det två sensortillstånd. Dessa sensortillstånd tillåter enheten att dra data från sensorn som ger de mest exakta data beroende på enhetens driftstillstånd.

Sensortillstånd 1: MPU

Om enheten inte rör sig kommer kursdata att hämtas från MPU eftersom det är den mest exakta data när enheten inte rör sig.

Sensortillstånd 2: GPS

Om enheten rör sig kommer kursdata att hämtas från GPS -chipet eftersom det är den mest exakta informationen i detta tillstånd.

Enheten kan när som helst växla mellan dessa till sensortillstånd för att ta hänsyn till att användningsförhållandena för enheten ändras. Detta är viktigt för enhetens funktion eftersom båda de två sensorerna som används i enheten har förhållanden som påverkar noggrannheten i de data de tillhandahåller. När det gäller MPU kan chipet enkelt påverkas av lokala magnetiska fält som orsakas av bilar och metallkonstruktionsmaterial i byggnader. Således används ett GPS -chip som kan ge en mycket mer exakt kurs som inte påverkas av samma påverkan. GPS: n kan dock endast tillhandahålla kursdata när den flyttas när den beräknar kursen med hjälp av ändringen i latitud- och longituddata. Därför kompletterar chipsen varandra och genom att använda de två sensortillstånden får du den mest exakta och pålitliga enhetsfunktionen.

Steg 2: Installation och tråddiagram

Installation och tråddiagram
Installation och tråddiagram
Installation och tråddiagram
Installation och tråddiagram
Installation och tråddiagram
Installation och tråddiagram

Projektet använder och Arduino Mega klonkort som liknar styrelsen ovan. Alla komponenter i projektet kommer att anslutas till detta kort. Ovan är detaljerade diagram över hur man kopplar ihop komponenterna för detta projekt. Knapparna har ingen detaljerad krets eftersom dessa kan ställas in på många sätt. I detta projekt använder de ett 100K neddragningsmotstånd och en enkel knapp för att skicka en 3 volt signal till dess tilldelade stift.

Steg 3: Testa komponenter och grundkod

Projektet kommer att hämta data från både MPU och GPS -chip som beskrivits tidigare. Bifogade är tre koder som möjliggör testning av data från MPU, GPS och MPU med skärm för att verifiera delarnas funktionalitet. Det är viktigt att få komponenterna i drift i detta skede eftersom koden är separat för varje chip och eventuella problem kan åtgärdas utan rädsla för att orsaka oförutsedda fel i den slutliga koden.

Obligatoriska bibliotek:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Alla dessa kan hittas genom att söka i titlarna ovan. Jag kommer inte att lägga ut länkar eftersom det finns många kopior av dessa bibliotek från flera källor och som följer gemenskapens standard för att bara länka till original. Jag låter dig hitta dessa själv.

Steg 4: MPU -kalibrering

MPU -kalibrering
MPU -kalibrering

Rubriken som hittades via MPU i del 2 och del 3 delades upp i fyra kvadranter. Detta var nödvändigt eftersom vår kalibreringsmetod krävde att man skulle hitta minsta och högsta magnituden från magnetometern längs dess x- och y -axlar. Detta gjordes genom att enheten slumpmässigt roterade runt dess tre axlar, fria från andra betydande elektromagnetiska fält än jordens. Vi tog sedan minimi- och maxvärdena längs x- och y -axeln och kopplade in dem i en skalningsekvation för att begränsa storleken mellan värdena för negativ en och en. I figuren ovan är BigX och BigY de maximala värdena för magnetometerdata längs x- och y-axeln, LittleX och LittleY är minimivärdena för magnetometerdata längs x- och y-axeln, IMU.getMagX_uT () och IMU.getMagY_uT () är de värden som dras från magnetometern när som helst längs x- och y-axeln, och Mx och My är de nya skalade värdena som används för att beräkna rubriken.

Steg 5: Slutlig kod

Slutlig kod
Slutlig kod
Slutlig kod
Slutlig kod
Slutlig kod
Slutlig kod
Slutlig kod
Slutlig kod

Det sista steget är att skapa den slutliga koden. Jag har bifogat en kopia av projektets slutkod. Inom anteckningar har gjorts för att navigera i koden. Den största utmaningen i detta avsnitt var att få kvadranterna att fungera korrekt. Implementeringen av kvadranter visade sig vara mer tråkig och logiskt trotsande än vi någonsin kunnat förutse. Vi implementerade initialt en grundläggande arctan (My/Mx) och konverterade sedan från radianer till grader, eftersom Arduino matar ut i radianer som standard. Den enda kvadranten som detta fungerade i var dock från 90 grader till 180 grader, vilket gav oss en negativ effekt och slutade med att bli Quadrant III. Lösningen på detta var att ta det absoluta värdet, eftersom det fortfarande ökade korrekt. Detta värde drogs sedan från 360 för att tända den korrekta NeoPixel -lysdioden i tillstånd 2 och en liknande matematisk operation användes i tillstånd 3 baserat på om rubriken var större eller mindre än användarens inmatningsrubrik, som båda kan ses i ovan kod. I ovanstående siffror motsvarar rubriken NeoPixel -lampan som kommer att tändas baserat på skillnaden mellan enhetens kurs och avvikelsen från norr i tillståndet 2 och från användarens rubrik. I detta fall motsvarar 90 till 180 grader Quadrant III. I båda fallen gör tft.print att skärmen läser enheten på väg från norr.

För de tre andra kvadranterna ledde implementering av arctan (My/Mx) till en inversion av inkrementering när enheten roterades, dvs att riktningsvinkeln skulle räkna ner när den skulle räkna upp och vice versa. Lösningen på detta problem var att vända arctangenten till formen av arctan (Mx/My). Även om detta löste inkrementationsinversionen, gav det inte rätt enhetsriktning, det var där kvadranterna kom till spel. Den enkla lösningen på detta var att lägga till ett skift baserat på motsvarande kvadrant. Detta kan ses i följande figurer, som återigen är kodbitar från tillstånd 2 och 3 i varje kvadrant.

Den första if -satsen utförs om rubriken beräknad med MPU -ekvationen är större än användarrubriken. Under detta villkor läggs användarens inmatningsrubrik till enhetsrubriken och motsvarande värde subtraheras från 360. Om annars -satsen utförs, subtraheras MPU -rubrikekvationen från användarens inmatningsrubrik. Dessa villkor implementerades för att inte bara få ett exakt värde för NeoPixel, utan för att undvika att få ett värde utanför det acceptabla intervallet, som är från 0 till 359 grader.

Rekommenderad: