Obsah:

Digitálny kompas a hľadač smeru: 6 krokov
Digitálny kompas a hľadač smeru: 6 krokov

Video: Digitálny kompas a hľadač smeru: 6 krokov

Video: Digitálny kompas a hľadač smeru: 6 krokov
Video: 💦Blackview BV9200 ЧЕСТНЫЙ ОБЗОР ПРОТИВОУДАРНОГО 2024, Júl
Anonim
Digitálny kompas a hľadač smeru
Digitálny kompas a hľadač smeru

Autori:

Cullan Whelan

Andrew Luft

Blake Johnson

Poďakovanie:

Kalifornská námorná akadémia

Evan Chang-Siu

Úvod:

Základom tohto projektu je digitálny kompas so sledovaním kurzu. To umožňuje užívateľovi sledovať kurz na dlhé vzdialenosti pomocou digitálneho zariadenia. Hovorovo je nadpisom uhol meraný od severu v smere hodinových ručičiek, ktorý je podľa kompasu považovaný za nula stupňov. Zariadenie má dve hlavné funkcie: prvou je zobrazenie aktuálneho smeru zariadenia na referencii digitálneho displeja a druhou je možnosť zadať nadpis požadovaný používateľom, ktorý sa zobrazí na krúžku diód LED v hornej časti kompasové bývanie. Užívateľ by potom upravil orientáciu zariadenia súvisiacu s rozsvietenou diódou LED. Keď sa zmení smer zariadenia, LED dióda prejde na stredovú LED, čo znamená, že bol stanovený správny smer.

Zásoby:

- DIYmall 6M GPS modul

- HiLetgo MPU9250/6500 9-osý 9 DOF 16 bitov

- Adafruit NeoPixel Ring 16

- Lítiová nabíjateľná batéria MakerFocus 4 ks 3,7 V

- Doska ELEGOO MEGA 2560 R3

- Adafruit Mini Lipo s konektorom USB Mini -B - nabíjačka USB LiIon/LiPoly - v1

- 2,8 palcový TFT LCD displej s dotykovou obrazovkou na doske s konektorom MicroSD

Krok 1: Navrhnutie funkčnosti projektu

Navrhovanie funkčnosti projektu
Navrhovanie funkčnosti projektu

Prvým krokom je pochopenie logiky a konečnej funkčnosti. Tento logický diagram zobrazuje tri stavy zariadenia a dva stavy senzorov.

Stav 1: Stav načítania

Stav načítania sa používa na to, aby Arduino Mega mohol pri štarte získať údaje späť z dvoch senzorov. Zariadenie na obrazovke zobrazí načítanie, vymaže všetky hodnoty čísel na obrazovke a diódy LED na krúžku NeoPixel sa rozsvietia v kruhu.

Stav 2: Režim kompasu

V tomto stave bude zariadenie fungovať ako digitálny kompas. Krúžok NeoPixel sa rozsvieti, aby naznačil smer severu vzhľadom na orientáciu zariadenia. Skutočný nadpis zariadenia sa tiež zobrazí na LCD obrazovke spolu so zemepisnou šírkou a dĺžkou zariadenia. V tomto stave bude aj to, že používateľ bude môcť zadať nadpis používateľa, ktorý sa má zobraziť v stave 3.

Stav 3: Režim sledovania nadpisu

V tomto stave zariadenie teraz pomôže používateľovi usadiť sa na požadovanom nadpise. Zariadenie teraz zobrazí nadpisy zariadení a používateľov na obrazovke LCD spolu s údajmi o zemepisnej šírke a dĺžke. Krúžok NeoPixel sa teraz rozsvieti, aby indikoval používateľov, ktorí smerujú k orientácii zariadení.

V rámci stavu 2 a stavu 3 existujú dva stavy senzorov, tieto stavy senzorov umožňujú zariadeniu získať údaje zo senzora, ktorý poskytuje najpresnejšie údaje v závislosti od prevádzkového stavu zariadenia.

Stav snímača 1: MPU

Ak sa zariadenie nepohybuje, údaje záhlavia sa budú získavať z MPU, pretože sú to najpresnejšie údaje, keď sa zariadenie nepohybuje.

Stav snímača 2: GPS

Ak sa zariadenie pohybuje, údaje smeru sa získajú z čipu GPS, pretože v tomto stave ide o najpresnejšie údaje.

Zariadenie môže kedykoľvek prepínať medzi týmito stavmi a stavmi senzorov, aby zohľadnilo podmienky používania jednotky. To je dôležité pre prevádzku zariadenia, pretože oba dva snímače používané v zariadení majú podmienky, ktoré ovplyvňujú presnosť údajov, ktoré poskytujú. V prípade MPU môže byť čip ľahko ovplyvnený miestnymi magnetickými poľami spôsobenými automobilmi a kovovými stavebnými materiálmi v budovách. Preto sa používa čip GPS, ktorý môže poskytnúť oveľa presnejšie smerovanie, ktoré nie je ovplyvnené rovnakými vplyvmi. GPS však môže poskytovať údaje o smere iba pri pohybe, pretože vypočítava smer podľa zmeny údajov o zemepisnej šírke a dĺžke. Čipy sa preto navzájom dopĺňajú a pomocou dvoch stavov senzorov poskytujú najpresnejšiu a najspoľahlivejšiu funkciu zariadenia.

Krok 2: Nastavenie a schéma zapojenia

Inštalácia a schéma zapojenia
Inštalácia a schéma zapojenia
Inštalácia a schéma zapojenia
Inštalácia a schéma zapojenia
Inštalácia a schéma zapojenia
Inštalácia a schéma zapojenia

Projekt využíva klonovú dosku Arduino Mega podobnú doske uvedenej vyššie. K tejto doske budú pripojené všetky komponenty v projekte. Vyššie sú uvedené podrobné schémy zapojenia komponentov pre tento projekt. Tlačidlá nemajú podrobný obvod, pretože ich je možné nastaviť mnohými spôsobmi. V tomto projekte používajú 100K sťahovací odpor a jednoduché tlačidlo na odoslanie 3 -voltového signálu na jeho priradený pin.

Krok 3: Testovanie komponentov a základný kód

Projekt bude ťahať údaje z čipu MPU aj GPS, ako bolo popísané vyššie. Priložené sú tri kódy, ktoré umožňujú testovanie údajov z MPU, GPS a MPU s obrazovkou na overenie funkčnosti dielov. V tejto fáze je dôležité uviesť komponenty do prevádzky, pretože kód je pre každý čip oddelený a akékoľvek problémy je možné vyriešiť bez strachu, že v konečnom kóde dôjde k nepredvídaným chybám.

Požadované knižnice:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Všetky tieto informácie nájdete v nadpisoch uvedených vyššie. Nebudem zverejňovať odkazy, pretože existuje veľa kópií týchto knižníc z viacerých zdrojov a pri dodržaní komunitného štandardu iba odkazovania na originály vám ich nechám nájsť.

Krok 4: Kalibrácia MPU

Kalibrácia MPU
Kalibrácia MPU

Nadpis nájdený prostredníctvom MPU v štáte 2 a štáte 3 bol rozdelený do štyroch kvadrantov. To bolo nevyhnutné, pretože naša metóda kalibrácie vyžadovala nájdenie minimálnych a maximálnych veličín z magnetometra pozdĺž jeho osí x a y. To sa uskutočnilo náhodným otáčaním zariadenia okolo jeho troch osí bez akýchkoľvek významných elektromagnetických polí iných ako na Zemi. Potom sme vzali minimálne a maximálne hodnoty pozdĺž osi x a y a zapojili ich do škálovacej rovnice, aby sme obmedzili veličiny medzi hodnotami zápornej jedna a jedna. Na obrázku vyššie sú BigX a BigY maximálne hodnoty údajov magnetometra pozdĺž osi x a y, LittleX a LittleY sú minimálne hodnoty údajov magnetometra pozdĺž osi x a y, IMU.getMagX_uT () a IMU..getMagY_uT () sú hodnoty čerpané z magnetometra kedykoľvek pozdĺž osi x a y a Mx a My sú nové škálované hodnoty používané na výpočet nadpisu.

Krok 5: Konečný kód

Konečný kód
Konečný kód
Konečný kód
Konečný kód
Konečný kód
Konečný kód
Konečný kód
Konečný kód

Posledným krokom je vytvorenie konečného kódu. Pripojil som kópiu konečného kódu projektov. V rámci poznámok boli urobené pomoc pri navigácii v kóde. Najväčšou výzvou tejto sekcie bolo prinútiť kvadranty správne fungovať. Implementácia kvadrantov sa ukázala byť únavnejšia a logickejšia, ako by sme mohli kedy očakávať. Pôvodne sme implementovali základný arktán (My/Mx) a potom sme konvertovali z radiánov na stupne, pretože Arduino štandardne vydáva v radiánoch. Jediný kvadrant, v ktorom to fungovalo, bol od 90 stupňov do 180 stupňov, čo nám poskytlo negatívny výstup a skončilo to ako kvadrant III. Riešením bolo získanie absolútnej hodnoty, pretože sa stále zvyšovalo správne. Táto hodnota sa potom odpočítala od 360, aby sa rozsvietila správna LED dióda NeoPixel v stave 2, a v stave 3 sa použila podobná matematická operácia podľa toho, či bol nadpis väčší alebo menší ako vstupný nadpis používateľa, pričom obidva je možné vidieť na vyššie uvedený kód. Na vyššie uvedených obrázkoch nadpis zodpovedá svetlu NeoPixel, ktoré sa rozsvieti na základe rozdielu medzi záhlavím zariadenia a odchýlkou od severu v prípade stavu 2 a od smeru používateľa. V tomto prípade 90 až 180 stupňov zodpovedá kvadrantu III. V oboch prípadoch tft.print spôsobuje, že obrazovka číta zariadenie smerujúce zo severu.

U ostatných troch kvadrantov viedla implementácia arctanu (My/Mx) k inverzii prírastku pri otáčaní zariadenia, t.j. uhol smeru by sa odpočítaval, keď sa mal počítať a naopak. Riešením tohto problému bolo preklopenie arktangensu do formy arktánu (Mx/My). Aj keď to vyriešilo inverziu prírastku, nedalo to správny smer zariadenia, kde kvadranty vstupovali do hry. Jednoduchým riešením bolo pridať posun na základe zodpovedajúceho kvadrantu. Je to vidieť na nasledujúcich obrázkoch, ktoré sú opäť časťami kódov zo štátov 2 a 3 každého kvadrantu.

Prvý príkaz if sa vykoná, ak je nadpis vypočítaný podľa rovnice MPU väčší ako nadpis používateľa. Za tejto podmienky sa vstupný nadpis užívateľa pridá k nadpisu zariadenia a zodpovedajúca hodnota sa odpočíta od 360. Ak sa vykoná príkaz else, rovnica nadpisu MPU sa odpočíta od vstupného nadpisu používateľa. Tieto podmienky boli implementované tak, aby nielen získali presnú hodnotu pre NeoPixel, ale aby sa vyhli získaniu hodnoty mimo prijateľného rozsahu, ktorý je od 0 do 359 stupňov.

Odporúča: