Kazalo:

Digitalni kompas in iskalnik smeri: 6 korakov
Digitalni kompas in iskalnik smeri: 6 korakov

Video: Digitalni kompas in iskalnik smeri: 6 korakov

Video: Digitalni kompas in iskalnik smeri: 6 korakov
Video: ? Что такое многополосный 6 атомный хронометраж ? То 2024, Julij
Anonim
Digitalni kompas in iskalnik smeri
Digitalni kompas in iskalnik smeri

Avtorji:

Cullan Whelan

Andrew Luft

Blake Johnson

Zahvala:

Kalifornijska pomorska akademija

Evan Chang-Siu

Uvod:

Osnova tega projekta je digitalni kompas s sledenjem smeri. To uporabniku omogoča, da z digitalnim aparatom sledi smeri na dolge razdalje. Pogovorno je naslov kot, izmerjen v smeri urinega kazalca od severa, ki se šteje za nič stopinj, kot kaže kompas. Naprava ima dve glavni funkciji: prva prikazuje trenutni naslov naprave na sklicu digitalnega zaslona, druga pa je možnost vnosa naslova, ki ga zahteva uporabnik, ki bo prikazan na obroču LED na vrhu zaslona ohišje kompasa. Uporabnik bi nato prilagodil usmerjenost naprave glede na osvetljeno LED. Ko se smer naprave spremeni, bo LED potovala do osrednje LED, kar pomeni, da je vzpostavljen pravilen naslov.

Zaloge:

- DIYmall 6M GPS modul

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

- Adafruit NeoPixel prstan 16

- 3.7V litijeva polnilna baterija MakerFocus 4 kosov

- deska ELEGOO MEGA 2560 R3

- Adafruit Mini Lipo w/Mini -B USB priključek - USB LiIon/LiPoly polnilec - v1

- 2,8 -palčni TFT LCD zaslon z zaslonom na dotik z vtičnico za microSD

1. korak: Oblikovanje funkcionalnosti projekta

Oblikovanje funkcionalnosti projekta
Oblikovanje funkcionalnosti projekta

Prvi korak je razumevanje logike in končne operativne funkcionalnosti. Ta logični diagram prikazuje tri stanja naprave in dva stanja senzorja.

Stanje 1: Stanje nalaganja

Stanje nalaganja se uporablja za omogočanje, da Arduino Mega ob zagonu pridobi podatke iz obeh senzorjev. Naprava bo na zaslonu prikazala obremenitev, počistila vse številčne vrednosti na zaslonu, LED na obroču NeoPixel pa bodo zasvetile v krogu.

Stanje 2: Način kompasa

V tem stanju bo naprava delovala kot digitalni kompas. Obroč NeoPixel bo zasvetil in pokazal smer severa glede na orientacijo naprave. Pravi naslov naprave bo prikazan tudi na LCD zaslonu skupaj z zemljepisno širino in dolžino naprave. V tem stanju bo tudi uporabnik lahko vnesel naslov uporabnika, ki bo prikazan v stanju 3.

Stanje 3: Način sledenja smeri

V tem stanju bo naprava zdaj pomagala uporabniku, da se ustali na želenem naslovu. Naprava bo zdaj prikazala naslov naprav in naslov uporabnikov na LCD zaslonu skupaj s podatki o zemljepisni širini in dolžini. Obroč NeoPixel bo zdaj zasvetil, da označi naslov uporabnikov glede na usmerjenost naprav.

Tako v stanju 2 kot v stanju 3 obstajata dve stanji senzorja, ki omogočata napravi, da potegne podatke iz senzorja, ki zagotavljajo najbolj natančne podatke, odvisno od stanja delovanja naprave.

Stanje senzorja 1: MPU

Če se naprava ne premika, se podatki o naslovu potegnejo iz enote MPU, saj so to najbolj natančni podatki, ko se naprava ne premika.

Stanje senzorja 2: GPS

Če se naprava premika, se podatki o naslovu potegnejo iz čipa GPS, saj so to najbolj natančni podatki v tem stanju.

Naprava lahko kadar koli preklopi med stanja senzorja, da upošteva spreminjanje pogojev uporabe enote. To je pomembno za delovanje naprave, saj imata oba senzorja, uporabljena v napravi, pogoje, ki vplivajo na točnost podatkov, ki jih posredujeta. V primeru MPU lahko na čip enostavno vplivajo lokalna magnetna polja, ki jih povzročajo avtomobili in kovinski gradbeni materiali v stavbah. Tako se uporablja čip GPS, ki lahko zagotovi veliko natančnejšo smer, na katero ne vplivajo isti vplivi. Vendar pa GPS lahko poda podatke o smeri le pri premikanju, saj izračuna smer s spremembo zemljepisne širine in dolžine. Zato se čipi med seboj dopolnjujejo in z uporabo dveh stanj senzorjev zagotavljajo najbolj natančno in zanesljivo delovanje naprave.

2. korak: Nastavitev in žični diagram

Nastavitev in žični diagram
Nastavitev in žični diagram
Nastavitev in žični diagram
Nastavitev in žični diagram
Nastavitev in žični diagram
Nastavitev in žični diagram

