Satura rādītājs:

Digitālais kompass un virziena meklētājs: 6 soļi
Digitālais kompass un virziena meklētājs: 6 soļi

Video: Digitālais kompass un virziena meklētājs: 6 soļi

Video: Digitālais kompass un virziena meklētājs: 6 soļi
Video: Ну, наконец-то дождались ► 1 Прохождение Elden Ring 2024, Jūlijs
Anonim
Digitālais kompass un virziena meklētājs
Digitālais kompass un virziena meklētājs

Autori:

Cullan Whelan

Endrjū Lufts

Bleiks Džonsons

Pateicības:

Kalifornijas Jūras akadēmija

Evan Chang-Siu

Ievads:

Šī projekta pamatā ir digitālais kompass ar virzienu izsekošanu. Tas ļauj lietotājam sekot kursam lielos attālumos, izmantojot digitālo aparātu. Sarunvalodā kurss ir leņķis, ko mēra pulksteņrādītāja virzienā no ziemeļiem un ko uzskata par nulli grādiem, kā norāda kompass. Ierīcei ir divas galvenās funkcijas: pirmā parāda pašreizējo ierīces virsrakstu uz digitālā displeja atsauces, un otrā ir iespēja ievadīt lietotāja pieprasīto virsrakstu, kas tiks parādīts gaismas diodes gredzenā ierīces augšpusē kompasa korpuss. Pēc tam lietotājs noregulēs ierīces orientāciju saistībā ar iedegto LED. Mainot ierīces virzienu, gaismas diode virzās uz centrālo gaismas diode, tādējādi norādot, ka ir izveidots pareizais virziens.

Piegādes:

- DIYmall 6M GPS modulis

- HiLetgo MPU9250/6500 9-ass 9 DOF 16 Bit

- Adafruit NeoPixel gredzens 16

- MakerFocus 4gab. 3.7V litija uzlādējams akumulators

- ELEGOO MEGA 2560 R3 dēlis

- Adafruit Mini Lipo ar Mini -B USB ligzdu - USB LiIon/LiPoly lādētājs - v1

- 2,8 collu TFT LCD ar skārienekrāna sadalīšanas paneli ar MicroSD ligzdu

1. solis: projekta funkcionalitātes izstrāde

Projekta funkcionalitātes projektēšana
Projekta funkcionalitātes projektēšana

Pirmais solis ir saprast loģiku un galīgo darbības funkcionalitāti. Šī loģiskā diagramma attēlo trīs ierīces stāvokļus un divus sensora stāvokļus.

1. stāvoklis: iekraušanas stāvoklis

Iekraušanas stāvoklis tiek izmantots, lai Arduino Mega varētu atgūt datus no diviem sensoriem pēc palaišanas. Ierīce ekrānā parādīs ielādi, notīrīs visas ekrānā redzamās skaitļu vērtības, un NeoPixel gredzena gaismas diodes iedegsies aplī.

2. stāvoklis: kompasa režīms

Šajā stāvoklī ierīce darbosies kā digitālais kompass. NeoPixel gredzens iedegsies, norādot ziemeļu virzienu attiecībā pret ierīces orientāciju. Patiesais ierīces virsraksts tiks parādīts arī LCD ekrānā kopā ar ierīces platumu un garumu. Šajā stāvoklī lietotājs arī varēs ievadīt lietotāja virsrakstu, kas tiks parādīts 3. stāvoklī.

3. stāvoklis: virziena izsekošanas režīms

Šajā stāvoklī ierīce tagad palīdzēs lietotājam nostiprināties vēlamajā pozīcijā. Ierīce tagad LCD ekrānā parādīs ierīču pozīcijas un lietotāju pozīcijas kopā ar platuma un garuma datiem. NeoPixel gredzens tagad iedegsies, lai norādītu lietotājus, kas virzās uz ierīces orientāciju.

Gan 2., gan 3. stāvoklī ir divi sensora stāvokļi. Šie sensora stāvokļi ļauj ierīcei iegūt datus no sensora, kas nodrošina visprecīzākos datus atkarībā no ierīces darbības stāvokļa.

Sensora stāvoklis 1: MPU

Ja ierīce nepārvietojas, kursa dati tiks izvilkti no MPU, jo tie ir visprecīzākie dati, kad ierīce nekustās.

Sensora stāvoklis 2: GPS

Ja ierīce pārvietojas, kursa dati tiks izvilkti no GPS mikroshēmas, jo tie ir visprecīzākie dati šajā stāvoklī.

Ierīce var jebkurā laikā pārslēgties starp šiem stāvokļiem uz sensora stāvokli, lai ņemtu vērā mainīgos iekārtas lietošanas apstākļus. Tas ir svarīgi ierīces darbībai, jo abiem ierīcē izmantotajiem sensoriem ir apstākļi, kas ietekmē to sniegto datu precizitāti. MPU gadījumā mikroshēmu var viegli ietekmēt vietējie magnētiskie lauki, ko izraisa automašīnas un metāla konstrukciju materiāli ēkās. Tādējādi tiek izmantota GPS mikroshēma, kas var nodrošināt daudz precīzāku virzienu, ko neietekmē viena un tā pati ietekme. Tomēr GPS var sniegt kursa datus tikai pārvietojoties, jo tas aprēķina kursu, izmantojot platuma un garuma datu izmaiņas. Tāpēc mikroshēmas papildina viena otru un, izmantojot divus sensora stāvokļus, nodrošina visprecīzāko un uzticamāko ierīces funkcionalitāti.

2. darbība: iestatīšana un vadu shēma

Uzstādīšana un vadu shēma
Uzstādīšana un vadu shēma
Uzstādīšana un vadu shēma
Uzstādīšana un vadu shēma
Uzstādīšana un vadu shēma
Uzstādīšana un vadu shēma

Projektā tiek izmantota un Arduino Mega klonu plāksne, kas līdzīga iepriekš minētajai plāksnei. Visas projekta sastāvdaļas tiks pievienotas šai plāksnei. Iepriekš ir detalizētas shēmas, kā savienot šī projekta komponentus. Pogām nav detalizētas shēmas, jo tās var iestatīt daudzos veidos. Šajā projektā viņi izmanto 100K nolaižamo rezistoru un vienkāršu pogu, lai nosūtītu 3 voltu signālu uz piešķirto tapu.

3. darbība: komponentu un pamata koda pārbaude

Projekts iegūs datus gan no MPU, gan no GPS mikroshēmas, kā aprakstīts iepriekš. Pievienoti trīs kodi, kas ļauj pārbaudīt datus no MPU, GPS un MPU ar ekrānu, lai pārbaudītu detaļu funkcionalitāti. Šajā posmā ir svarīgi panākt komponentu darbību, jo kods katrai mikroshēmai ir atsevišķs, un visas problēmas var atrisināt, nebaidoties izraisīt neparedzētas kļūdas gala kodā.

Nepieciešamās bibliotēkas:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. St

Adafruit_NeoPixel.h

MPU9250.h

To visu var atrast, meklējot virsrakstus iepriekš. Es nepublicēšu saites, jo ir daudz šo bibliotēku eksemplāru no vairākiem avotiem un ievērojot kopienas standartu, kas nosaka tikai saiti uz oriģināliem, es ļaušu jums tos atrast.

4. solis: MPU kalibrēšana

MPU kalibrēšana
MPU kalibrēšana

Virsraksts, kas atrasts caur MPU 2. un 3. valstī, tika sadalīts četros kvadrantos. Tas bija nepieciešams, jo mūsu kalibrēšanas metode prasīja atrast minimālo un maksimālo lielumu no magnetometra gar tā x un y asīm. Tas tika darīts, nejauši pagriežot ierīci ap trim asīm, bez jebkādiem nozīmīgiem elektromagnētiskajiem laukiem, izņemot Zemi. Pēc tam mēs paņēmām minimālās un maksimālās vērtības gar x un y asi un pievienojām tās mērogošanas vienādojumam, lai ierobežotu lielumus starp negatīvās un vienas vērtības. Iepriekš redzamajā attēlā BigX un BigY ir magnetometra datu maksimālās vērtības attiecīgi pa x un y asi, LittleX un LittleY ir magnetometra datu minimālās vērtības attiecīgi pa x un y asi, IMU.getMagX_uT () un IMU.getMagY_uT () ir vērtības, kas tiek izvilktas no magnetometra jebkurā laikā attiecīgi pa x un y asi, un Mx un My ir jaunās mērogotās vērtības, ko izmanto, lai aprēķinātu virsrakstu.

5. solis: galīgais kods

Gala kods
Gala kods
Gala kods
Gala kods
Gala kods
Gala kods
Gala kods
Gala kods

Pēdējais solis ir izveidot galīgo kodu. Esmu pievienojis projektu galīgā koda kopiju. Ir veiktas piezīmes, lai palīdzētu orientēties kodā. Šīs sadaļas lielākais izaicinājums bija panākt kvadrantu pareizu darbību. Kvadrantu ieviešana izrādījās garlaicīgāka un loģiskāka, nekā mēs jebkad varējām paredzēt. Sākumā mēs ieviesām pamata arktānu (My/Mx) un pēc tam pārveidojām no radiāniem par grādiem, jo Arduino pēc noklusējuma izvada radiānos. Tomēr vienīgais kvadrants, kurā tas strādāja, bija no 90 grādiem līdz 180 grādiem, kas mums deva negatīvu rezultātu un galu galā bija III kvadrants. Risinājums tam bija absolūtās vērtības ņemšana, jo tā joprojām palielinājās pareizi. Pēc tam šī vērtība tika atņemta no 360, lai iedegtos pareizā NeoPixel gaismas diode 2. stāvoklī, un līdzīga matemātiska darbība tika izmantota 3. stāvoklī, pamatojoties uz to, vai virsraksts bija lielāks vai mazāks par lietotāja ievades virsrakstu, un abus tos var redzēt virs koda. Iepriekš redzamajos attēlos Virsraksts atbilst NeoPixel gaismai, kas iedegsies, pamatojoties uz starpību starp ierīces virzienu un novirzi no ziemeļiem 2. stāvokļa gadījumā un no lietotāja virsraksta. Šajā gadījumā 90-180 grādi atbilst III kvadrantam. Abos gadījumos tft.print liek ekrānam nolasīt ierīces virzienu no ziemeļiem.

Pārējiem trim kvadrantiem arktāna (My/Mx) ieviešana noveda pie pieauguma inversijas, kad ierīce tika pagriezta, t.i., virziena leņķis tiktu skaitīts atpakaļ, kad tam vajadzēja skaitīties uz augšu, un otrādi. Šīs problēmas risinājums bija arktangentu pārvērst arktāna formā (Mx/My). Lai gan tas atrisināja pieauguma inversiju, tas nedeva pareizu ierīces virzienu, kur sāka darboties kvadranti. Vienkāršs risinājums bija pievienot nobīdi, pamatojoties uz atbilstošo kvadrantu. To var redzēt šādos skaitļos, kas atkal ir katra kvadranta 2. un 3. stāvokļa koda gabali.

Pirmais paziņojums, ja virsraksts, kas aprēķināts pēc MPU vienādojuma, ir lielāks par lietotāja virsrakstu. Šādā gadījumā lietotāja ievades virsraksts tiek pievienots ierīces virsrakstam, un atbilstošā vērtība tiek atņemta no 360. Ja tiek veikts cits paziņojums, MPU virsraksta vienādojums tiek atņemts no lietotāja ievades virsraksta. Šie nosacījumi tika ieviesti, lai ne tikai iegūtu precīzu NeoPixel vērtību, bet arī izvairītos no vērtības, kas atrodas ārpus pieņemamā diapazona, kas ir no 0 līdz 359 grādiem.

Ieteicams: