Sadržaj:

Digitalni kompas i tražilica smjera: 6 koraka
Digitalni kompas i tražilica smjera: 6 koraka

Video: Digitalni kompas i tražilica smjera: 6 koraka

Video: Digitalni kompas i tražilica smjera: 6 koraka
Video: Sramotan ples 2024, Srpanj
Anonim
Digitalni kompas i tražilica smjera
Digitalni kompas i tražilica smjera

Autori:

Cullan Whelan

Andrew Luft

Blake Johnson

Zahvalnice:

Kalifornijska pomorska akademija

Evan Chang-Siu

Uvod:

Temelj ovog projekta je digitalni kompas s praćenjem smjera. To omogućuje korisniku da prati smjer na velike udaljenosti pomoću digitalnog aparata. Kolokvijalno, kurs je kut mjeren u smjeru kazaljke na satu od sjevera, koji se smatra nula stupnjeva, kako pokazuje kompas. Uređaj ima dvije glavne funkcije: prva je prikaz trenutnog zaglavlja uređaja na referenci digitalnog zaslona, a druga je mogućnost unosa naslova koji je zatražio korisnik, a koji će biti prikazan na prstenu LED dioda na vrhu kućište kompasa. Korisnik bi zatim prilagodio orijentaciju uređaja u odnosu na osvijetljenu LED diodu. Kako se smjer uređaja mijenja, LED će putovati prema središnjoj LED, što znači da je uspostavljen ispravan smjer.

Pribor:

- DIYmall 6M GPS modul

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

- Adapruit NeoPixel prsten 16

- MakerFocus 4 kom 3,7 V litijeva punjiva baterija

- ploča ELEGOO MEGA 2560 R3

- Adafruit Mini Lipo s mini -B USB priključkom - USB LiIon/LiPoly punjač - v1

- 2.8 TFT LCD s pločom osjetljivom na dodir s utičnicom za MicroSD

Korak 1: Osmišljavanje funkcionalnosti projekta

Osmišljavanje funkcionalnosti projekta
Osmišljavanje funkcionalnosti projekta

Prvi korak je razumijevanje logike i konačne operativne funkcionalnosti. Ovaj logički dijagram prikazuje tri stanja uređaja i dva stanja senzora.

Stanje 1: Stanje utovara

Stanje učitavanja koristi se kako bi omogućilo Arduinu Megi da vrati podatke s dva senzora nakon pokretanja. Uređaj će prikazati opterećenje na zaslonu, izbrisati sve vrijednosti broja na zaslonu, a LED diode na prstenu NeoPixel će svijetliti u krug.

Stanje 2: Način rada kompasa

U tom stanju uređaj će se ponašati kao digitalni kompas. Prsten NeoPixel će zasvijetliti kako bi označio smjer sjevera s obzirom na orijentaciju uređaja. Pravi naslov uređaja također će biti prikazan na LCD zaslonu zajedno s geografskom širinom i dužinom uređaja. Također će unutar tog stanja korisnik moći unijeti korisnički naslov koji će se prikazati u stanju 3.

Stanje 3: Način praćenja zaglavlja

U ovom stanju uređaj će sada pomoći korisniku da se prilagodi željenom naslovu. Uređaj će sada prikazati naslov uređaja i korisnike na LCD zaslonu zajedno s podacima o zemljopisnoj širini i dužini. NeoPixel prsten sada će zasvijetliti kako bi označio korisnike koji se kreću s obzirom na orijentaciju uređaja.

Unutar stanja 2 i stanja 3 postoje dva stanja senzora koja omogućuju uređaju da izvuče podatke sa senzora koji pružaju najtočnije podatke ovisno o radnom stanju uređaja.

Stanje senzora 1: MPU

Ako se uređaj ne pomiče, podaci o smjeru bit će izvučeni iz MPU -a jer su to najprecizniji podaci kada se uređaj ne pomiče.

Stanje senzora 2: GPS

Ako se uređaj kreće, podaci o smjeru bit će izvučeni iz GPS čipa jer su to najtočniji podaci u ovom stanju.

Uređaj se u bilo kojem trenutku može prebaciti iz stanja u stanje senzora kako bi se uzeli u obzir uvjeti korištenja jedinice. To je važno za rad uređaja jer oba senzora koji se koriste u uređaju imaju uvjete koji utječu na točnost podataka koje pružaju. U slučaju MPU -a, na čip može lako utjecati lokalno magnetsko polje uzrokovano automobilima i metalnim građevinskim materijalima u zgradama. Tako se koristi GPS čip koji može pružiti mnogo točniji kurs na koji ne utječu isti utjecaji. Međutim, GPS može pružiti podatke o smjeru samo tijekom kretanja jer izračunava smjer koristeći promjenu podataka o zemljopisnoj širini i dužini. Stoga se čipovi međusobno nadopunjuju i pomoću dva stanja senzora pružaju najprecizniju i najpouzdaniju funkcionalnost uređaja.

Korak 2: Postavljanje i dijagram žice

Postavljanje i dijagram žice
Postavljanje i dijagram žice
Postavljanje i dijagram žice
Postavljanje i dijagram žice
Postavljanje i dijagram žice
Postavljanje i dijagram žice

Projekt koristi i Arduino Mega klon ploču sličnu gornjoj ploči. Sve komponente u projektu bit će spojene na ovu ploču. Gore su detaljni dijagrami kako spojiti komponente za ovaj projekt. Gumbi nemaju detaljan sklop jer se mogu postaviti na mnogo načina. U ovom projektu koriste otpornik za spuštanje od 100K i jednostavan gumb za slanje signala od 3 V na dodijeljeni pin.

Korak 3: Testiranje komponenti i osnovnog koda

Projekt će izvlačiti podatke iz MPU -a i GPS -čipa kako je ranije opisano. U prilogu su tri koda koji omogućuju testiranje podataka iz MPU -a, GPS -a i MPU -a sa zaslonom za provjeru funkcionalnosti dijelova. U ovoj je fazi važno aktivirati komponente jer je kôd zaseban za svaki čip i sva se pitanja mogu riješiti bez straha da će izazvati nepredviđene pogreške u konačnom kodu.

Potrebne knjižnice:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Sve se to može pronaći pretraživanjem gore navedenih naslova. Neću objavljivati veze jer postoji mnogo kopija ovih knjižnica iz više izvora i pridržavajući se standarda zajednice koji se odnosi samo na izvornike, dopustit ću vam da ih sami pronađete.

Korak 4: Kalibracija MPU -a

MPU kalibracija
MPU kalibracija

Naslov pronađen putem MPU -a u državi 2 i državi 3 podijeljen je u četiri kvadranta. To je bilo potrebno jer je naša metoda kalibracije zahtijevala pronalaženje minimalne i maksimalne veličine iz magnetometra duž njegovih osi x i y. To je učinjeno slučajnim rotiranjem uređaja oko njegove tri osi, bez ikakvih značajnijih elektromagnetskih polja osim onog na Zemlji. Zatim smo uzeli minimalne i maksimalne vrijednosti duž osi x i y i uključili ih u jednadžbu skaliranja kako bismo ograničili veličine između vrijednosti negativnih jedan i jedan. Na gornjoj slici BigX i BigY su maksimalne vrijednosti podataka magnetometra duž osi x i y, LittleX i LittleY su minimalne vrijednosti podataka magnetometra duž osi x i y, IMU.getMagX_uT () i IMU.getMagY_uT () su vrijednosti izvučene s magnetometra u bilo kojem trenutku duž osi x i y, a Mx i My su nove skalirane vrijednosti koje se koriste za izračun naslova.

Korak 5: Završni kod

Završni kod
Završni kod
Završni kod
Završni kod
Završni kod
Završni kod
Završni kod
Završni kod

Posljednji korak je stvaranje konačnog koda. Priložio sam kopiju završnog koda projekata. Unutar bilješki napravljene su informacije za lakše snalaženje u kodu. Najveći izazov u ovom odjeljku bio je pravilni rad kvadranata. Provedba kvadranata pokazala se dosadnijom i logički prkosnijom nego što smo mogli pretpostaviti. U početku smo implementirali osnovni arktan (My/Mx), a zatim smo ga pretvorili iz radijana u stupnjeve, budući da Arduino prema zadanim postavkama daje radijane. Međutim, jedini kvadrant u kojem je ovo radilo bio je od 90 stupnjeva do 180 stupnjeva, što nam je dalo negativan izlaz i na kraju je bilo kvadrant III. Rješenje za to je uzimalo apsolutnu vrijednost, budući da se i dalje ispravno povećavalo. Ta je vrijednost zatim oduzeta od 360 kako bi se upalila ispravna LED dioda NeoPixel u stanju 2, a slična matematička operacija korištena je u stanju 3 na temelju toga je li naslov bio veći ili manji od korisničkog unosa, oboje se može vidjeti u iznad koda. Na gornjim slikama Naslov odgovara NeoPixel svjetlu koje će se upaliti na temelju razlike između zaglavlja uređaja i odstupanja od sjevera u slučaju stanja 2 i od onog zaglavlja korisnika. U ovom slučaju, 90 do 180 stupnjeva odgovara kvadrantu III. U oba slučaja, tft.print uzrokuje da zaslon čita uređaj sa sjevera.

Za ostala tri kvadranta, implementacija arktana (My/Mx) dovela je do inverzije inkrementacije dok se uređaj okretao, tj. Kut zaglavlja odbrojavao bi se kada je trebao odbrojavati i obrnuto. Rješenje ovog problema bilo je okretanje arktangense u oblik arktana (Mx/My). Iako je ovo riješilo inverziju inkrementacije, ono nije dalo pravilan zaglavlje uređaja, što je mjesto na koje su kvadranti došli u igru. Jednostavno rješenje ovoga bilo je dodavanje pomaka na temelju odgovarajućeg kvadranta. To se može vidjeti na sljedećim slikama, koje su opet komadi koda iz država 2 i 3 svakog kvadranta.

Prva naredba if izvodi se ako je naslov izračunat jednadžbom MPU -a veći od korisničkog naslova. Pod ovim uvjetom, korisnički ulazni zaglavlje dodaje se zaglavlju uređaja i odgovarajuća vrijednost se oduzima od 360. Ako se izvrši naredba else, jednadžba zaglavlja MPU -a oduzima se od korisnikovog ulaznog naslova. Ti su uvjeti provedeni kako bi se dobila ne samo točna vrijednost za NeoPixel, već i izbjeglo dobivanje vrijednosti izvan prihvatljivog raspona, koji je od 0 do 359 stupnjeva.

Preporučeni: