INHOUDSOPGAWE:

Digitale kompas en opskrifzoeker: 6 stappe
Digitale kompas en opskrifzoeker: 6 stappe

Video: Digitale kompas en opskrifzoeker: 6 stappe

Video: Digitale kompas en opskrifzoeker: 6 stappe
Video: Kompas Digital /Altimeter Digital (Review) 2024, Julie
Anonim
Digitale kompas en opskrifzoeker
Digitale kompas en opskrifzoeker

Skrywers:

Cullan Whelan

Andrew Luft

Blake Johnson

Erkennings:

Kalifornië Maritieme Akademie

Evan Chang-Siu

Inleiding:

Die basis van hierdie projek is 'n digitale kompas met koersopsporing. Dit stel die gebruiker in staat om 'n opskrif oor lang afstande te volg met behulp van 'n digitale apparaat. In die volksmond is 'n opskrif 'n hoek wat met die kloksgewys vanuit die noorde gemeet word, wat as nul grade beskou word, soos aangedui deur die kompas. Die toestel het twee hooffunksies: die eerste is die huidige opskrif van die toestel op 'n digitale skermverwysing, en die tweede is die vermoë om 'n opskrif van die gebruiker in te voer, wat op 'n ring LED's bo -aan die kompas behuising. Die gebruiker pas dan die oriëntasie van die toestel aan met die verligte LED. Namate die rigting van die toestel verander word, beweeg die LED na die middelste LED, wat aandui dat die regte koers vasgestel is.

Benodighede:

- DIYmall 6M GPS -module

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

- Adafruit NeoPixel Ring 16

- MakerFocus 4 stuks 3.7V litium herlaaibare battery

- ELEGOO MEGA 2560 R3 Bord

- Adafruit Mini Lipo met Mini -B USB -aansluiting - USB LiIon/LiPoly -laaier - v1

- 2.8 TFT LCD met aanraakskerm -uitbreekbord met MicroSD -aansluiting

Stap 1: Ontwerp die funksionaliteit van die projek

Die ontwerp van die funksionaliteit van die projek
Die ontwerp van die funksionaliteit van die projek

Die eerste stap is om die logika en finale operasionele funksionaliteit te verstaan. Hierdie logika diagram beeld die drie toesteltoestande en die twee sensortoestande uit.

Staat 1: Laai staat

Die laaitoestand word gebruik om die Arduino Mega toe te laat om data van die twee sensors terug te kry by die aanvang. Die toestel sal laai op die skerm vertoon, al die getalwaardes op die skerm skoonmaak, en die LED's op die NeoPixel -ring sal in 'n sirkel brand.

Staat 2: Kompasmodus

In hierdie toestand sal die toestel soos 'n digitale kompas optree. Die NeoPixel -ring sal brand om die rigting van die noorde aan te dui ten opsigte van die oriëntasie van die toestel. Die ware toestelopskrif sal ook saam met die breedtegraad en lengtegraad op die LCD -skerm vertoon word. Dit is ook in hierdie toestand dat die gebruiker die gebruikersopskrif kan invoer wat in staat 3 vertoon moet word.

Staat 3: Opsporingsmodus vir opskrifte

In hierdie toestand sal die toestel die gebruiker nou help om gevestig te raak op die gewenste koers. Die toestel sal nou die opskrif van die toestelle en die gebruikers op die LCD -skerm saam met die breedtegraad- en lengtegraaddata wys. Die NeoPixel -ring sal nou brand om die gebruikers op te dui met betrekking tot die oriëntasie van die toestelle.

Binne Staat 2 en Staat 3 is daar twee sensortoestande, met hierdie sensortoestande kan die toestel data uit die sensor trek wat die mees akkurate data bevat, afhangende van die werkingstoestand van die toestel.

Sensortoestand 1: MPU

As die toestel nie beweeg nie, word die opskrifdata uit die MPU gehaal, aangesien dit die akkuraatste data is as die toestel nie beweeg nie.

Sensortoestand 2: GPS

As die toestel beweeg, word die opskrifdata van die GPS -chip verwyder, aangesien dit die akkuraatste data in hierdie toestand is.

Die toestel kan te eniger tyd tussen hierdie toestelle oorskakel na sensortoestande om die gebruikstoestande van die eenheid te verander. Dit is belangrik vir die werking van die toestel, aangesien albei die twee sensors wat in die toestel gebruik word, toestande het wat die akkuraatheid van die gegewens beïnvloed. In die geval van die MPU kan die chip maklik beïnvloed word deur plaaslike magnetiese velde wat veroorsaak word deur motors en metaalkonstruksiemateriaal in geboue. So word 'n GPS -chip gebruik wat 'n baie meer akkurate koers kan gee wat nie deur dieselfde invloede beïnvloed word nie. Die GPS kan egter slegs koersdata verskaf wanneer dit beweeg, aangesien dit koers bereken deur die verandering in breedtegraad en lengtegraaddata. Daarom vul die skyfies mekaar aan en bied die akkuraatste en betroubaarste funksie van die toestel deur die twee sensortoestande te gebruik.

Stap 2: Opstel en draaddiagram

Opstel en draaddiagram
Opstel en draaddiagram
Opstel en draaddiagram
Opstel en draaddiagram
Opstel en draaddiagram
Opstel en draaddiagram

Die projek gebruik en Arduino Mega kloonbord soortgelyk aan die bord hierbo. Alle komponente in die projek sal aan hierdie bord gekoppel word. Hierbo is gedetailleerde diagramme van hoe om die komponente vir hierdie projek op te dra. Die knoppies het nie 'n gedetailleerde stroombaan nie, aangesien dit op baie maniere opgestel kan word. In hierdie projek gebruik hulle 'n 100K aftrekweerstand en 'n eenvoudige knoppie om 'n 3 volt sein na die toegewezen pen te stuur.

Stap 3: Toets komponente en basiese kode

Die projek haal data uit die MPU- en GPS -skyfie soos vroeër beskryf. Hierby is drie kodes wat die toets van data van die MPU, GPS en MPU met skerm toelaat om die funksionaliteit van die onderdele te verifieer. Dit is belangrik om die komponente in hierdie stadium in werking te stel, aangesien die kode vir elke chip apart is en enige probleme opgelos kan word sonder om te vrees dat hulle onvoorsiene foute in die finale kode kan veroorsaak.

Vereiste biblioteke:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Al hierdie kan gevind word deur die titels hierbo te soek. Ek sal nie skakels plaas nie, aangesien daar baie kopieë van hierdie biblioteke uit verskeie bronne is, en ek voldoen aan die gemeenskapsstandaard om slegs na die oorspronklike te skakel, laat ek u dit self vind.

Stap 4: MPU -kalibrasie

MPU Kalibrasie
MPU Kalibrasie

Die opskrif wat via die MPU in staat 2 en staat 3 gevind is, is in vier kwadrante verdeel. Dit was nodig omdat ons kalibreringsmetode die minimum en maksimum groottes van die magnetometer langs sy x- en y -as moes bepaal. Dit is gedoen deur die toestel willekeurig om sy drie asse te draai, vry van enige beduidende elektromagnetiese velde anders as dié van die aarde. Ons neem dan die minimum en maksimum waardes langs die x- en y -as en plaas dit in 'n skaalvergelyking om die grootte tussen die waardes van negatiewe een en een te beperk. In die figuur hierbo is BigX en BigY die maksimum waardes van magnetometerdata langs die x- en y-as, onderskeidelik, LittleX en LittleY is die minimum waardes van magnetometerdata langs die x- en y-as, onderskeidelik IMU.getMagX_uT () en IMU.getMagY_uT () is die waardes wat te eniger tyd langs die x- en y-as uit die magnetometer getrek word, en Mx en My is die nuwe afgeskaalde waardes wat gebruik word om die opskrif te bereken.

Stap 5: Finale kode

Finale kode
Finale kode
Finale kode
Finale kode
Finale kode
Finale kode
Finale kode
Finale kode

Die laaste stap is om die finale kode te skep. Ek het 'n afskrif van die finale kode van die projek aangeheg. Binne aantekeninge is gemaak om die kode te help navigeer. Die grootste uitdaging van hierdie afdeling was om die kwadrante reg te laat werk. Die implementering van kwadrante was meer vervelig en logies-uitdagend as wat ons ooit kon verwag het. Ons het aanvanklik 'n basiese arctan (My/Mx) geïmplementeer en daarna van radiale na grade omgeskakel, aangesien Arduino standaard in radiale uitsette lewer. Die enigste kwadrant waarin dit gewerk het, was egter van 90 grade tot 180 grade, wat ons 'n negatiewe uitset gegee het en uiteindelik kwadrant III was. Die oplossing hiervoor was om die absolute waarde te neem, aangesien dit steeds korrek toegeneem het. Hierdie waarde is dan van 360 afgetrek om die korrekte NeoPixel LED in toestand 2 te verlig, en 'n soortgelyke wiskundige bewerking is in toestand 3 gebruik, gebaseer op of die opskrif groter of kleiner was as die invoeropskrif van die gebruiker, wat beide in die bogenoemde kode. In die bostaande syfers stem Heading ooreen met die NeoPixel -lig wat aangesteek sal word op grond van die verskil tussen die toestelopskrif en die afwyking van die noorde in die geval van toestand 2 en van die van die gebruikersopskrif. In hierdie geval stem 90 tot 180 grade ooreen met Kwadrant III. In beide gevalle veroorsaak die tft.print dat die skerm die toestel van noord af lees.

Vir die ander drie kwadrante het die implementering van arctan (My/Mx) gelei tot 'n inversie van inkrementasie namate die toestel gedraai word, dit wil sê dat die koershoek aftel wanneer dit moes tel en omgekeerd. Die oplossing vir hierdie probleem was om die arktangens in die vorm van arctan (Mx/My) te verander. Alhoewel dit die inkrementeringsinversie opgelos het, het dit nie die korrekte opskrif van die toestel gegee nie, dit is waar die kwadrante ter sprake gekom het. Die eenvoudige oplossing hiervoor was om 'n verskuiwing op grond van die ooreenstemmende kwadrant by te voeg. Dit kan gesien word in die volgende figure, wat weer stukke kode uit state 2 en 3 van elke kwadrant is.

Die eerste if -stelling word uitgevoer as die opskrif bereken deur die MPU -vergelyking groter is as die gebruikersopskrif. Onder hierdie toestand word die invoeropskrif van die gebruiker by die opskrif van die toestel gevoeg en die ooreenstemmende waarde word afgetrek van 360. As die anders -stelling uitgevoer word, word die MPU -opskrifvergelyking afgetrek van die invoeropskrif van die gebruiker. Hierdie voorwaardes is geïmplementeer om nie net 'n akkurate waarde vir die NeoPixel te kry nie, maar om te verhoed dat 'n waarde buite die aanvaarbare omvang, van 0 tot 359 grade, verkry word.

Aanbeveel: