Obsah:

Digitální kompas a vyhledávač směru: 6 kroků
Digitální kompas a vyhledávač směru: 6 kroků

Video: Digitální kompas a vyhledávač směru: 6 kroků

Video: Digitální kompas a vyhledávač směru: 6 kroků
Video: Digitální tržiště: Co všechno o vás ví? | Digitální (R)evoluce #6 2024, Červenec
Anonim
Digitální kompas a vyhledávač směru
Digitální kompas a vyhledávač směru

Autoři:

Cullan Whelan

Andrew Luft

Blake Johnson

Poděkování:

Kalifornská námořní akademie

Evan Chang-Siu

Úvod:

Základem tohoto projektu je digitální kompas se sledováním kurzu. To umožňuje uživateli sledovat směr na dlouhé vzdálenosti pomocí digitálního zařízení. Hovorově je nadpis úhel měřený ve směru hodinových ručiček od severu, který je podle kompasu považován za nula stupňů. Zařízení má dvě hlavní funkce: první je zobrazení aktuálního záhlaví zařízení na odkazu digitálního displeje a druhou je možnost zadat uživatelem požadovaný nadpis, který se zobrazí na prstenci LED v horní části kompasové pouzdro. Uživatel by pak upravil orientaci zařízení související s osvětlenou LED diodou. Při změně směru zařízení se LED dioda rozsvítí na středovou LED, což znamená, že byl stanoven správný směr.

Zásoby:

- DIYmall 6M GPS modul

- HiLetgo MPU9250/6500 9-osý 9 DOF 16 bitů

- Adafruit NeoPixel Ring 16

- Lithiová dobíjecí baterie MakerFocus 4ks 3,7V

- Deska ELEGOO MEGA 2560 R3

- Adafruit Mini Lipo w/Mini -B USB Jack - USB LiIon/LiPoly nabíječka - v1

- 2,8 TFT LCD s dotykovou deskou Breakout Board s konektorem MicroSD

Krok 1: Navrhování funkčnosti projektu

Navrhování funkčnosti projektu
Navrhování funkčnosti projektu

Prvním krokem je pochopení logiky a konečné provozní funkce. Tento logický diagram zobrazuje tři stavy zařízení a dva stavy senzorů.

Stav 1: Stav načítání

Stav načítání se používá k tomu, aby Arduino Mega mohl při spuštění získat data zpět ze dvou senzorů. Zařízení na obrazovce zobrazí načítání, vymaže všechny hodnoty čísel na obrazovce a LED diody na prstenci NeoPixel se rozsvítí v kruhu.

Stav 2: Režim kompasu

V tomto stavu bude zařízení fungovat jako digitální kompas. Kroužek NeoPixel se rozsvítí, aby indikoval směr severu s ohledem na orientaci zařízení. Skutečné záhlaví zařízení se také zobrazí na obrazovce LCD spolu se zeměpisnou šířkou a délkou zařízení. V tomto stavu bude také to, že uživatel bude moci zadat nadpis uživatele, který se má zobrazit ve stavu 3.

Stav 3: Režim sledování záhlaví

V tomto stavu zařízení nyní pomůže uživateli usadit se na požadovaném nadpisu. Zařízení nyní zobrazí nadpisy zařízení a uživatele na obrazovce LCD spolu s údaji o zeměpisné šířce a délce. Nyní se rozsvítí kroužek NeoPixel, který indikuje, že uživatelé míří s ohledem na orientaci zařízení.

V rámci stavu 2 a stavu 3 existují dva stavy senzorů, které tyto stavy senzorů umožňují zařízení získávat data ze senzoru, který poskytuje nejpřesnější data v závislosti na provozním stavu zařízení.

Stav senzoru 1: MPU

Pokud se zařízení nepohybuje, budou data nadpisu stažena z MPU, protože se jedná o nejpřesnější data, když se zařízení nepohybuje.

Stav senzoru 2: GPS

Pokud se zařízení pohybuje, data nadpisu budou stažena z čipu GPS, protože se jedná o nejpřesnější data v tomto stavu.

Zařízení může kdykoli přepínat mezi těmito stavy senzoru, aby zohlednilo podmínky používání jednotky. To je důležité pro provoz zařízení, protože oba dva senzory použité v zařízení mají podmínky, které ovlivňují přesnost údajů, které poskytují. V případě MPU může být čip snadno ovlivněn místními magnetickými poli způsobenými automobily a kovovými stavebními materiály v budovách. Používá se tedy čip GPS, který může poskytnout mnohem přesnější směrování, které není ovlivněno stejnými vlivy. GPS však může poskytovat údaje o směru pouze při pohybu, protože vypočítává směr pomocí změny údajů o zeměpisné šířce a délce. Čipy se proto navzájem doplňují a pomocí dvou stavů senzorů poskytují nejpřesnější a nejspolehlivější funkce zařízení.

Krok 2: Nastavení a schéma zapojení

Nastavení a schéma zapojení
Nastavení a schéma zapojení
Nastavení a schéma zapojení
Nastavení a schéma zapojení
Nastavení a schéma zapojení
Nastavení a schéma zapojení

Projekt využívá klonovou desku Arduino Mega podobnou desce výše. K této desce budou připojeny všechny komponenty v projektu. Nahoře jsou podrobné diagramy, jak zapojit komponenty pro tento projekt. Tlačítka nemají podrobný obvod, protože je lze nastavit mnoha způsoby. V tomto projektu používají 100K stahovací odpor a jednoduché tlačítko k odeslání 3voltového signálu na jeho přiřazený pin.

Krok 3: Testování součástí a základního kódu

Projekt bude získávat data z čipu MPU i GPS, jak bylo popsáno dříve. Připojeny jsou tři kódy, které umožňují testování dat z MPU, GPS a MPU s obrazovkou pro ověření funkčnosti dílů. V této fázi je důležité zprovoznit komponenty, protože kód je pro každý čip samostatný a jakékoli problémy lze řešit bez obav, že v konečném kódu způsobí nepředvídané chyby.

Požadované knihovny:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Všechny tyto položky lze nalézt ve výše uvedených názvech. Nebudu zveřejňovat odkazy, protože existuje mnoho kopií těchto knihoven z více zdrojů a při dodržování komunitního standardu pouze odkazování na originály vám je nechám najít.

Krok 4: Kalibrace MPU

Kalibrace MPU
Kalibrace MPU

Nadpis nalezený prostřednictvím MPU ve státě 2 a státě 3 byl rozdělen do čtyř kvadrantů. To bylo nezbytné, protože naše metoda kalibrace vyžadovala nalezení minimálních a maximálních velikostí z magnetometru podél jeho os x a y. To bylo provedeno náhodným otáčením zařízení kolem jeho tří os, bez jakýchkoli jiných významných elektromagnetických polí, než je Země. Potom jsme vzali minimální a maximální hodnoty podél osy x a y a zapojili je do škálovací rovnice, abychom omezili hodnoty mezi hodnotami záporné jedna a jedna. Na výše uvedeném obrázku jsou BigX a BigY maximální hodnoty údajů magnetometru podél osy x a y, LittleX a LittleY jsou minimální hodnoty údajů magnetometru podél osy x a y, IMU.getMagX_uT () a IMU.getMagY_uT () jsou hodnoty získávané z magnetometru kdykoli podél osy x a y, respektive Mx a My jsou nové škálované hodnoty používané pro výpočet záhlaví.

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 krokem je vytvoření konečného kódu. Připojil jsem kopii konečného kódu projektů. V rámci poznámek byly provedeny pomoc při navigaci v kódu. Největší výzvou této sekce bylo zajistit správnou funkci kvadrantů. Implementace kvadrantů se ukázala být únavnější a logicky vzdorující, než jsme kdy mohli očekávat. Původně jsme implementovali základní arktan (My/Mx) a poté převedli z radiánů na stupně, protože Arduino ve výchozím nastavení vystupuje v radiánech. Jediný kvadrant, ve kterém to fungovalo, byl od 90 stupňů do 180 stupňů, což nám dalo negativní výstup a skončilo to jako kvadrant III. Řešením bylo získání absolutní hodnoty, protože se stále zvyšovalo správně. Tato hodnota byla poté odečtena od 360, aby se rozsvítila správná LED dioda NeoPixel ve stavu 2, a ve stavu 3 byla použita podobná matematická operace podle toho, zda byl nadpis větší nebo menší než vstupní nadpis uživatele, přičemž oba lze vidět na výše uvedený kód. Na výše uvedených obrázcích odpovídá nadpis světlu NeoPixel, které se rozsvítí na základě rozdílu mezi záhlavím zařízení a odchylkou od severu v případě stavu 2 a od směru od uživatele. V tomto případě 90 až 180 stupňů odpovídá kvadrantu III. V obou případech tft.print způsobí, že obrazovka přečte zařízení směřující ze severu.

U ostatních tří kvadrantů vedla implementace arctanu (My/Mx) k inverzi inkrementace při otáčení zařízení, tj. Úhel záhlaví by odpočítával, když měl počítat nahoru a naopak. Řešením tohoto problému bylo převrátit arktangens do podoby arctanu (Mx/My). I když to vyřešilo inkrementaci inkrementace, nedalo to správný směr zařízení, kde vstoupily do hry kvadranty. Jednoduchou opravou bylo přidat posun na základě odpovídajícího kvadrantu. To lze vidět na následujících obrázcích, které jsou opět kusy kódu ze států 2 a 3 každého kvadrantu.

První příkaz if se provede, pokud je nadpis vypočítaný podle rovnice MPU větší než nadpis uživatele. Za této podmínky je vstupní záhlaví uživatele přidáno k hlavičce zařízení a odpovídající hodnota je odečtena od 360. Pokud je proveden příkaz else, rovnice záhlaví MPU je odečtena od vstupního záhlaví uživatele. Tyto podmínky byly implementovány s cílem nejen získat přesnou hodnotu pro NeoPixel, ale také zabránit získání hodnoty mimo přijatelný rozsah, který je od 0 do 359 stupňů.

Doporučuje: