Sadržaj:

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

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

Video: Digitalni kompas i tražilo smjera: 6 koraka
Video: ? Što je višepojasno 6 atomsko odbrojavanje vremena ? Top 7 višepojasni 6 G modeli Shock Wa 2024, Juli
Anonim
Digitalni kompas i tražilo smjera
Digitalni kompas i tražilo smjera

Autori:

Cullan Whelan

Andrew Luft

Blake Johnson

Zahvalnice:

Kalifornijska pomorska akademija

Evan Chang-Siu

Uvod:

Osnova ovog projekta je digitalni kompas s praćenjem smjera. Ovo omogućava 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 nulom stepeni, 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 traži 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 dioda će putovati prema središnjoj LED, što znači da je uspostavljen ispravan smjer.

Potrošni materijal:

- DIYmall 6M GPS modul

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

- Adafruit NeoPixel prsten 16

- MakerFocus 4 kom 3,7 V litijumska punjiva baterija

- ELEGOO MEGA 2560 R3 ploča

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

- 2.8 TFT LCD sa pločom za ekran osetljivu na dodir sa MicroSD utičnicom

Korak 1: Osmišljavanje funkcionalnosti projekta

Dizajniranje funkcionalnosti projekta
Dizajniranje 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 učitavanja

Stanje učitavanja se koristi za omogućavanje Arduino Mega -i da vrati podatke s dva senzora pri pokretanju. Uređaj će prikazati opterećenje na ekranu, obrisati sve vrijednosti broja na ekranu, a LED diode na NeoPixel prstenu će svijetliti u krug.

Stanje 2: Način rada kompasa

U ovom stanju uređaj će se ponašati kao digitalni kompas. NeoPixel prsten će zasvijetliti kako bi pokazao smjer sjevera s obzirom na orijentaciju uređaja. Pravi zaglavlje uređaja također će biti prikazano na LCD ekranu zajedno sa zemljopisnom širinom i dužinom uređaja. Unutar ovog stanja bit će i mogućnost da korisnik može 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 postavi na željeni naslov. Uređaj će sada prikazati naslov uređaja i korisnike na LCD ekranu zajedno s podacima o zemljopisnoj širini i dužini. NeoPixel prsten sada će zasvijetliti kako bi označio kretanje korisnika 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 najtačnije podatke ovisno o radnom stanju uređaja.

Stanje senzora 1: MPU

Ako se uređaj ne kreće, podaci o smjeru će se izvući 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 će se izvući iz GPS čipa jer su to najtačniji podaci u ovom stanju.

Uređaj se u svakom trenutku može prebaciti između ovih stanja senzora kako bi uzeo u obzir promjene u načinu korištenja jedinice. Ovo je važno za rad uređaja jer oba senzora koji se koriste u uređaju imaju uslove koji utiču na tač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. Stoga se koristi GPS čip koji može pružiti mnogo precizniji kurs na koji ne utječu isti utjecaji. Međutim, GPS može pružiti podatke o smjeru samo pri kretanju jer izračunava kurs koristeći promjenu podataka o zemljopisnoj širini i dužini. Stoga se čipovi međusobno nadopunjuju i korištenjem dva stanja senzora pružaju najpreciznije i najpouzdanije funkcionalnosti 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

U projektu se koristi i Arduino Mega klonirana ploča slična gornjoj ploči. Sve komponente u projektu bit će spojene na ovu ploču. Gore su detaljni dijagrami kako spojiti komponente za ovaj projekt. Dugmad nemaju detaljno kolo jer se mogu postaviti na mnogo načina. U ovom projektu koriste otpornik za spuštanje od 100K i jednostavno dugme za slanje signala od 3 V na dodijeljeni pin.

Korak 3: Testiranje komponenti i osnovnog koda

Projekat će izvlačiti podatke i iz MPU -a i iz 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. Važno je da komponente budu operativne u ovoj fazi jer je kôd zaseban za svaki čip i sva pitanja se mogu riješiti bez straha da će izazvati nepredviđene greške u konačnom kodu.

Potrebne biblioteke:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Sve ovo možete pronaći pretraživanjem gore navedenih naslova. Neću objavljivati veze jer postoji mnogo kopija ovih biblioteka iz više izvora i pridržavajući se standarda zajednice koji se odnosi samo na originale, 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 rotiranjem uređaja nasumično 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 iz magnetometra u bilo kojem trenutku duž osi x i y, a Mx i My su nove skalirane vrijednosti koje se koriste za izračunavanje naslova.

Korak 5: Završni kod

Final Code
Final Code
Final Code
Final Code
Final Code
Final Code
Final Code
Final Code

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 ovog odjeljka bio je pravilni rad kvadranata. Implementacija kvadranata pokazala se dosadnijom i logički prkosnijom nego što smo mogli očekivati. U početku smo implementirali osnovni arktan (My/Mx), a zatim smo ga pretvorili iz radijana u stepene, budući da Arduino prema zadanim postavkama daje radijane. Međutim, jedini kvadrant u kojem je ovo radilo bio je od 90 stepeni do 180 stepeni, što nam je dalo negativan izlaz i na kraju je bilo kvadrant III. Rješenje za to bilo je uzimanje apsolutne vrijednosti, budući da se i dalje pravilno povećavalo. Ova vrijednost je zatim oduzeta od 360 kako bi se upalila ispravna NeoPixel LED dioda 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 osnovu 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 stepeni odgovara kvadrantu III. U oba slučaja, tft.print uzrokuje da ekran čita uređaj sa sjevera.

Za ostala tri kvadranta, implementacija arctana (My/Mx) dovela je do inverzije inkrementacije dok se uređaj rotirao, tj. Kut zaglavlja bi se odbrojavao kada je trebalo odbrojavati i obrnuto. Rješenje ovog problema bilo je preokretanje arktangense u oblik arktana (Mx/My). Iako je ovo riješilo inverziju inkrementacije, ono nije dalo pravilan zaglavlje uređaja, što je mjesto gdje su se pojavili kvadranti. Jednostavno rješenje za ovo bilo je dodavanje pomaka na osnovu 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 unos se dodaje naslovu uređaja i odgovarajuća vrijednost se oduzima od 360. Ako se izvrši naredba else, jednadžba naslova MPU -a oduzima se od korisnikovog unosa. Ovi uvjeti su implementirani 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 stepeni.

Preporučuje se: