Turinys:

Skaitmeninis kompasas ir krypčių ieškiklis: 6 žingsniai
Skaitmeninis kompasas ir krypčių ieškiklis: 6 žingsniai

Video: Skaitmeninis kompasas ir krypčių ieškiklis: 6 žingsniai

Video: Skaitmeninis kompasas ir krypčių ieškiklis: 6 žingsniai
Video: Mastelio apskaičiavimas 2024, Lapkritis
Anonim
Skaitmeninis kompasas ir krypčių ieškiklis
Skaitmeninis kompasas ir krypčių ieškiklis

Autoriai:

Cullanas Whelanas

Andrew Luftas

Blake'as Johnsonas

Padėkos:

Kalifornijos jūrų akademija

Evanas Chang-Siu

Įvadas:

Šio projekto pagrindas yra skaitmeninis kompasas su kursų sekimu. Tai leidžia vartotojui sekti kryptį dideliais atstumais naudojant skaitmeninį aparatą. Šnekamojoje kalboje kursas yra kampas, išmatuotas pagal laikrodžio rodyklę iš šiaurės, kuris laikomas nuliniu laipsniu, kaip rodo kompasas. Įrenginys turi dvi pagrindines funkcijas: pirmoji rodo dabartinę prietaiso poziciją skaitmeninio ekrano nuorodoje, o antroji - galimybė įvesti vartotojo prašomą antraštę, kuri bus rodoma šviesos diodų žiede viršuje. kompaso korpusas. Tada vartotojas pakoreguotų įrenginio orientaciją, susijusią su šviečiančiu šviesos diodu. Keičiant prietaiso kryptį, šviesos diodas nukeliaus į centrinį šviesos diodą, taip nurodydamas, kad nustatyta teisinga kryptis.

Priedai:

- „Pasidaryk pats“6M GPS modulis

- „HiLetgo MPU9250/6500 9-Axis 9 DOF 16 Bit“

- „Adafruit NeoPixel“žiedas 16

- „MakerFocus“4 vnt 3,7 V ličio įkraunama baterija

- ELEGOO MEGA 2560 R3 lenta

- „Adafruit Mini Lipo“su „Mini -B“USB lizdu - „USB LiIon“/„LiPoly“įkroviklis - v1

- 2,8 colio TFT LCD ekranas su jutikliniu ekranu su „MicroSD“lizdu

1 žingsnis: suprojektuokite projekto funkcionalumą

Projekto funkcionalumo projektavimas
Projekto funkcionalumo projektavimas

Pirmasis žingsnis yra suprasti logiką ir galutinį veiklos funkcionalumą. Šioje loginėje diagramoje pavaizduotos trys įrenginio būsenos ir dvi jutiklio būsenos.

1 būsena: pakrovimo būsena

Įkrovimo būsena naudojama, kad „Arduino Mega“galėtų paleisti duomenis iš dviejų jutiklių paleidus. Įrenginys ekrane parodys įkėlimą, išvalys visas ekrane esančias skaičių reikšmes, o „NeoPixel“žiedo šviesos diodai užsidegs ratu.

2 būsena: kompaso režimas

Šioje būsenoje prietaisas veiks kaip skaitmeninis kompasas. Užsidegs „NeoPixel“žiedas, nurodantis šiaurės kryptį, atsižvelgiant į prietaiso orientaciją. Tikroji prietaiso antraštė taip pat bus rodoma LCD ekrane kartu su įrenginio platuma ir ilguma. Taip pat šioje būsenoje vartotojas galės įvesti vartotojo antraštę, kuri bus rodoma 3 būsenoje.

3 būsena: krypties sekimo režimas

Esant tokiai būsenai, prietaisas dabar padės vartotojui įsitvirtinti norimoje pozicijoje. Dabar prietaisas LCD ekrane rodys prietaisų kryptį ir naudotojų kryptį kartu su platumos ir ilgumos duomenimis. Dabar užsidegs „NeoPixel“žiedas, rodantis naudotojų kryptį, atsižvelgiant į įrenginių orientaciją.

Tiek 2, tiek 3 būsenose yra dvi jutiklio būsenos. Šios jutiklio būsenos leidžia įrenginiui gauti duomenis iš jutiklio, kuris pateikia tiksliausius duomenis, atsižvelgiant į įrenginio veikimo būklę.

1 jutiklio būsena: MPU

Jei prietaisas nejuda, krypties duomenys bus paimti iš MPU, nes tai yra tiksliausias duomenys, kai prietaisas nejuda.

2 jutiklio būsena: GPS

Jei prietaisas juda, krypties duomenys bus paimti iš GPS mikroschemos, nes tai yra tiksliausi šios būklės duomenys.

Įrenginys gali bet kuriuo metu persijungti tarp jutiklių būsenų, atsižvelgdamas į besikeičiančias įrenginio naudojimo sąlygas. Tai svarbu įrenginio veikimui, nes abiejuose įrenginyje naudojamuose jutikliuose yra sąlygų, kurios daro įtaką jų pateiktų duomenų tikslumui. MPU atveju lustą gali lengvai paveikti vietiniai magnetiniai laukai, kuriuos sukelia automobiliai ir metalinės statybinės medžiagos pastatuose. Taigi naudojamas GPS lustas, galintis suteikti daug tikslesnę kryptį, kuriai įtakos neturi tas pats poveikis. Tačiau GPS gali pateikti krypties duomenis tik judėdamas, nes skaičiuoja kryptį, naudodamas platumos ir ilgumos duomenų pokyčius. Todėl lustai papildo vienas kitą ir naudojant dvi jutiklio būsenas užtikrina tiksliausią ir patikimiausią įrenginio funkcionalumą.

2 žingsnis: sąranka ir laidų schema

Sąranka ir laidų schema
Sąranka ir laidų schema
Sąranka ir laidų schema
Sąranka ir laidų schema
Sąranka ir laidų schema
Sąranka ir laidų schema

Projekte naudojama ir „Arduino Mega“klono plokštė, panaši į aukščiau pateiktą plokštę. Visi projekto komponentai bus prijungti prie šios plokštės. Aukščiau yra išsamios schemos, kaip prijungti šio projekto komponentus. Mygtukai neturi išsamios grandinės, nes juos galima nustatyti įvairiais būdais. Šiame projekte jie naudoja 100K nuleidžiamą rezistorių ir paprastą mygtuką, kad nusiųstų 3 voltų signalą į jam priskirtą kaištį.

3 žingsnis: komponentų ir pagrindinio kodo tikrinimas

Projektas surinks duomenis iš MPU ir GPS lusto, kaip aprašyta anksčiau. Pridedami trys kodai, leidžiantys patikrinti duomenis iš MPU, GPS ir MPU su ekranu, siekiant patikrinti dalių funkcionalumą. Šiame etape svarbu sudedamąsias dalis pradėti eksploatuoti, nes kiekvieno lusto kodas yra atskiras ir bet kokias problemas galima išspręsti nebijojant sukelti nenumatytų galutinio kodo klaidų.

Reikalingos bibliotekos:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

„TinyGPS ++“. H

Adafruit_NeoPixel.h

MPU9250.h

Visa tai galima rasti ieškant aukščiau pateiktų pavadinimų. Aš neskelbsiu nuorodų, nes yra daug šių bibliotekų kopijų iš kelių šaltinių ir laikantis bendruomenės standarto, pagal kurį tik pateikiamos nuorodos į originalus, leisiu jums jas rasti.

4 žingsnis: MPU kalibravimas

MPU kalibravimas
MPU kalibravimas

Antraštė, rasta per MPU 2 ir 3 valstybėse, buvo padalyta į keturis kvadrantus. Tai buvo būtina, nes mūsų kalibravimo metodu reikėjo iš magnetometro rasti mažiausius ir didžiausius dydžius išilgai jo x ir y ašių. Tai buvo padaryta atsitiktinai sukant prietaisą aplink tris ašis, be jokių reikšmingų elektromagnetinių laukų, išskyrus Žemę. Tada mes paėmėme mažiausią ir didžiausią reikšmes išilgai x ir y ašių ir prijungėme jas prie mastelio lygties, kad apribotume dydžius tarp neigiamo ir vieno. Aukščiau pateiktame paveikslėlyje „BigX“ir „BigY“yra didžiausios magnetometro duomenų vertės išilgai x ir y ašies, o „LittleX“ir „LittleY“-minimalios magnetometro duomenų vertės išilgai x ir y ašies, IMU.getMagX_uT () ir IMU.getMagY_uT () yra vertės, kurios bet kuriuo metu ištraukiamos iš magnetometro išilgai x ir y ašies, o Mx ir My yra naujos mastelio vertės, naudojamos apskaičiuojant kursą.

5 žingsnis: galutinis kodas

Galutinis kodas
Galutinis kodas
Galutinis kodas
Galutinis kodas
Galutinis kodas
Galutinis kodas
Galutinis kodas
Galutinis kodas

Paskutinis žingsnis yra sukurti galutinį kodą. Pridėjau galutinio projekto kodo kopiją. Buvo pateiktos pastabos, padedančios naršyti kodą. Didžiausias šio skyriaus iššūkis buvo priversti kvadrantus tinkamai veikti. Kvadrantų įgyvendinimas pasirodė varginantis ir logiškesnis, nei galėjome tikėtis. Iš pradžių įdiegėme pagrindinį arktaną (My/Mx), o po to konvertavome iš radianų į laipsnius, nes pagal numatytuosius nustatymus „Arduino“išleidžia radianus. Tačiau vienintelis kvadrantas, kuriame jis veikė, buvo nuo 90 laipsnių iki 180 laipsnių, o tai davė neigiamą rezultatą ir galiausiai buvo III kvadrantas. Išeitis buvo absoliuti vertė, nes ji vis tiek padidėjo teisingai. Tada ši vertė buvo atimta iš 360, kad 2 būsenoje užsidegtų teisingas „NeoPixel“šviesos diodas, ir panaši matematinė operacija buvo naudojama 3 būsenoje, atsižvelgiant į tai, ar antraštė buvo didesnė ar mažesnė už vartotojo įvesties antraštę, o abi jos matomos aukščiau pateiktas kodas. Aukščiau pateiktuose paveikslėliuose antraštė atitinka „NeoPixel“lemputę, kuri užsidegs, atsižvelgiant į skirtumą tarp prietaiso krypties ir nukrypimo nuo šiaurės 2 būsenos atveju ir nuo vartotojo antraštės. Šiuo atveju 90–180 laipsnių atitinka III kvadrantą. Abiem atvejais tft.print ekrane nuskaito įrenginio kryptį iš šiaurės.

Kituose trijuose kvadrantuose, įgyvendinus arktaną (My/Mx), prietaisas buvo pasuktas, kai padidėjo inversija, ty posūkio kampas būtų skaičiuojamas atgal, kai jis turėjo būti skaičiuojamas aukštyn, ir atvirkščiai. Šios problemos sprendimas buvo apversti arktangentą į arktano formą (Mx/My). Nors tai išsprendė didėjimo inversiją, ji nesuteikė teisingos prietaiso krypties, kur atsirado kvadrantai. Paprastas sprendimas buvo pridėti poslinkį pagal atitinkamą kvadrantą. Tai matyti iš šių skaičių, kurie vėlgi yra kiekvieno kvadranto 2 ir 3 būsenų kodai.

Pirmasis, jei teiginys atliekamas, jei antraštė, apskaičiuota pagal MPU lygtį, yra didesnė už vartotojo antraštę. Esant tokioms sąlygoms, vartotojo įvesties antraštė pridedama prie įrenginio antraštės, o atitinkama vertė atimama iš 360. Jei įvykdomas kitas teiginys, MPU antraštės lygtis atimama iš vartotojo įvesties antraštės. Šios sąlygos buvo įgyvendintos siekiant ne tik gauti tikslią „NeoPixel“vertę, bet ir išvengti vertės, kuri yra už priimtinos ribos, kuri yra nuo 0 iki 359 laipsnių.

Rekomenduojamas: