Sisukord:

Digitaalne kompass ja kursiotsija: 6 sammu
Digitaalne kompass ja kursiotsija: 6 sammu

Video: Digitaalne kompass ja kursiotsija: 6 sammu

Video: Digitaalne kompass ja kursiotsija: 6 sammu
Video: 💦Blackview BV9200 ЧЕСТНЫЙ ОБЗОР ПРОТИВОУДАРНОГО 2024, November
Anonim
Digitaalne kompass ja suunaotsija
Digitaalne kompass ja suunaotsija

Autorid:

Cullan Whelan

Andrew Luft

Blake Johnson

Tänuavaldused:

California mereakadeemia

Evan Chang-Siu

Sissejuhatus:

Selle projekti aluseks on digitaalne kompass koos kursi jälgimisega. See võimaldab kasutajal digitaalse aparaadi abil jälgida suunda pikkade vahemaade taha. Kõnekeeles on suund põhjast päripäeva mõõdetud nurk, mida loetakse kompassi järgi nullikraadiks. Seadmel on kaks põhifunktsiooni: esimene kuvab seadme praeguse rubriigi digitaalkuval ja teine võimalus sisestada kasutaja soovitud pealkiri, mis kuvatakse seadme ülaosas oleval LED -rõngal kompassi korpus. Seejärel reguleerib kasutaja valgustatud LED -iga seotud seadme suunda. Seadme suuna muutmisel liigub LED keskmisele LED -ile, näidates seega, et õige suund on määratud.

Tarvikud:

- DIYmall 6M GPS -moodul

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

- Adafruit NeoPixel Ring 16

- MakerFocus 4tk 3,7V liitiumaku

- ELEGOO MEGA 2560 R3 pardal

- Adafruit Mini Lipo koos Mini -B USB -pesaga - USB LiIon/LiPoly laadija - v1

- 2,8 -tolline TFT -LCD koos puuteekraaniga eraldusplaadiga ja MicroSD -pesaga

Samm: projekti funktsionaalsuse kujundamine

Projekti funktsionaalsuse kujundamine
Projekti funktsionaalsuse kujundamine

Esimene samm on mõista loogikat ja lõplikku funktsionaalsust. See loogikaskeem kujutab kolme seadme olekut ja kahte anduri olekut.

Olek 1: laadimisolek

Laadimisolekut kasutatakse selleks, et Arduino Mega saaks käivitamisel kahe anduri andmed tagasi. Seade kuvab ekraanil laadimise, kustutab ekraanilt kõik numbriväärtused ja NeoPixeli rõnga LED -id süttivad ringikujuliselt.

Olek 2: kompassi režiim

Selles olekus toimib seade nagu digitaalne kompass. NeoPixeli rõngas süttib, näidates põhja suunda seadme orientatsiooni suhtes. Seadme tegelik pealkiri kuvatakse LCD -ekraanil koos seadme laius- ja pikkuskraadidega. Samuti saab selles olekus kasutaja sisestada olekus 3 kuvatava kasutaja pealkirja.

Olek 3: Suuna jälgimise režiim

Selles olekus aitab seade nüüd kasutajal soovitud pealkirja kinnistada. Seade kuvab nüüd LCD -ekraanil seadmete pealkirja ja kasutajate kursi koos laius- ja pikkuskraadidega. Nüüd süttib NeoPixeli rõngas, mis näitab kasutajate suunda seoses seadme orientatsiooniga.

Nii olekus 2 kui ka olekus 3 on kaks anduri olekut, mis võimaldavad seadmel tõmmata andmeid andurilt, mis annab sõltuvalt seadme tööseisundist kõige täpsemaid andmeid.

Anduri olek 1: MPU

Kui seade ei liigu, tõmmatakse suunaandmed MPU -st, kuna need on kõige täpsemad andmed, kui seade ei liigu.

Anduri olek 2: GPS

Kui seade liigub, tõmmatakse suunaandmed GPS -kiibilt, kuna need on selles olukorras kõige täpsemad andmed.

Seade võib lülituda nende vahel anduri olekutele igal ajal, et võtta arvesse seadme kasutustingimusi. See on seadme töö seisukohalt oluline, kuna mõlemal seadmes kasutataval anduril on tingimused, mis mõjutavad nende esitatud andmete täpsust. MPU puhul võivad kiibi kergesti mõjutada kohalikud magnetväljad, mida põhjustavad autod ja metallkonstruktsioonimaterjalid hoonetes. Seega kasutatakse GPS -kiipi, mis võib anda palju täpsema suuna, mida ei mõjuta samad mõjud. GPS võib aga anda suunaandmeid ainult liikudes, kuna see arvutab suuna, kasutades laius- ja pikkuskraadi muutusi. Seetõttu täiendavad kiibid üksteist ja kahe anduri oleku abil tagavad seadme kõige täpsema ja usaldusväärsema funktsionaalsuse.

2. samm: seadistamine ja traadiskeem

Seadistamine ja juhtmestiku skeem
Seadistamine ja juhtmestiku skeem
Seadistamine ja juhtmestiku skeem
Seadistamine ja juhtmestiku skeem
Seadistamine ja juhtmestiku skeem
Seadistamine ja juhtmestiku skeem

Projekt kasutab ja Arduino Mega klooniplaati, mis sarnaneb ülaltoodud plaadiga. Selle projektiga ühendatakse kõik projekti komponendid. Ülal on üksikasjalikud skeemid selle projekti komponentide ühendamiseks. Nuppudel pole üksikasjalikku vooluringi, kuna neid saab seadistada mitmel viisil. Selles projektis kasutavad nad 100K tõmbetakistit ja lihtsat nuppu, et saata 3 -voldine signaal sellele määratud tihvtile.

3. samm: komponentide ja põhikoodi testimine

Projekt võtab andmeid nii MPU kui ka GPS -kiibist, nagu varem kirjeldatud. Lisatud on kolm koodi, mis võimaldavad testida MPU, GPS ja MPU andmeid ekraaniga, et kontrollida osade funktsionaalsust. Selles etapis on oluline komponendid tööle saada, kuna kood on iga kiibi jaoks eraldi ja kõiki probleeme saab lahendada kartmata, et lõplikus koodis tekivad ettenägematud vead.

Nõutavad raamatukogud:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Kõiki neid leiate ülaltoodud pealkirjadest otsides. Ma ei postita linke, kuna neid raamatukogusid on palju koopiaid mitmest allikast ja järgides ainult originaalidega linkimise kogukonna standardeid, lasen teil need ise leida.

4. samm: MPU kalibreerimine

MPU kalibreerimine
MPU kalibreerimine

Osariigis 2 ja osariigis MPU kaudu leitud pealkiri jagati neljaks kvadrandiks. See oli vajalik, kuna meie kalibreerimismeetod nõudis magnetomeetri minimaalse ja maksimaalse suuruse leidmist piki selle x- ja y -telge. Seda tehti seadme juhusliku pööramise teel ümber kolme telje, mis ei sisalda muid olulisi elektromagnetvälju peale Maa. Seejärel võtsime miinimum- ja maksimumväärtused piki x- ja y -telge ning ühendasime need skaleerimisvõrrandiga, et piirata negatiivse ja ühe väärtuste vahelist suurust. Ülaltoodud joonisel on BigX ja BigY magnetomeetri andmete maksimaalsed väärtused vastavalt x- ja y-teljel, LittleX ja LittleY on magnetomeetri andmete miinimumväärtused vastavalt x- ja y-teljel, IMU.getMagX_uT () ja IMU.getMagY_uT () on väärtused, mis tõmmatakse magnetomeetrist igal ajal vastavalt x- ja y-teljele ning Mx ja My on uued skaala väärtused, mida kasutatakse pealkirja arvutamiseks.

Samm: lõppkood

Lõplik kood
Lõplik kood
Lõplik kood
Lõplik kood
Lõplik kood
Lõplik kood
Lõplik kood
Lõplik kood

Viimane samm on lõpliku koodi loomine. Lisasin projekti lõpliku koodi koopia. Koodis navigeerimiseks on tehtud märkmeid. Selle jaotise suurim väljakutse oli kvadrantide korrektseks töötamiseks. Kvadrantide rakendamine osutus tüütumaks ja loogikat trotsivamaks, kui oleksime osanud oodata. Algselt rakendasime põhiarkaani (My/Mx) ja teisendasime seejärel radiaanidest kraadideks, kuna Arduino väljastab vaikimisi radiaanides. Kuid ainus kvadrant, milles see töötas, oli vahemikus 90 kraadi kuni 180 kraadi, mis andis meile negatiivse väljundi ja lõpuks oli see III kvadrant. Selle lahenduseks oli absoluutväärtuse võtmine, kuna see suurenes endiselt õigesti. Seejärel lahutati see väärtus 360 -st, et süttida olekus 2 õige NeoPixeli LED ja olekus 3 kasutati sarnast matemaatilist toimingut selle põhjal, kas pealkiri oli suurem või väiksem kui kasutaja sisendpealkiri, mida mõlemat saab näha ülaltoodud kood. Ülaltoodud joonistel vastab pealkiri NeoPixeli valgusele, mis süttib, lähtudes seadme kursi ja põhjas oleva kõrvalekalde vahelisest olekust 2, ning kasutaja rubriigist. Sellisel juhul vastab 90-180 kraadi III kvadrandile. Mõlemal juhul paneb tft.print ekraani lugema seadme suunda põhjast.

Ülejäänud kolme kvadrandi puhul viis arktani (My/Mx) rakendamine seadme pööramisel juurdekasvu ümberpööramiseni, st suunanurk loendati alla, kui see pidi üles lugema, ja vastupidi. Selle probleemi lahenduseks oli arktangendi pööramine arkaani kujul (Mx/My). Kuigi see lahendas juurdekasvu ümberpööramise, ei andnud see õiget seadme suunda, kus mängisid mängu kvadrandid. Selle lihtsaks lahenduseks oli vastava kvadrandi põhjal nihke lisamine. Seda on näha järgmistel joonistel, mis on taas kord koodid iga kvadrandi olekutest 2 ja 3.

Esimene, kui lause täidetakse, kui MPU võrrandiga arvutatud pealkiri on suurem kui kasutaja pealkiri. Sel juhul lisatakse seadme pealkirjale kasutaja sisendpealkiri ja 360 -st lahutatakse vastav väärtus. Kui esitatakse muu avaldus, lahutatakse MPU pealkirja võrrand kasutaja sisestuspealkirjast. Neid tingimusi rakendati selleks, et mitte ainult saada NeoPixeli täpne väärtus, vaid vältida väärtuse saamist väljaspool vastuvõetavat vahemikku, mis on vahemikus 0 kuni 359 kraadi.

Soovitan: