Talaan ng mga Nilalaman:

Digital Compass at Heading Finder: 6 na Hakbang
Digital Compass at Heading Finder: 6 na Hakbang

Video: Digital Compass at Heading Finder: 6 na Hakbang

Video: Digital Compass at Heading Finder: 6 na Hakbang
Video: Secret Intelligent. Paano mo Malalaman na IKAW ay LIHIM na MATALINO? 2024, Nobyembre
Anonim
Digital Compass at Heading Finder
Digital Compass at Heading Finder

Mga May-akda:

Cullan Whelan

Andrew Luft

Blake Johnson

Mga Pagkilala:

California Maritime Academy

Evan Chang-Siu

Panimula:

Ang batayan ng proyektong ito ay isang digital na compass na may pagsubaybay sa heading. Pinapayagan nito ang gumagamit na sundin ang isang heading sa malayong distansya gamit ang isang digital patakaran ng pamahalaan. Colloqually isang heading ay isang anggulo sinusukat pakaliwa mula sa hilaga, na kung saan ay itinuturing bilang zero degree, tulad ng ipinahiwatig ng compass. Ang aparato ay may dalawang pangunahing mga pag-andar: ang una ay ipinapakita ang kasalukuyang heading ng aparato sa isang digital na sanggunian sa pagpapakita, at ang pangalawa ay ang kakayahang ipasok ang isang hiniling na heading ng gumagamit, na ipapakita sa isang singsing ng mga LED sa tuktok ng pabahay ng kompas. Aayusin ng gumagamit ang oryentasyon ng aparato na nauugnay sa iluminadong LED. Habang binago ang direksyon ng aparato, ang LED ay maglalakbay sa gitnang LED, sa gayon ay ipinapahiwatig na ang tamang heading ay naitaguyod.

Mga Pantustos:

- DIYmall 6M GPS Module

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

- Adafruit NeoPixel Ring 16

- MakerFocus 4pcs 3.7V Lithium Rechargable Battery

- ELEGOO MEGA 2560 R3 Board

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

- 2.8 TFT LCD na may Touchscreen Breakout Board w / MicroSD Socket

Hakbang 1: Pagdidisenyo ng Pag-andar ng Proyekto

Pagdidisenyo ng Pag-andar ng Proyekto
Pagdidisenyo ng Pag-andar ng Proyekto

Ang unang hakbang ay pag-unawa sa lohika at pangwakas na pagpapaandar ng pagpapatakbo. Inilalarawan ng diagram ng lohika ang tatlong mga estado ng aparato at ang dalawang estado ng sensor.

Estado 1: Naglo-load ang Estado

Ginagamit ang estado ng paglo-load upang payagan ang Arduino Mega na makuha ang data mula sa dalawang sensor sa pagsisimula. Ipapakita ng aparato ang paglo-load sa screen, i-clear ang lahat ng mga halaga ng numero sa screen, at ang mga LED sa singsing na NeoPixel ay ilaw sa isang bilog.

Estado 2: Mode ng Compass

Sa ganitong estado ang aparato ay kumikilos tulad ng isang digital na compass. Ang NeoPixel ring ay magliwanag upang ipahiwatig ang direksyon ng Hilaga patungkol sa oryentasyon ng aparato. Ang tunay na heading ng aparato ay ipapakita din sa LCD screen kasama ang Latitude at Longitude ng aparato. Magkakaroon din ito sa loob ng estadong ito na magagawa ng gumagamit na ipasok ang heading ng gumagamit upang maipakita sa Estado 3.

Estado 3: Heading Tracking Mode

Sa ganitong estado ang aparato ay makakatulong na sa gumagamit na maging matatag sa kanilang ninanais na heading. Ipapakita ngayon ng aparato ang heading ng mga aparato at ang mga gumagamit ay heading sa LCD screen kasama ang data ng latitude at longitude. Ang NeoPixel ring ay mag-iilaw upang ipahiwatig ang mga gumagamit na heading na patungkol sa oryentasyon ng mga aparato.

Sa loob ng parehong Estado 2 at Estado 3 mayroong dalawang estado ng sensor na pinahihintulutan ng mga estado ng sensor na ang aparato na kumuha ng data mula sa sensor na nagbibigay ng pinaka tumpak na data depende sa kondisyon ng pagpapatakbo ng aparato.

Estado ng Sensor 1: MPU

Kung ang aparato ay hindi gumagalaw ang data ng heading ay mahihila mula sa MPU dahil ito ang pinaka tumpak na data kapag ang aparato ay hindi gumagalaw.

Estado ng Sensor 2: GPS

Kung ang aparato ay gumagalaw ang data ng heading ay mahihila mula sa GPS chip dahil ito ang pinaka tumpak na data sa kondisyong ito.

Ang aparato ay maaaring lumipat sa pagitan ng mga ito sa mga estado ng sensor sa anumang oras upang i-account ang mga kondisyon sa paggamit ng unit na nagbabago. Ito ay mahalaga sa pagpapatakbo ng aparato dahil ang pareho sa dalawang sensor na ginamit sa aparato ay may mga kundisyon na nakakaapekto sa kawastuhan ng ibinibigay nilang data. Sa kaso ng MPU ang maliit na tilad ay madaling maimpluwensyahan ng mga lokal na magnetic field na sanhi ng mga kotse at metal na materyales sa konstruksyon sa mga gusali. Sa gayon ang isang GPS chip ay ginagamit na maaaring magbigay ng isang mas tumpak na heading na hindi naisagawa ng parehong mga impluwensya. Gayunpaman, maaari lamang magbigay ang GPS ng data ng heading kapag gumagalaw habang kinakalkula nito ang heading gamit ang pagbabago ng data ng latitude at longitude. Samakatuwid ang mga chips ay umakma sa bawat isa at sa pamamagitan ng paggamit ng dalawang estado ng sensor ay nagbibigay ng pinaka tumpak at maaasahang pag-andar ng aparato.

Hakbang 2: Pag-setup at Wire Diagram

Pag-setup at Wire Diagram
Pag-setup at Wire Diagram
Pag-setup at Wire Diagram
Pag-setup at Wire Diagram
Pag-setup at Wire Diagram
Pag-setup at Wire Diagram

Gumagamit ang proyekto at Arduino Mega clone board na katulad sa board sa itaas. Ang lahat ng mga bahagi ng proyekto ay maiugnay sa board na ito. Sa itaas ay ang detalyadong mga diagram kung paano i-wire ang mga sangkap para sa proyektong ito. Ang mga pindutan ay walang isang detalyadong circuit dahil ang mga ito ay maaaring i-set up ng maraming mga paraan. Sa proyektong ito ginagamit nila ang isang 100K pull down risistor at isang simpleng pindutan upang magpadala ng isang 3 volt signal sa nakatalagang pin nito.

Hakbang 3: Mga Bahagi ng Pagsubok at Pangunahing Code

Ang proyekto ay kukuha ng data mula sa parehong MPU at GPS chip tulad ng inilarawan nang mas maaga. Nakalakip ang tatlong mga code na nagbibigay-daan sa pagsubok ng data mula sa MPU, GPS, at MPU na may screen upang mapatunayan ang pag-andar ng mga bahagi. Mahalagang makuha ang pagpapatakbo ng mga sangkap sa yugtong ito dahil ang code ay hiwalay para sa bawat maliit na tilad at ang anumang mga isyu ay maaaring matugunan nang walang takot na maging sanhi ng hindi inaasahang mga pagkakamali sa huling code.

Mga Kinakailangan na Aklatan:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

TinyGPS ++. H

Adafruit_NeoPixel.h

MPU9250.h

Ang lahat ng mga ito ay matatagpuan sa pamamagitan ng paghahanap ng mga pamagat sa itaas. Hindi ako magpo-post ng mga link dahil maraming mga kopya ng mga silid-aklatan na ito mula sa maraming mga mapagkukunan at sumusunod sa pamantayan ng komunidad na nagli-link lamang sa mga orihinal ay hahayaan ko kang hanapin ang mga ito para sa iyong sarili.

Hakbang 4: Pagkakalibrate ng MPU

Pag-calibrate ng MPU
Pag-calibrate ng MPU

Ang heading na natagpuan sa pamamagitan ng MPU sa Estado 2 at Estado 3 ay nahati sa apat na quadrants. Ito ay kinakailangan dahil kinakailangan ng aming pamamaraan ng pagkakalibrate ang paghahanap ng minimum at maximum na magnitude mula sa magnetometer kasama ang x at y axes nito. Ginawa ito sa pamamagitan ng pag-ikot ng aparato nang sapalaran tungkol sa tatlong palakol nito, libre mula sa anumang makabuluhang mga electromagnetic na patlang maliban sa Earth. Pagkatapos ay kinuha namin ang minimum at maximum na mga halaga kasama ang x at y axis at isinaksak ang mga ito sa isang equation sa pag-scale upang mapigilan ang mga magnitude sa pagitan ng mga halaga ng negatibong isa at isa. Sa figure sa itaas, ang BigX at BigY ay ang maximum na halaga ng data ng magnetometer kasama ang x at y-axis ayon sa pagkakabanggit, LittleX at LittleY ang minimum na halaga ng data ng magnetometer kasama ang x at y-axis ayon sa pagkakabanggit, IMU.getMagX_uT () at IMU.getMagY_uT () ang mga halagang hinihila mula sa magnetometer sa anumang oras kasama ang x at y-axis ayon sa pagkakabanggit, at ang Mx at My ang mga bagong na-scale na halaga na ginamit upang kalkulahin ang heading.

Hakbang 5: Pangwakas na Code

Pangwakas na Code
Pangwakas na Code
Pangwakas na Code
Pangwakas na Code
Pangwakas na Code
Pangwakas na Code
Pangwakas na Code
Pangwakas na Code

Ang pangwakas na hakbang ay upang likhain ang pangwakas na code. Nag-attach ako ng isang kopya ng mga huling code ng mga proyekto. Sa loob ng mga tala ay nagawa upang makatulong na mag-navigate sa code. Ang pinakamalaking hamon ng seksyon na ito ay ang pagkuha ng quadrants upang gumana nang tama. Ang pagpapatupad ng quadrants ay napatunayan na maging mas nakakapagod at nakakahimok ng lohika kaysa sa inaasahan namin. Una naming ipinatupad ang isang pangunahing arctan (My / Mx) at pagkatapos ay nag-convert mula sa mga radian hanggang sa degree, dahil ang Arduino ay output sa mga radian bilang default. Gayunpaman, ang nag-iisa lamang na quadrant na ito ay nagtrabaho ay mula 90 degree hanggang 180 degree, na nagbigay sa amin ng isang negatibong output at nauwi sa Quadrant III. Ang solusyon dito ay ang pagkuha ng ganap na halaga, dahil tama pa itong nadagdagan. Ang halagang ito ay pagkatapos ay ibawas mula sa 360 upang magaan ang tamang NeoPixel LED sa estado 2 at ang isang katulad na pagpapatakbo ng matematika ay ginamit sa estado 3 batay sa kung ang heading ay mas malaki o mas maliit kaysa sa input heading ng gumagamit, na parehong makikita sa sa itaas ng code. Sa mga numero sa itaas, ang Heading ay tumutugma sa ilaw ng NeoPixel na maiilawan batay sa pagkakaiba sa pagitan ng heading ng aparato at paglihis mula sa hilaga sa kaso ng estado 2, at mula sa heading ng gumagamit. Sa kasong ito, 90 hanggang 180 degree ay tumutugma sa Quadrant III. Sa parehong kaso, ang tft.print ay sanhi ng pagbabasa ng screen ng aparato papunta sa hilaga.

Para sa iba pang tatlong mga quadrant, ang pagpapatupad ng arctan (My / Mx) ay humantong sa isang pagbabaligtad ng pagtaas habang ang aparato ay pinaikot, ibig sabihin, ang anggulo ng heading ay bibilangin kung dapat itong bilangin at kabaligtaran. Ang solusyon sa problemang ito ay upang i-flip ang arctangent sa anyo ng arctan (Mx / My). Habang nalutas nito ang pagtaas ng pagbabaligtad, hindi ito nagbigay ng tamang heading ng aparato, kung saan pinaglaruan ang mga quadrant. Ang simpleng pag-aayos dito ay upang magdagdag ng isang shift batay sa kaukulang quadrant. Makikita ito sa mga sumusunod na numero, na kung saan ay mga piraso ulit ng code mula sa Mga Estado 2 at 3 ng bawat quadrant.

Isinasagawa ang una kung pahayag kung ang heading na kinakalkula ng equation ng MPU ay mas malaki kaysa sa heading ng gumagamit. Sa ilalim ng kondisyong ito ang heading ng pag-input ng gumagamit ay idinagdag sa heading ng aparato at ang kaukulang halaga ay ibabawas mula sa 360. Kung ang ibang pahayag ay isinasagawa, ang equation ng heading ng MPU ay ibabawas mula sa heading ng pag-input ng gumagamit. Ang mga kundisyong ito ay ipinatupad upang hindi lamang makakuha ng tumpak na halaga para sa NeoPixel, ngunit upang maiwasan ang pagkuha ng isang halaga sa labas ng katanggap-tanggap na saklaw, na mula 0 hanggang 359 degree.

Inirerekumendang: