Përmbajtje:

Kompas dixhital dhe Gjetës drejtues: 6 hapa
Kompas dixhital dhe Gjetës drejtues: 6 hapa

Video: Kompas dixhital dhe Gjetës drejtues: 6 hapa

Video: Kompas dixhital dhe Gjetës drejtues: 6 hapa
Video: Tesla Franz Von Holzhausen Adresa kryesore 2017 Audio Only W / Subs 2024, Korrik
Anonim
Kompas Dixhital dhe Gjetës i Drejtimit
Kompas Dixhital dhe Gjetës i Drejtimit

Autorët:

Cullan Whelan

Andrew Luft

Blake Johnson

Mirënjohje:

Akademia Detare e Kalifornisë

Evan Chang-Siu

Prezantimi:

Baza e këtij projekti është një busull dixhitale me përcjelljen e titullit. Kjo i mundëson përdoruesit të ndjekë një titull në distanca të gjata duke përdorur një aparat dixhital. Kolektivisht një titull është një kënd i matur në drejtim të akrepave të orës nga veriu, i cili konsiderohet si zero gradë, siç tregohet nga busulla. Pajisja ka dy funksione kryesore: e para është shfaqja e titullit aktual të pajisjes në një referencë të ekranit dixhital, dhe e dyta është aftësia për të futur një titull të kërkuar nga përdoruesi, i cili do të shfaqet në një unazë LED në krye të strehimi i busullës. Përdoruesi pastaj do të rregullonte orientimin e pajisjes në lidhje me LED -in e ndriçuar. Ndërsa drejtimi i pajisjes ndryshon, LED do të udhëtojë në LED qendër, duke treguar kështu se titulli i saktë është vendosur.

Furnizimet:

- DIYmall 6M GPS Modul

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

- Unaza Adafruit NeoPixel 16

- Bateri Lithium MakerFocus 4pcs 3.7V e Rimbushshme

- Bordi ELEGOO MEGA 2560 R3

- Adafruit Mini Lipo w/Mini -B USB Jack - Ngarkues USB LiIon/LiPoly - v1

- 2.8 TFT LCD me bordin e ekranit me prekje me prizë MicroSD

Hapi 1: Hartimi i Funksionalitetit të Projektit

Hartimi i Funksionalitetit të Projektit
Hartimi i Funksionalitetit të Projektit

Hapi i parë është të kuptuarit e logjikës dhe funksionalitetit përfundimtar operacional. Ky diagram logjik përshkruan tre gjendjet e pajisjes dhe dy gjendjet e sensorit.

Gjendja 1: Gjendja e ngarkimit

Gjendja e ngarkimit përdoret për të lejuar që Arduino Mega të marrë të dhëna nga dy sensorët me fillimin. Pajisja do të shfaqë ngarkimin në ekran, do të pastrojë të gjitha vlerat e numrave në ekran dhe LED -të në unazën NeoPixel do të ndizen në një rreth.

Gjendja 2: Mënyra e busullës

Në këtë gjendje pajisja do të veprojë si një busull dixhitale. Unaza NeoPixel do të ndizet për të treguar drejtimin e Veriut në lidhje me orientimin e pajisjes. Titulli i pajisjes së vërtetë do të shfaqet gjithashtu në ekranin LCD së bashku me gjerësinë dhe gjatësinë gjeografike të pajisjes. Gjithashtu do të jetë brenda këtij shteti që përdoruesi do të jetë në gjendje të hyjë në titullin e përdoruesit për t'u shfaqur në Gjendjen 3.

Gjendja 3: Mënyra e Ndjekjes së Titullit

Në këtë gjendje, pajisja tani do të ndihmojë përdoruesin të vendoset në titullin e dëshiruar. Pajisja tani do të shfaqë drejtimin e pajisjeve dhe drejtimin e përdoruesve në ekranin LCD së bashku me të dhënat e gjerësisë dhe gjatësisë. Unaza NeoPixel tani do të ndizet për të treguar përdoruesit që shkojnë në lidhje me orientimin e pajisjeve.

Brenda gjendjes 2 dhe gjendjes 3 ka dy gjendje sensori, këto gjendje sensori lejojnë pajisjen të tërheqë të dhëna nga sensori që siguron të dhënat më të sakta në varësi të gjendjes operacionale të pajisjes.

Gjendja e sensorit 1: MPU

Nëse pajisja nuk lëviz, të dhënat e titullit do të tërhiqen nga MPU pasi janë të dhënat më të sakta kur pajisja nuk lëviz.

Gjendja e sensorit 2: GPS

Nëse pajisja po lëviz, të dhënat e titullit do të tërhiqen nga çipi GPS pasi janë të dhënat më të sakta në këtë gjendje.

Pajisja mund të kalojë midis këtyre në gjendjet e sensorit në çdo kohë për të marrë parasysh kushtet e përdorimit të njësisë që ndryshon. Kjo është e rëndësishme për funksionimin e pajisjes pasi të dy sensorët e përdorur në pajisje kanë kushte që ndikojnë në saktësinë e të dhënave që ato ofrojnë. Në rastin e MPU çipi mund të ndikohet lehtësisht nga fushat magnetike lokale të shkaktuara nga makinat dhe materialet e ndërtimit metalik në ndërtesa. Kështu përdoret një çip GPS që mund të sigurojë një titull shumë më të saktë që nuk ndikohet nga ndikimet e njëjta. Sidoqoftë, GPS mund të sigurojë të dhëna për titullin kur lëviz, pasi llogarit titullin duke përdorur ndryshimin në të dhënat e gjerësisë dhe gjatësisë. Prandaj patate të skuqura plotësojnë njëra -tjetrën dhe duke përdorur dy gjendjet e sensorit sigurojnë funksionalitetin më të saktë dhe të besueshëm të pajisjes.

Hapi 2: Diagrami i konfigurimit dhe telave

Diagrami i konfigurimit dhe telave
Diagrami i konfigurimit dhe telave
Diagrami i konfigurimit dhe telave
Diagrami i konfigurimit dhe telave
Diagrami i konfigurimit dhe telave
Diagrami i konfigurimit dhe telave

Projekti përdor dhe bordin e klonuar Arduino Mega të ngjashëm me tabelën e mësipërme. Të gjithë përbërësit në projekt do të lidhen me këtë tabelë. Më sipër janë diagramet e hollësishme se si të lidhni përbërësit për këtë projekt. Butonat nuk kanë një qark të detajuar pasi këto mund të vendosen në shumë mënyra. Në këtë projekt ata përdorin një rezistencë tërheqëse 100K dhe një buton të thjeshtë për të dërguar një sinjal 3 volt në kunjin e caktuar.

Hapi 3: Testimi i Komponentëve dhe Kodit Bazë

Projekti do të tërheqë të dhëna nga MPU dhe çipi GPS siç u përshkrua më herët. Bashkangjitur janë tre kode që mundësojnë testimin e të dhënave nga MPU, GPS dhe MPU me ekran për të verifikuar funksionalitetin e pjesëve. Isshtë e rëndësishme që komponentët të funksionojnë në këtë fazë pasi kodi është i veçantë për secilin çip dhe çdo çështje mund të adresohet pa frikën e shkaktimit të gabimeve të paparashikuara në kodin përfundimtar.

Bibliotekat e kërkuara:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Të gjitha këto mund të gjenden duke kërkuar titujt e mësipërm. Unë nuk do të postoj lidhje pasi ka shumë kopje të këtyre bibliotekave nga burime të shumta dhe duke iu përmbajtur standardit të bashkësisë për të lidhur vetëm origjinalet, do t'ju lejoj t'i gjeni vetë.

Hapi 4: Kalibrimi i MPU

Kalibrimi i MPU
Kalibrimi i MPU

Titulli i gjetur përmes NJPZH -së në Shtetin 2 dhe Shtetin 3 u nda në katër kuadrate. Kjo ishte e nevojshme sepse metoda jonë e kalibrimit kërkonte gjetjen e madhësive minimale dhe maksimale nga magnetometri përgjatë boshteve të tij x dhe y. Kjo u bë duke e rrotulluar pajisjen rastësisht rreth tre boshteve të saj, pa asnjë fushë të rëndësishme elektromagnetike të ndryshme nga ajo e Tokës. Ne pastaj morëm vlerat minimale dhe maksimale përgjatë boshtit x dhe y dhe i lidhëm ato në një ekuacion të shkallëzimit në mënyrë që të kufizojmë madhësitë midis vlerave të një dhe një negative. Në figurën e mësipërme, BigX dhe BigY janë vlerat maksimale të të dhënave të magnetometrit përgjatë boshtit x dhe y respektivisht, LittleX dhe LittleY janë vlerat minimale të të dhënave të magnetometrit përgjatë boshtit x dhe y respektivisht, IMU.getMagX_uT () dhe IMU.getMagY_uT () janë vlerat që tërhiqen nga magnetometri në çdo kohë përkatësisht përgjatë boshtit x dhe y, dhe Mx dhe My janë vlerat e reja të shkallëzuara të përdorura për të llogaritur titullin.

Hapi 5: Kodi Përfundimtar

Kodi Përfundimtar
Kodi Përfundimtar
Kodi Përfundimtar
Kodi Përfundimtar
Kodi Përfundimtar
Kodi Përfundimtar
Kodi Përfundimtar
Kodi Përfundimtar

Hapi i fundit është krijimi i kodit përfundimtar. Unë kam bashkangjitur një kopje të kodit përfundimtar të projekteve. Brenda shënimeve janë bërë për të ndihmuar në lundrimin në kod. Sfida më e madhe e këtij seksioni ishte që kuadrantët të punonin si duhet. Zbatimi i kuadrateve doli të ishte më i lodhshëm dhe sfidues i logjikës sesa mund të kishim parashikuar. Ne fillimisht zbatuam një arktan bazë (My/Mx) dhe më pas u konvertuam nga radianët në gradë, pasi Arduino del në radianë si parazgjedhje. Sidoqoftë, kuadranti i vetëm në të cilin punoi ishte nga 90 gradë në 180 gradë, gjë që na dha një rezultat negativ dhe përfundoi duke qenë Kuadranti III. Zgjidhja për këtë ishte marrja e vlerës absolute, pasi ajo akoma u rrit në mënyrë korrekte. Kjo vlerë u zbrit nga 360 për të ndriçuar LED -in e saktë NeoPixel në gjendjen 2 dhe një operacion i ngjashëm matematikor u përdor në gjendjen 3 bazuar në faktin nëse titulli ishte më i madh ose më i vogël se titulli i hyrjes së përdoruesit, të dyja të cilat mund të shihen në kodin e mësipërm. Në figurat e mësipërme, Titulli korrespondon me dritën NeoPixel që do të ndizet bazuar në ndryshimin midis drejtimit të pajisjes dhe devijimit nga veriu në rastin e gjendjes 2, dhe nga ai i titullit të përdoruesit. Në këtë rast, 90 deri në 180 gradë korrespondon me Kuadrantin III. Në të dy rastet, tft.print bën që ekrani të lexojë pajisjen që shkon nga veriu.

Për tre kuadrantët e tjerë, zbatimi i arktanit (My/Mx) çoi në një përmbysje të rritjes ndërsa pajisja rrotullohej, domethënë këndi i drejtimit do të numëronte mbrapsht kur supozohej të numëronte lart dhe anasjelltas. Zgjidhja për këtë problem ishte kalimi i arktangentit në formën e arctan (Mx/My). Ndërsa kjo zgjidhi përmbysjen e rritjes, nuk dha titullin e duhur të pajisjes, i cili është vendi ku hynë në lojë kuadrantët. Zgjidhja e thjeshtë për këtë ishte shtimi i një ndryshimi bazuar në kuadrantin përkatës. Kjo mund të shihet në figurat e mëposhtme, të cilat janë edhe një herë pjesë e kodit nga Shtetet 2 dhe 3 të secilit kuadrant.

Deklarata e parë if kryhet nëse titulli i llogaritur nga ekuacioni i MPU është më i madh se titulli i përdoruesit. Nën këtë kusht titulli i hyrjes së përdoruesit i shtohet titullit të pajisjes dhe vlera përkatëse zbritet nga 360. Nëse deklarata else kryhet, ekuacioni i titullit MPU zbritet nga titulli i hyrjes së përdoruesit. Këto kushte u zbatuan për të marrë jo vetëm një vlerë të saktë për NeoPixel, por për të shmangur marrjen e një vlere jashtë intervalit të pranueshëm, e cila është nga 0 në 359 gradë.

Recommended: