Talaan ng mga Nilalaman:

Smart Motorsiklo HUD Prototype (turn-by-turn Navigation at Napakaraming Higit Pa): 9 Mga Hakbang
Smart Motorsiklo HUD Prototype (turn-by-turn Navigation at Napakaraming Higit Pa): 9 Mga Hakbang

Video: Smart Motorsiklo HUD Prototype (turn-by-turn Navigation at Napakaraming Higit Pa): 9 Mga Hakbang

Video: Smart Motorsiklo HUD Prototype (turn-by-turn Navigation at Napakaraming Higit Pa): 9 Mga Hakbang
Video: Section 8 2024, Hulyo
Anonim
Smart Motorsiklo HUD Prototype (pag-navigate sa bawat pagliko at Higit Pa)
Smart Motorsiklo HUD Prototype (pag-navigate sa bawat pagliko at Higit Pa)
Smart Motorsiklo HUD Prototype (pag-navigate sa bawat pagliko at Napakarami pa)
Smart Motorsiklo HUD Prototype (pag-navigate sa bawat pagliko at Napakarami pa)
Smart Motorsiklo HUD Prototype (pag-navigate sa bawat pagliko at Higit Pa)
Smart Motorsiklo HUD Prototype (pag-navigate sa bawat pagliko at Higit Pa)
Smart Motorsiklo HUD Prototype (pag-navigate sa bawat pagliko at Napakarami pa)
Smart Motorsiklo HUD Prototype (pag-navigate sa bawat pagliko at Napakarami pa)

Hi!

Ang Mga Instructable na ito ay ang kuwento kung paano ko dinisenyo at binuo ang isang platform ng HUD (Heads-Up Display) na idinisenyo upang mai-mount sa mga helmet ng motorsiklo. Isinulat ito sa konteksto ng paligsahan na "mga mapa". Nakalulungkot, hindi ko ganap na natapos ang proyektong ito sa oras para sa deadline ng paligsahan, ngunit nais kong ibahagi ang aking pag-unlad dito, pati na rin idokumento ang lahat ng pagsubok at error na nakuha ko sa paggawa nito.

Ang ideya para sa proyektong ito ay unang dumating sa akin ilang taon na ang nakalilipas, nang makapasok ako sa mga motorsiklo, at sinisimulan kong tingnan kung anong kagamitang kakailanganin kong bilhin upang mas maging kasiya-siya ang aking mga pagsakay. Sa oras na iyon, ikinagulat ko ito na ang pinakamahusay na paraan upang makakuha ng pangunahing pangunahing pag-navigate sa GPS habang nakasakay ay karaniwang ikabit ang iyong smartphone sa mga handlebar ng iyong bisikleta. Kahit na sa aking sarili na tiyak na, maaaring may isang mas mahusay na paraan upang makuha ang ganoong uri ng impormasyon nang mabilis.

Napunta sa akin iyon: ang isang display sa ulo ay maaaring maging paraan upang makakuha ng nabigasyon habang nakasakay, nang hindi tinatanggal ang baterya ng iyong telepono, at inilantad ito sa mga elemento.

Sa paglipas ng panahon, ang ideyang ito ay nagmahinog sa aking isipan, at kahit na ang pagkakaroon ng isang HUD sa harap ko sa lahat ng oras ay magpapahintulot sa maraming mga paggamit kaysa sa simpleng pag-navigate. Ito ang dahilan kung bakit ang aking plano ay gawing pampubliko at modular ang platform, upang ang sinuman ay maaaring lumikha ng isang module na nagpapakita ng impormasyong kailangan nila sa kanilang sariling HUD

Bagaman may mga magagamit na komersyal na produkto na tinutupad ang gawaing ito, walang anumang modular tulad ng aking platform, at may posibilidad ding maging medyo magastos. Gayunpaman, maligayang pagdating sa proyektong ito.

Ano ang gumagana hanggang ngayon

Tulad ng nakasaad, ang proyektong ito ay pa rin sa isang estado ng pag-unlad, at ito ang kasalukuyang gumagana.

- Komunikasyon sa pagitan ng isang smartphone at isang nakabatay sa board na ESP32 (gising ang telepono)

- Tapos na ang disenyo ng optika (maaaring kailanganin ng maliliit na pagsasaayos sa pangmatagalan)

- Android nabigasyon app gamit ang Mapbox nabigasyon SDK:

- Nagagawa ang pagkalkula at pagpapakita ng posisyon ng gumagamit sa isang mapa, pati na rin isang ruta mula dito patungo sa patutunguhan

- May kakayahang kumonekta sa isang aparatong Bluetooth (ang MAC address ng aparato ay hardcoded hanggang ngayon)

- May kakayahang nabigasyon ng real time, kasama ang pagkuha at pagpapadala ng impormasyon ng paparating na mapaglalangan sa pamamagitan ng serial Bluetooth (sinusuportahan lamang ang pagliko sa ngayon)

Ano ang kailangan ng trabaho

Naglalaman ang lista na ito ng mga item na talagang kinakailangan para sa inilaan na paggamit ng HUD, ngunit hindi pa handa na ipatupad.

- Pangkalahatang disenyo (attachment ng Helmet, mekanismo ng pagsasaayos ng anggulo ng sumasalamin,..)

- Android app:

- Ipatupad ang pagtuklas ng off-ruta at pagwawasto

- Kakayahang mag-input ang gumagamit ng patutunguhang address

- Mga pointpoint?

- Ergonomics / Aesthetics

Mga Pantustos:

Mahahalagang bagay

- Isang esp32 based development board

- Anumang medyo kamakailang android smartphone (pinagana ang Bluetooth)

- Isang SSD1306 o iba pang pinagana na 96 "OLED screen (ang sa akin ay 128x64 pixel, tingnan ang" Ang talino: Microcontroller & Screen "na bahagi)

- Isang salamin (anumang piraso ng acrylic / baso / plexiglass ang gagawin)

- Isang lens ng Fresnel (ang minahan ay may F. haba na mga 13cm, tingnan ang bahagi ng "Pagpili ng lensa")

Mga kasangkapan

- Panghinang

- Breadboard

- Ilang mga kable ng jumper

- Serbisyo ng 3d printer / 3d sa pagpi-print

Hakbang 1: Paano Ito Gumagana: Ipinaliwanag ang Mga Pagpipilian sa Disenyo

Paano Ito Tumatakbo: Ipinaliwanag ang Mga Pagpipilian sa Disenyo
Paano Ito Tumatakbo: Ipinaliwanag ang Mga Pagpipilian sa Disenyo
Paano Ito Tumatakbo: Ipinaliwanag ang Mga Pagpipilian sa Disenyo
Paano Ito Tumatakbo: Ipinaliwanag ang Mga Pagpipilian sa Disenyo
Paano Ito Tumatakbo: Ipinaliwanag ang Mga Pagpipilian sa Disenyo
Paano Ito Tumatakbo: Ipinaliwanag ang Mga Pagpipilian sa Disenyo

Ang pangunahing ideya ng isang Heads Up Display ay upang ipakita ang isang imahe sa harap ng paningin ng isang tao, kaya't hindi nila kailangang lumayo mula sa kung ano man ang kanilang ginagawa (maging ito ay piloto ng isang eroplano, o pagmamaneho ng motorsiklo, na kung saan ay magiging aming halimbawa kaso).

Optics

Teknikal, maaari itong makamit sa pamamagitan ng tuwid na paglalagay ng isang screen sa harap ng mga mata ng gumagamit. Gayunpaman, ang isang screen ay hindi transparent, at samakatuwid ay hadlangan ang paningin ng gumagamit nito. Pagkatapos ay mailalagay mo ang screen sa harap ng isang sumasalamin na ibabaw, na makikita ang salamin ng nilalaman ng screen habang sapat na nakikita-through na nakikita ng gumagamit kung ano ang nasa harap niya.

Gayunpaman, ang diskarte na ito ay may isang malaking kapintasan: ang aktwal na screen ay karaniwang mas malapit sa mga mata ng gumagamit kaysa sa kung ano ang aktwal na dapat pagtuunan ng pansin ng gumagamit (hal. Ang daan sa unahan niya). Nangangahulugan ito na, upang mabasa kung ano ang nasa sumasalamin na ibabaw, ang mga mata ng gumagamit ay kailangang umangkop sa distansya ng display mula sa kanyang mga mata (sabihin nating 20 cm), at pagkatapos ay kailangang muling umangkop upang makapagtutuon sa daan (~ 2/5 metro). Ang oras na tumatagal ng buong operasyon na ito ay mahalagang oras na dapat gugulin na tingnan ang kalsada, at ang madalas na pag-aakma ay maaaring hindi komportable sa gumagamit pagkatapos lamang ng ilang minuto.

Iyon ang dahilan kung bakit napagpasyahan kong magdagdag ng isang lens sa pagitan ng screen at ng reflector. Ang lens na ito, kung pinili nang maingat, ay dapat na payagan ang paglikha ng isang virtual na imahe ng screen (tingnan ang eskematiko sa itaas), na kung saan ay lalabas na mas malayo sa mga mata ng gumagamit tulad ng ito talaga, kung kaya nangangailangan ng mas kaunting mga biglaang pag-aakma (o wala sa lahat, sa isang perpektong senaryo). Pinapayagan ng disenyo na ito para sa gumagamit na mabilis na sumulyap sa reflector, makuha ang impormasyong kailangan niya, at agad na tumingin pabalik sa kalsada.

Ang papel na ginagampanan ng smartphone

Dahil hindi makatotohanang subukan at magpatupad ng isang buong application sa pag-navigate sa ESP32 lamang, nagpasya akong gumawa ng isang android app na mag-aalaga nito. Kakailanganin lamang sabihin ng app na sabihin sa ESP32 kung ano ang dapat gawin ng gumagamit upang makarating sa kanyang patutunguhan, at ang ESP32 ay nagpapasa ng impormasyong iyon kahit na ang HUD (tingnan ang "Paano gumagana ang module" na pigura).

Hakbang 2: Mga Bahagi - ang Mga talino: Microcontroller & Screen

Mga Bahagi - ang Mga talino: Microcontroller & Screen
Mga Bahagi - ang Mga talino: Microcontroller & Screen
Mga Bahagi - ang Mga talino: Microcontroller & Screen
Mga Bahagi - ang Mga talino: Microcontroller & Screen

Tulad ng nakasaad sa itaas, binalak kong magkaroon ng impormasyon sa pag-navigate ang aking module, habang hindi ko talaga ito kalkulahin ang aktwal na pagpoposisyon, pagsubaybay at pag-navigate sa real-time. ang telepono ng gumagamit ay sa halip ay makipag-usap sa modyul, at ipadala ito ang impormasyon upang maipakita sa HUD.

Upang mapadali ang komunikasyon sa pagitan ng telepono ng gumagamit at ng module, pinili kong gumamit ng isang board na nakabatay sa ESP32 para sa proyektong ito. Ang pagpipiliang ito ay dahil sa tukoy na modyul na ito na mayroong pinagsamang mga kakayahan sa Bluetooth, pati na rin ang ilang iba pang mga kagiliw-giliw na pagtutukoy (madaling gamitin na Non-Volatile Storage, dual-core CPU, sapat na RAM upang aktwal na himukin ang OLED display sa pamamagitan ng I2C,…). Ito ay medyo simple upang magdisenyo ng mga PCB batay sa paligid ng ESP32, na isinasaalang-alang ko. Mayroon din akong propesyonal na karanasan sa paggamit at pagdidisenyo ng mga circuit sa ESP32, na tiyak na naiimpluwensyahan ang aking pinili.

Ang pagpili ng screen talaga ay bumaba sa anumang maaari kong makita na kahit na ako ay magiging sapat na maliwanag para sa paggamit ng y, habang maliit din hangga't maaari. Hindi ako masyadong nag-alala tungkol sa bilang ng mga pixel ng screen, dahil ang aking layunin ay magkaroon ng isang napaka minimalistic at simpleng UI.

Dapat pansinin na ang driver ng screen ay dapat suportahan ng isang silid-aklatan na nagpapahintulot sa pag-mirror ng imahe. Iyon ay sapagkat ang ipinakitang imahe ay nabaliktad kapag dumaan ito sa lens at lilitaw sa salamin, at hindi kinakailangang manu-manong baligtarin ang naipakita ay isang malaking bigat mula sa aming mga balikat bilang mga tagabuo.

Hakbang 3: Mga Bahagi - Mga Optika: Paghahanap ng isang Kompromiso

Mga Bahagi - Optika: Paghahanap ng isang Kompromiso
Mga Bahagi - Optika: Paghahanap ng isang Kompromiso
Mga Bahagi - Optika: Paghahanap ng isang Kompromiso
Mga Bahagi - Optika: Paghahanap ng isang Kompromiso
Mga Bahagi - Optika: Paghahanap ng isang Kompromiso
Mga Bahagi - Optika: Paghahanap ng isang Kompromiso

Ang mga optika para sa proyektong ito ay medyo mahirap lapitan, dahil wala akong ideya kung ano ang hinahanap ko pa noong una kong sinimulan ang proyektong ito. Pagkatapos ng ilang pagsasaliksik, naintindihan ko na ang nais kong gawin ay lumikha ng isang "virtual na imahe" ng aking OLED screen, na lalabas na mas malayo sa mata kaysa sa tunay na ito. Ang perpektong distansya para sa virtual na imaheng ito na mabubuo ay nasa humigit-kumulang 2-5 metro sa harap ng drayber, ito ay tila ang distansya sa mga bagay na pinagtutuunan natin kapag nagmamaneho (iba pang mga kotse, mga paga sa kalsada, atbp …).

Upang makamit ang layuning iyon, pinili kong gumamit ng isang Fresnel lens, dahil ang mga ito ay malaki, mura, tila nag-aalok sila ng sapat na sapat na distansya ng pokus para sa aking proyekto, at maaari silang putulin ng mga simpleng gunting (na hindi para sa mas pino ang bilog na hugis ng mga baso ng lente). Ang mga lente ng fresnel ay maaaring matagpuan ang mga pangalan tulad ng "pocket magnifier" o "reading card magnifier", dahil ang mga ito ay napaka-angkop upang matulungan ang mga taong may masamang paningin na basahin.

Talaga, ang bilis ng kamay dito ay tungkol sa paghahanap ng tamang kompromiso sa pagitan ng:

- Ang pagkakaroon ng isang makatwirang distansya ng virtual na imahe (iyon ay, kung gaano kalayo ang magiging HUD sa gumagamit, o kung gaano kalayo aayusin ng gumagamit ang kanyang mga mata upang makita kung ano ang nasa HUD)

- Ang pagkakaroon ng teksto sa screen ay hindi masyadong pinalaki ng lens (na karaniwang isang magnifier)

- Ang pagkakaroon ng isang makatwirang distansya sa pagitan ng OLED screen at ng lens, na kung saan ay hahantong sa isang napaka-malaki module

Personal kong nag-order ng ilang iba't ibang mga lente sa amazon, at tinukoy ang kani-kanilang mga haba ng pagtuon, bago pumili ng isa na may F. haba na mga 13 cm. Natagpuan ko ang F. haba na ito, na may distansya na OLED-Lens na 9cm, binigyan ako ng isang kasiya-siyang imahe sa aking reflector (tingnan ang huling ilang mga imahe sa itaas).

Tulad ng makikita mo sa aking mga guhit, upang maayos na tumuon sa ipinakitang teksto, ang camera na ginamit upang kunan ang mga larawang ito ay kailangang ayusin na parang nakatuon ito sa isang malayong bagay, na ginagawang malabo ang lahat sa iisang eroplano. Ito mismo ang gusto namin para sa aming HUD.

Maaari mong makita ang mga 3d na file para sa may hawak ng lens dito.

Hakbang 4: Mga Bahagi - isang Lalagyan na Hahawak sa Kanila Lahat

Mga Bahagi - isang Lalagyan upang Hawakin Silang Lahat
Mga Bahagi - isang Lalagyan upang Hawakin Silang Lahat
Mga Bahagi - isang Lalagyan upang Hawakin Silang Lahat
Mga Bahagi - isang Lalagyan upang Hawakin Silang Lahat

Habang sinusulat ko ang Mga Instructionable na ito, ang aktwal na lalagyan na hahawak sa bawat piraso ng display na ulo-up ay hindi masyadong dinisenyo. Gayunpaman mayroon akong ilang mga ideya tungkol sa pangkalahatang hugis nito at kung paano lapitan ang ilang mga problema (tulad ng kung paano humawak ng isang salamin, at gawin itong makatiis ng 100+ km / h na hangin). Ito ay ginagawa pa rin ng isinasagawa.

Hakbang 5: Lumilikha ng isang Protocol para sa Aming Modyul

Upang maipadala ang mga tagubilin sa pag-navigate mula sa telepono sa development board, kinailangan kong magkaroon ng isang protocol ng aking sarili na magbibigay-daan sa akin na madaling maipadala ang kinakailangang data mula sa telepono, habang pinapabilis ang pagproseso nito kapag natanggap na.

Sa oras ng pagsulat ng Mga Instructionable na ito, ang impormasyong kinakailangan upang maipasa mula sa telepono upang makapag-navigate sa modyul ay:

- Ang uri ng paparating na maniobra (simpleng pagliko, pag-ikot, pagsasama sa isa pang kalsada, …)

- Ang mga tumpak na tagubilin ng paparating na maneuver (nakasalalay sa uri ng pagmamaneho: kanan / kaliwa para sa isang liko; kung aling exit ang dadalhin para sa isang rotabout, …)

- Ang distansya na natitira bago ang paparating na maneuver (sa metro para sa ngayon)

Napagpasyahan kong ayusin ang data na ito gamit ang sumusunod na istraktura ng frame:

: uri.impluwensya, distansya;

Habang hindi isang magandang solusyon, pinapayagan kami ng isang ito na madaling paghiwalayin at makilala ang bawat larangan ng aming protocol, na pinabilis ang pag-coding sa panig ng ESP32.

Mahalagang tandaan na, para sa mga tampok sa hinaharap, ang ibang impormasyon ay maaaring kailanganing idagdag sa protokol na ito (tulad ng eksaktong araw at oras, o ang musika na pinapatugtog sa telepono ng gumagamit), na madaling magagawa gamit ang pareho pagbuo ng lohika tulad ngayon.

Hakbang 6: Ang Code: Side ng ESP32

Ang Code: Side ng ESP32
Ang Code: Side ng ESP32
Ang Code: Side ng ESP32
Ang Code: Side ng ESP32

Ang code para sa ESP32 ay kasalukuyang medyo simple. Gumagamit ito ng U8g2lib library, na nagbibigay-daan sa madaling kontrol ng OLED screen (habang pinapagana ang pag-mirror ng ipinakitang imahe).

Talaga, ang lahat ng ginagawa ng ESP32 ay makatanggap ng serial data sa pamamagitan ng Bluetooth kapag ipinadala ito ng app, i-parse ito, at ipakita ang data na ito o mga larawan batay sa data na ito (ibig sabihin. Pagpapakita ng isang arrow sa halip na ang pangungusap na "lumiko sa kaliwa / pakanan"). Narito ang code:

/ * Programa upang makontrol ang isang HUD mula sa isang android app sa pamamagitan ng serial bluetooth * / # isama ang "BluetoothSerial.h" // Header File para sa Serial Bluetooth, idaragdag bilang default sa Arduino # isama ang # isama ang #ifdef U8X8_HAVE_HW_SPI # isama ang # endif # ifdef U8X8_HAVE_HW_I2C # isama ang # endif // OLED library konstruktor, kailangang mabago nang naaayon sa iyong screenU8G2_SSD1306_128X64_ALT0_F_HW_I2C u8g2 (U8G2_MIRROR, / * reset = * / U8X8_PIN_NONE); // Estado ng makina na nakilala_field halaga + variable # tukuyin ang maneuverField 1 # tukuyin ang mga tagubilin 2 # tukuyin ang distansyaField 3 # tukuyin ang endOfFrame 4int na nakita_field = endOfFrame; BluetoothSerial serialBT; // Bagay para sa papasok na_chargo ng Bluetooth; char maneuver [10]; char tagubilin [10]; char distansya [10]; char tempManeuver [10]; char tempInstructions [10]; char tempDistance [10]; int nbr_char_maneuver = 0; int nbr_char_instructions = 0; int nbr_char_distance = 0; boolean fullsentence = false; void setup () {Serial.begin (9600); // Start Serial monitor in 9600 bauds u8g2.begin (); // Init OLED control serialBT.begin ("ESP32_BT"); // Pangalan ng pagkaantala ng Bluetooth Signal (20); Serial.println ("Ready to Pair ang Bluetooth Device");} void loop () {if (serialBT.available () &&! Fullsentence) // Mga character na natatanggap sa pamamagitan ng serial ng Bluetooth na {umaabot_char = serialBT.read (); Serial.print ("Natanggap:"); Serial.println (papasok na_char); } lumipat (napansin_field) {case maneuverField: Serial.println ("Natukoy na patlang: maneuver"); kung (papasok_char == '.') // Susunod na patlang na nakita {napansin_field = mga tagubilinField; } iba pa {// Punan ang impormasyon ng uri ng maneuver na array maneuver [nbr_char_maneuver] = papasok_char; nbr_char_maneuver ++; } pahinga; mga tagubilin sa kasoField: Serial.println ("Natukoy na patlang: mga tagubilin"); kung (papasok_char == ',') // Susunod na patlang na nakita {napansin_field = distansyaField; } iba pa {// Punan ang mga tagubilin sa impormasyon ng mga tagubilin sa array [nbr_char_instructions] = papasok_char; nbr_char_instructions ++; } pahinga; case distanceField: Serial.println ("Detected field: distansya"); kung (papasok_char == ';') // Natapos ang End of Frame na nakita {napansin_field = endOfFrame; Serial.print ("maneuver:"); Serial.println (maniobra); Serial.print ("mga tagubilin:"); Serial.println (mga tagubilin); Serial.print ("distansya:"); Serial.println (distansya); fullsentence = totoo; update_Display (); // Buong frame na natanggap, i-parse ito at ipakita ang data ng recever} iba pa {// Punan ang distansya ng hanay ng impormasyon sa distansya [nbr_char_distance] = papasok_char; nbr_char_distance ++; } pahinga; case endOfFrame: kung (papasok_char == ':') napansin_field = maneuverField; // Bagong nakita na frame na break; default: // Huwag masira; } antala (20);} walang bisa ang update_Display () {// Cache bawat char array upang maiwasan ang mga posibleng salungatan na memcpy (tempManeuver, maneuver, nbr_char_maneuver); memcpy (tempInstructions, mga tagubilin, nbr_char_instructions); memcpy (tempDistansya, distansya, nbr_char_distance); parseCache (); // Parse and process char arrays fullsentence = false; // Naproseso ang pangungusap, handa na para sa susunod na} void parseCache () {u8g2.clearBuffer (); // limasin ang panloob na memorya u8g2.setFont (u8g2_font_ncenB10_tr); // pumili ng angkop na font // char arrays -> sapilitan sa string na gumamit ng substring () function String maneuverString = tempManeuver; Mga tagubilin sa StringString = tempInstructions; // Pagpapatupad ng protocol dito. Sinusuportahan lamang ang pagliko sa ngayon. kung (maneuverString.substring (0, 4) == "turn") {// Suriin ang uri ng maneuver na Serial.print ("TURN DETected"); kung (mga tagubilinString.substring (0, 5) == "kanan") {// Suriin ang mga tiyak na tagubilin at ipakita nang naaayon u8g2.drawStr (5, 15, "-"); } iba pa kung (mga tagubilinString.substring (0, 4) == "kaliwa") {// Suriin ang mga tiyak na tagubilin at ipakita nang naaayon u8g2.drawStr (5, 15, "<---"); } iba u8g2.drawStr (5, 15, "Err."); // Di-wastong patlang ng mga tagubilin} / * Ipatupad ang iba pang mga uri ng mapaglalangan (rotonda, atbp.) * Iba pa kung (tempManeuver == "rdbt") {* *] * / u8g2.drawStr (5, 30, tempDistance); // Ipakita ang natitirang distansya u8g2.sendBuffer (); // ilipat ang panloob na memorya sa display // I-reset ang lahat ng mga char array bago ang susunod na pagbabasa memset (maneuver, 0, 10); memset (mga tagubilin, 0, 10); memset (distansya, 0, 10); memset (tempManeuver, 0, 10); memset (tempInstructions, 0, 10); memset (tempDistance, 0, 10); // I-reset ang bilang ng mga elemento sa mga arrays nbr_char_distance = 0; nbr_char_instructions = 0; nbr_char_maneuver = 0;}

Hakbang 7: Ang Code: Android Side

Ang Code: Android Side
Ang Code: Android Side
Ang Code: Android Side
Ang Code: Android Side
Ang Code: Android Side
Ang Code: Android Side

Para sa smartphone app, napagpasyahan kong gamitin ang SDB ng pag-navigate ng Mapbox, dahil nag-aalok ito ng maraming mga kapaki-pakinabang na tampok pagdating sa pagbuo ng isang mapang nabigasyon mula sa simula. Pinapayagan din nito ang paggamit ng maraming kapaki-pakinabang na tagapakinig, na tiyak na makakatulong sa paggana ng modyul na ito. Gumamit din ako ng android-bluetooth-serial library ng harry1453 para sa android, dahil ginawang mas madali ang pagsasama-sama ng serial na Bluetooth.

Kung nais mong buuin ang app na ito sa bahay, kakailanganin mong makakuha ng isang token ng pag-access sa Mapbox, na libre hanggang sa isang tiyak na bilang ng mga kahilingan bawat buwan. Kailangan mong ilagay ang token na ito sa code, at buuin ang app sa iyong panig. Kakailanganin mo ring mag-code sa iyong sariling address ng Bluetooth MAC ng ESP32.

Bilang ito ay nakatayo, ang app ay maaaring gabayan ka mula sa iyong kasalukuyang lokasyon sa anumang lokasyon na maaari mong i-click sa mapa. Tulad ng nabanggit sa intro, gayunpaman, hindi nito sinusuportahan ang anumang iba pang mapaglalangan kaysa sa pagliko, at hindi pa hahawakan ang mga off-ruta.

Mahahanap mo ang buong source code sa aking github.

Hakbang 8: Ano ang Susunod?

Ngayon na ang app ay sapat na gumagana upang talagang gabayan ang gumagamit nito sa isang itinakdang ruta (kung walang mga paglihis mula sa itinakdang ruta), ang aking pangunahing pokus ay upang mapabuti ang smartphone app, at ipatupad ang ilang mga kakayahan na gawing isang module mabubuhay na aparato sa pag-navigate. Kasama rito ang pagpapagana ng komunikasyon ng Bluetooth mula sa telepono kahit na naka-off ang screen, pati na rin ang suporta para sa iba pang mga uri ng maneuver (mga rotonda, pagsasama,…). Magpapatupad din ako ng isang tampok na rerouting kung ang gumagamit ay lumihis mula sa orihinal na ruta.

Kapag tapos na ang lahat ng ito, pagbutihin ko ang lalagyan at ang mekanismo ng pagkakabit nito, i-print ito ng 3d, at subukan at kunin ang module para sa isang unang pagtakbo.

Kung maayos ang lahat, ang aking pangmatagalang layunin ay ang disenyo ng isang pasadyang PCB para sa naka-embed na electronics ng proyektong ito, na makatipid ng maraming puwang sa pangwakas na produkto.

Maaari din akong magdagdag ng iba pang mga tampok sa modyul na ito sa hinaharap, kasama ang isang pagpapakita ng oras, pati na rin ang isang alarma sa abiso sa telepono, na maaaring magpakita ng isang icon kapag nakatanggap ang gumagamit ng isang text message o isang tawag. Sa wakas nais kong magdagdag ng mga kakayahan sa Spotify sa modyul na ito, bilang isang malaking fan ng musika. Gayunpaman, sa puntong ito ng oras, ito ay isang magandang magkaroon lamang.

Hakbang 9: Konklusyon at Espesyal na Salamat

Konklusyon at Espesyal na Salamat!
Konklusyon at Espesyal na Salamat!

Tulad ng nakasaad sa panimula, kahit na ang proyektong ito ay malayo sa pagtatapos, nais kong ibahagi ito sa mundo, sa pag-asang maaari itong magbigay ng inspirasyon sa iba pa. Nais ko ring idokumento ang aking pagsasaliksik sa paksang ito, dahil wala talagang maraming libangan na interes sa AR at HUD, na sa palagay ko ay isang kahihiyan.

Nais kong magbigay ng isang malaking salamat sa Awall99 at Danel Quintana, na ang kani-kanilang pinalaking proyekto sa katotohanan ay nagbigay inspirasyon sa akin ng malaki sa paggawa ng modyul na ito.

Maraming salamat sa inyong pansin, siguraduhin kong mag-post ng isang update kapag napabuti ang proyektong ito sa malapit na hinaharap. Pansamantala, magkita tayong lahat sa paglaon!

Inirerekumendang: