Innehållsförteckning:
- Steg 1: Designa projektets funktionalitet
- Steg 2: Installation och tråddiagram
- Steg 3: Testa komponenter och grundkod
- Steg 4: MPU -kalibrering
- Steg 5: Slutlig kod
Video: Digital kompass och Heading Finder: 6 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:36
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
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
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
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
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:
Hur man skapar och infogar en tabell och lägger till ytterligare kolumner och/eller rader till den tabellen i Microsoft Office Word 2007: 11 steg
Hur man skapar och infogar en tabell och lägger till ytterligare kolumner och/eller rader till den tabellen i Microsoft Office Word 2007: Har du någonsin haft mycket data du arbetar med och tänkt för dig själv … " hur kan jag göra allt av dessa data ser bättre ut och blir lättare att förstå? " Om så är fallet kan en tabell i Microsoft Office Word 2007 vara ditt svar
Ansluter bearbetning och Arduino och gör 7 segment och servo GUI -kontroller: 4 steg
Ansluta bearbetning och Arduino och göra 7 segment och servo GUI -kontroller: För vissa projekt måste du använda Arduino eftersom det ger en enkel prototypplattform men visning av grafik i seriell bildskärm av Arduino kan ta ganska lång tid och är till och med svårt att göra. Du kan visa grafer på Arduino Serial Monitor
Digital kompass med Arduino och HMC5883L magnetometer: 6 steg
Digital kompass med hjälp av Arduino och HMC5883L Magnetometer: Hej killar, Denna sensor kan indikera det geografiska norr, söder, öst och väst, vi människor kan också använda den ibland när det behövs. Så. I den här artikeln låt oss försöka förstå hur magnetometersensorn fungerar och hur den ska kopplas till en mikrokontro
Hur man använder GY511 -modulen med Arduino [Gör en digital kompass]: 11 steg
Hur man använder GY511 -modulen med Arduino [Gör en digital kompass]: Översikt I vissa elektronikprojekt måste vi veta den geografiska platsen när som helst och utföra en specifik åtgärd i enlighet därmed. I den här självstudien lär du dig hur du använder kompassmodulen LSM303DLHC GY-511 med Arduino för att göra en digital kompass
LED -kompass och höjdmätare: 7 steg (med bilder)
LED -kompass och höjdmätare: Objekt med lysdioder fascinerar mig alltid. Därför är detta projekt att kombinera den populära digitala kompassensorn HMC5883L med 48 lysdioder. Genom att placera lysdioderna i en cirkel är lysdioden som belyser den riktning du är på väg. Var 7,5 grader drar