Projekt uporablja klonirano ploščo Arduino Mega, podobno zgornji plošči. Vse komponente v projektu bodo povezane s to ploščo. Zgoraj so podrobni diagrami, kako povezati komponente za ta projekt. Gumbi nimajo podrobnega vezja, saj jih je mogoče nastaviti na več načinov. V tem projektu uporabljajo 100K izvlečni upor in preprost gumb za pošiljanje 3 -voltnega signala na dodeljeni pin.

3. korak: Preizkusite komponente in osnovno kodo

Projekt bo črpal podatke iz čipa MPU in GPS, kot je opisano prej. Priložene so tri kode, ki omogočajo testiranje podatkov iz MPU, GPS in MPU z zaslonom za preverjanje funkcionalnosti delov. Na tej stopnji je pomembno, da komponente delujejo, saj je koda ločena za vsak čip in vsa vprašanja je mogoče odpraviti brez strahu, da bi v končni kodi povzročili nepredvidene napake.

Obvezne knjižnice:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

DinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Vse to lahko najdete z iskanjem po zgornjih naslovih. Ne bom objavljal povezav, saj obstaja veliko izvodov teh knjižnic iz različnih virov in ki se držijo standarda skupnosti, ki povezuje le izvirnike, vam bom omogočil, da jih najdete sami.

4. korak: Umerjanje MPU

MPU kalibracija
MPU kalibracija

Naslov, ki ga najdemo prek enote MPU v državah 2 in 3, je bil razdeljen na štiri kvadrante. To je bilo potrebno, ker je naša metoda umerjanja zahtevala iskanje najmanjše in največje velikosti iz magnetometra vzdolž njegovih osi x in y. To je bilo storjeno z naključnim vrtenjem naprave okoli njenih treh osi, brez kakršnih koli pomembnih elektromagnetnih polj razen Zemljine. Nato smo vzeli najmanjšo in največjo vrednost vzdolž osi x in y ter ju vključili v enačbo skaliranja, da bi omejili velikosti med vrednostima negativne ena in ena. Na zgornji sliki sta BigX in BigY največji vrednosti podatkov magnetometra vzdolž osi x in y, LittleX in LittleY sta najmanjši vrednosti podatkov magnetometra vzdolž osi x in y, IMU.getMagX_uT () in IMU.getMagY_uT () so vrednosti, ki jih magnetometer kadar koli potegne vzdolž osi x in y, Mx in My pa nove lestvice, ki se uporabljajo za izračun naslova.

5. korak: Končna koda

Končna koda
Končna koda
Končna koda
Končna koda
Končna koda
Končna koda
Končna koda
Končna koda

Zadnji korak je ustvariti končno kodo. Priložil sem kopijo končne kode projektov. Znotraj opomb so bile narejene lažje krmarjenje po kodi. Največji izziv tega odseka je bilo pravilno delovanje kvadrantov. Izvajanje kvadrantov se je izkazalo za bolj dolgočasno in logično kljubovalno, kot smo lahko kdaj pričakovali. Sprva smo izvedli osnovni arctan (My/Mx) in nato pretvorili iz radianov v stopinje, saj Arduino privzeto oddaja v radianih. Edini kvadrant, v katerem je to delovalo, pa je bil od 90 stopinj do 180 stopinj, kar nam je dalo negativen izid in na koncu je bilo kvadrant III. Rešitev tega je bila absolutna vrednost, saj se je še vedno pravilno povečevala. Ta vrednost je bila nato odšteta od 360, da je v stanju 2 zasvetila pravilna LED dioda NeoPixel, v stanju 3 pa je bila uporabljena podobna matematična operacija glede na to, ali je bil naslov večji ali manjši od vnesenega naslova uporabnika, oboje je mogoče videti v zgornjo kodo. Na zgornjih slikah Naslov ustreza luči NeoPixel, ki bo zasvetila glede na razliko med naslovom naprave in odstopanjem od severa v primeru stanja 2 in od naslova uporabnika. V tem primeru od 90 do 180 stopinj ustreza kvadrantu III. V obeh primerih tft.print povzroči, da zaslon prebere smer naprave s severa.

Za ostale tri kvadrante je izvajanje arktana (My/Mx) privedlo do inverzije inkrementacije, ko se je naprava vrtela, to pomeni, da bi se kot smeri odšteval, ko naj bi odšteval, in obratno. Rešitev tega problema je bila, da arctangent obrnemo v obliko arktana (Mx/My). Čeprav je to rešilo inverzijo inkrementacije, ni podalo pravilnega naslova naprave, kar je prišlo do tega, ko so se pojavili kvadranti. Enostavna rešitev tega je bila dodajanje premika na podlagi ustreznega kvadranta. To je razvidno iz naslednjih številk, ki so spet kodi kode iz držav 2 in 3 vsakega kvadranta.

Prvi stavek if se izvede, če je naslov, izračunan z enačbo MPU, večji od naslova uporabnika. Pod tem pogojem se uporabnikov vnosni naslov doda naslovu naprave in ustrezna vrednost se odšteje od 360. Če se izvede stavek else, se enačba naslova MPU odšteje od uporabnikovega vnosnega naslova. Ti pogoji so bili izvedeni zato, da ne bi dobili le natančne vrednosti za NeoPixel, ampak da bi se izognili pridobivanju vrednosti zunaj sprejemljivega območja, ki je od 0 do 359 stopinj.

Priporočena: