Obsah:

Prototyp inteligentného motocykla HUD (podrobná navigácia a oveľa viac): 9 krokov
Prototyp inteligentného motocykla HUD (podrobná navigácia a oveľa viac): 9 krokov

Video: Prototyp inteligentného motocykla HUD (podrobná navigácia a oveľa viac): 9 krokov

Video: Prototyp inteligentného motocykla HUD (podrobná navigácia a oveľa viac): 9 krokov
Video: Livemap helmet – шлем для байкеров с проекционным дисплеем 2024, Júl
Anonim
Prototyp inteligentného motocykla HUD (podrobná navigácia a oveľa viac)
Prototyp inteligentného motocykla HUD (podrobná navigácia a oveľa viac)
Prototyp inteligentného motocykla HUD (podrobná navigácia a oveľa viac)
Prototyp inteligentného motocykla HUD (podrobná navigácia a oveľa viac)
Prototyp inteligentného motocykla HUD (podrobná navigácia a oveľa viac)
Prototyp inteligentného motocykla HUD (podrobná navigácia a oveľa viac)
Prototyp inteligentného motocykla HUD (podrobná navigácia a oveľa viac)
Prototyp inteligentného motocykla HUD (podrobná navigácia a oveľa viac)

Ahoj !

Tento návod je príbehom o tom, ako som navrhol a postavil platformu HUD (Heads-Up Display) navrhnutú na montáž na motocyklové prilby. Bolo to napísané v kontexte súťaže „mapy“. Je smutné, že som tento projekt nedokázal úplne dokončiť včas, do konca uzávierky súťaže, ale napriek tomu som sa chcel podeliť o svoj pokrok v ňom a zdokumentovať všetky pokusy a omyly, ktoré som pri jeho realizácii dosiahol.

Nápad na tento projekt ma prvýkrát napadol pred niekoľkými rokmi, keď som sa dostal k motorkám a začínal som pátrať, aký výstroj by som si potreboval kúpiť, aby mi jazdenie bolo príjemnejšie. V tom čase ma znepokojovalo, že najlepší spôsob, ako získať základnú navigáciu GPS počas jazdy, je v zásade pripojiť smartphone k riadidlám bicykla. Myslím si, že určite by mohol existovať lepší spôsob, ako získať tieto informácie za behu.

Vtedy ma to dostalo: Head-up displej by mohol byť spôsob, ako získať navigáciu počas jazdy, bez toho, aby ste vybili batériu telefónu a vystavili ju živlom.

Časom mi táto myšlienka dozrela v mysli a ja som si myslel, že mať neustále pred sebou HUD by umožnilo oveľa viac použití ako jednoduchá navigácia. Preto je mojim plánom urobiť platformu verejnou a modulárnou, aby si ktokoľvek mohol vytvoriť modul, ktorý na svojom HUD zobrazuje potrebné informácie

Napriek tomu, že existujú komerčne dostupné produkty, ktoré spĺňajú túto úlohu, nie sú žiadne také modulárne ako moja platforma, a tiež bývajú trochu drahé. V každom prípade vitajte v tomto projekte.

Čo funguje doteraz

Ako bolo uvedené, tento projekt je stále do značnej miery vo fáze vývoja a to je to, čo v súčasnej dobe funguje.

- Komunikácia medzi smartfónom a doskou založenou na ESP32 (bdelý telefón)

- Dokončený návrh optiky (z dlhodobého hľadiska môže byť potrebné vykonať malé úpravy)

- Navigačná aplikácia pre Android používajúca navigačnú súpravu Mapbox SDK:

- Schopný vypočítať a zobraziť polohu používateľa na mape, ako aj trasu z nej do cieľa

- Možnosť pripojenia k zariadeniu Bluetooth (adresa MAC zariadenia je odteraz pevne zakódovaná)

- Schopný navigácie v reálnom čase, vrátane extrahovania a odosielania informácií o nadchádzajúcom manévri prostredníctvom sériového rozhrania Bluetooth (zatiaľ podporuje iba zákruty)

Čo potrebuje prácu

Tento zoznam obsahuje položky, ktoré sú nevyhnutné pre zamýšľané použitie HUD, ale ešte nie sú pripravené na implementáciu.

- Celkový dizajn (uchytenie prilby, mechanizmus nastavenia uhla reflektora,..)

- aplikácia pre Android:

- Implementujte detekciu a opravu mimo trasy

- Schopnosť používateľa zadať cieľovú adresu

- Trasové body?

- Ergonómia / Estetika

Zásoby:

Náležitosti

- Vývojová doska založená na esp32

- Akýkoľvek nedávny smartphone s Androidom (povolené Bluetooth)

- SSD1306 alebo iná povolená 96 -palcová OLED obrazovka (moja mala 128 x 64 pixelov, pozri časť „Mozgy: mikrokontrolér a obrazovka“)

- Reflektor (postačí akýkoľvek kus akrylu/skla/plexiskla)

- Fresnelov objektív (môj mal dĺžku F asi 13 cm, pozri časť „Voľba objektívu“)

Nástroje

- Spájkovačka

- Breadboard

- Niekoľko prepojovacích káblov

- 3D tlačiareň / služba 3D tlače

Krok 1: Ako to všetko funguje: Vysvetlené možnosti dizajnu

Ako to všetko funguje: Vysvetlené možnosti dizajnu
Ako to všetko funguje: Vysvetlené možnosti dizajnu
Ako to všetko funguje: Vysvetlené možnosti dizajnu
Ako to všetko funguje: Vysvetlené možnosti dizajnu
Ako to všetko funguje: Vysvetlené možnosti dizajnu
Ako to všetko funguje: Vysvetlené možnosti dizajnu

Základnou myšlienkou Heads Up Display je zobraziť obrázok pred zrakom niekoho iného, aby nemusel odvrátiť zrak od toho, čo robí (či už ide o pilotovanie lietadla alebo riadenie motocykla), čo bude náš príklad).

Optika

Technicky to možno dosiahnuť priamym umiestnením obrazovky pred oči používateľa. Obrazovka však nie je priehľadná, a preto by bránila používateľovi vo videní. Potom by ste mohli obrazovku umiestniť pred reflexný povrch, ktorý by zrkadlil obsah obrazovky a zároveň bol dostatočne priehľadný, aby používateľ videl, čo je pred ním.

Tento prístup má však obrovskú chybu: skutočná obrazovka je zvyčajne bližšie k očiam používateľa, než na čo sa má užívateľ v skutočnosti zamerať (napr. Cesta pred ním). To znamená, že na to, aby sa čitateľ dozvedel, čo je na reflexnom povrchu, by sa oči užívateľa museli prispôsobiť vzdialenosti displeja od očí (povedzme 20 cm) a potom by sa museli znova prispôsobiť, aby sa mohli zamerať na cestu pred sebou. (~ 2/5 metrov). Čas, ktorý trvá celá táto operácia, je drahocenný čas, ktorý by ste mali stráviť pozeraním sa na cestu, a časté prispôsobovanie sa môže byť užívateľovi nepríjemné už po niekoľkých minútach.

Preto som sa rozhodol pridať šošovku medzi obrazovku a reflektor. Tento objektív, ak je vybraný starostlivo, by mal umožniť vytvorenie virtuálneho obrazu obrazovky (pozri schému vyššie), ktorý by sa potom zdal byť ďalej od očí používateľa, ako v skutočnosti je, a preto vyžaduje menej náhlych úprav (alebo vôbec žiadny, v perfektnom scenári). Tento dizajn umožňuje užívateľovi rýchlo sa pozrieť na reflektor, získať potrebné informácie a okamžite sa pozrieť späť na cestu.

Úloha smartfónu

Pretože bolo nereálne pokúsiť sa implementovať celú navigačnú aplikáciu iba na ESP32, rozhodol som sa vytvoriť aplikáciu pre Android, ktorá sa o to postará. Aplikácii potom stačí povedať ESP32, čo musí používateľ urobiť, aby sa dostal do cieľa, a ESP32 tieto informácie sprostredkuje pomocou HUD (pozri obrázok „Ako modul funguje“).

Krok 2: Časti - Mozgy: mikrokontrolér a obrazovka

Časti - Mozgy: Mikrokontrolér a obrazovka
Časti - Mozgy: Mikrokontrolér a obrazovka
Časti - Mozgy: Mikrokontrolér a obrazovka
Časti - Mozgy: Mikrokontrolér a obrazovka

Ako som už uviedol vyššie, plánoval som, aby môj modul zobrazoval navigačné informácie, pričom v skutočnosti to nebude mať výpočet skutočného určovania polohy, sledovania a navigácie v reálnom čase. používateľský telefón namiesto toho bude komunikovať s modulom a odošle mu informácie, ktoré sa majú potom zobraziť na HUD.

Na uľahčenie komunikácie medzi telefónom používateľa a modulom som pre tento projekt zvolil použitie dosky založenej na ESP32. Táto voľba bola daná týmto konkrétnym modulom, ktorý má integrované možnosti Bluetooth, a niekoľkými ďalšími zaujímavými špecifikáciami (ľahko použiteľné neprchavé úložisko, dvojjadrový procesor, dostatok pamäte RAM na skutočné ovládanie OLED displeja cez I2C, …). Je pomerne jednoduché navrhnúť DPS založené na ESP32, čo som vzal do úvahy. Mám tiež profesionálne skúsenosti s používaním a navrhovaním obvodov s ESP32, čo rozhodne ovplyvnilo môj výber.

Voľba obrazovky v zásade spočívala v tom, čo som zistil, že by som bol dostatočne jasný na to, aby som ich mohol používať, a zároveň bol čo najmenší. O počet pixelov obrazovky som sa veľmi nebál, pretože mojim cieľom bolo mať veľmi minimalistické a jednoduché používateľské rozhranie.

Je potrebné poznamenať, že ovládač obrazovky by mal byť podporovaný knižnicou, ktorá umožňuje zrkadlenie obrazu. Dôvodom je, že zobrazený obrázok sa prevráti, keď prejde objektívom, a objaví sa na reflektore, a nemať potrebu ručne obracať to, čo sa zobrazuje, je obrovskou záťažou z našich ramien ako staviteľov.

Krok 3: Diely - Optika: Hľadanie kompromisu

Diely - Optika: Hľadanie kompromisu
Diely - Optika: Hľadanie kompromisu
Diely - Optika: Hľadanie kompromisu
Diely - Optika: Hľadanie kompromisu
Diely - Optika: Hľadanie kompromisu
Diely - Optika: Hľadanie kompromisu

K optike tohto projektu bolo dosť ťažké sa dostať, pretože som vôbec netušil, čo som hľadal, keď som s týmto projektom prvýkrát začínal. Po troche výskumu som pochopil, že chcem vytvoriť „virtuálny obraz“svojej obrazovky OLED, ktorý sa bude zdať byť ďalej od oka, ako v skutočnosti je. Ideálna vzdialenosť na vytvorenie tohto virtuálneho obrazu by bola asi 2 až 5 metrov pred vodičom, zdá sa, že je to vzdialenosť k predmetom, na ktoré sa pri jazde zameriavame (iné autá, nerovnosti na ceste atď.)).

Na dosiahnutie tohto cieľa som sa rozhodol použiť Fresnelovu šošovku, pretože sú dosť veľké, lacné a zdá sa, že ponúka dostatočne dobrú ohniskovú vzdialenosť pre môj projekt, a dajú sa strihať jednoduchými nožnicami (čo nie je prípad rafinovanejšie sklenené šošovky okrúhleho tvaru). Fresnelove šošovky možno nájsť pod názvami ako „vrecková lupa“alebo „lupa na čítanie kariet“, pretože sú veľmi vhodné na pomoc ľuďom so zlým zrakom pri čítaní.

V zásade tu išlo o to, nájsť správny kompromis medzi:

- Mať primeranú vzdialenosť virtuálneho obrazu (to znamená, ako ďaleko sa používateľovi bude zdať HUD alebo ako ďaleko bude musieť používateľ upraviť oči, aby zistil, čo je na HUD).

- Text na obrazovke nesmie byť objektívom príliš zväčšený (čo je v podstate lupa)

- V primeranej vzdialenosti medzi obrazovkou OLED a objektívom, ktorá by inak viedla k veľmi objemnému modulu

Osobne som si na Amazone objednal niekoľko rôznych šošoviek a určil som ich príslušné ohniskové vzdialenosti, potom som si vybral ten s dĺžkou F asi 13 cm. Zistil som, že táto dĺžka F. so vzdialenosťou šošovky OLED 9 cm mi poskytla uspokojivý obraz na mojom reflektore (pozri niekoľko posledných obrázkov vyššie).

Ako vidíte na mojich ilustráciách, na to, aby sa fotoaparát použitý na zhotovenie týchto fotografií správne zaostril na zobrazený text, sa musí prispôsobiť tak, ako keby zaostroval na vzdialený predmet, čím sa zdá, že je všetko v rovnakej rovine ako reflektor rozmazané.. Presne to chceme pre náš HUD.

3d súbory pre držiak objektívu nájdete tu.

Krok 4: Diely - kontajner, ktorý ich všetky uchová

Diely - kontajner, ktorý pojme všetky
Diely - kontajner, ktorý pojme všetky
Diely - kontajner, ktorý pojme všetky
Diely - kontajner, ktorý pojme všetky

Keď píšem tento návod, skutočný kontajner, do ktorého sa zmestí každý kus heads-up displeja, nie je celkom navrhnutý. Mám však niekoľko myšlienok o jeho všeobecnom tvare a o tom, ako pristupovať k určitým problémom (napríklad ako držať reflektor nehybne a odolávať vetru s rýchlosťou viac ako 100 km/h). Toto je stále veľmi nedokončená práca.

Krok 5: Vytvorenie protokolu pre náš modul

Aby som mohol navigačné pokyny z telefónu odosielať na vývojovú dosku, musel som vymyslieť vlastný komunikačný protokol, ktorý mi umožní ľahko odosielať požadované údaje z telefónu a zároveň uľahčí ich spracovanie po prijatí.

V čase písania tohto dokumentu s pokynmi boli informácie, ktoré bolo potrebné odoslať z telefónu, aby bolo možné navigovať pomocou modulu:

- Typ pripravovaného manévru (jednoduchá odbočka, kruhový objazd, zlúčenie na inú cestu, …)

- Presné pokyny nadchádzajúceho manévru (v závislosti od typu manévru: vpravo/vľavo na odbočenie; ktorým výjazdom sa vydať na kruhový objazd, …)

- Zostávajúca vzdialenosť pred nadchádzajúcim manévrom (zatiaľ v metroch)

Tieto údaje som sa rozhodol usporiadať pomocou nasledujúcej rámcovej štruktúry:

: typ. návod, vzdialenosť;

Aj keď to nie je krásne riešenie, toto nám umožňuje ľahko oddeliť a rozlíšiť každé pole nášho protokolu, čo uľahčilo kódovanie na strane ESP32.

Je dôležité mať na pamäti, že pre budúce funkcie môže byť do tohto protokolu potrebné doplniť ďalšie informácie (napríklad presný deň a čas alebo hudbu prehrávanú v telefóne používateľa), ktoré by bolo možné ľahko vykonať pomocou rovnakých stavebná logika ako teraz.

Krok 6: Kód: Side ESP32

Kód: ESP32 Side
Kód: ESP32 Side
Kód: ESP32 Side
Kód: ESP32 Side

Kód pre ESP32 je v súčasnej dobe celkom jednoduchý. Využíva knižnicu U8g2lib, ktorá umožňuje jednoduché ovládanie OLED obrazovky (pričom umožňuje zrkadlenie zobrazeného obrazu).

V zásade všetko, čo ESP32 robí, je prijímať sériové údaje cez Bluetooth, keď ich aplikácia odosiela, analyzovať ich a zobrazovať tieto údaje alebo obrázky na základe týchto údajov (tj. Namiesto vety „odbočiť vľavo/vpravo“zobraziť šípku). Tu je kód:

/*Program na ovládanie HUD z aplikácie pre Android prostredníctvom sériového bluetooth*/#zahrnúť „BluetoothSerial.h“// Hlavičkový súbor pre sériové Bluetooth, bude predvolene pridaný do Arduina#zahrnúť #include #ifdef U8X8_HAVE_HW_SPI#zahrnúť#endif# ifdef U8X8_HAVE_HW_I2C #include #endif // OLED konstruktor knižnice, je potrebné zodpovedajúcim spôsobom zmeniť na vašu obrazovkuU8G2_SSD1306_128X64_ALT0_F_HW_I2C u8g2 (U8G2_MIRROR,/* reset =*/U8X8_PIN_NONE); // Hodnoty poľa detekované strojovým stavom + premenná#definovať manéver Pole 1#definovať pokyny Pole 2#definovať vzdialenosť Pole 3#definovať endOfFrame 4int detekované pole = endOfFrame; BluetoothSerial serialBT; // Objekt pre Bluetoothchar incoming_char; char maneuver [10]; inštrukcie k znaku [10]; char vzdialenosť [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); // Spustite sériový monitor s 9600 baudmi u8g2.begin (); // Init OLED control serialBT.begin ("ESP32_BT"); // Názov oneskorenia signálu Bluetooth (20); Serial.println („Zariadenie Bluetooth je pripravené na párovanie“);} void loop () {if (serialBT.available () &&! Fullsentence) // Znaky prijímané cez Bluetooth serial {incoming_char = serialBT.read (); Serial.print ("Prijaté:"); Serial.println (incoming_char); } prepínač (detekované_pole) {case maneuverField: Serial.println ("Zistené pole: manéver"); if (incoming_char == '.') // Zistené ďalšie pole {detekované_pole = instrukcieField; } else {// Vyplňte typ manévru info pole manéver [nbr_char_maneuver] = incoming_char; nbr_char_maneuver ++; } prestávka; pole s pokynmiPole: Serial.println ("Zistené pole: pokyny"); if (incoming_char == ',') // Bolo zistené ďalšie pole {detekované_pole = vzdialenosťPole; } else {// Vyplňte pokyny pole informácií [nbr_char_instructions] = incoming_char; nbr_char_instructions ++; } prestávka; case distanceField: Serial.println ("Zistené pole: vzdialenosť"); if (incoming_char == ';') // Zistený koniec rámca {detekované_pole = endOfFrame; Serial.print ("manéver:"); Serial.println (manéver); Serial.print ("návod:"); Serial.println (pokyny); Serial.print ("vzdialenosť:"); Serial.println (vzdialenosť); úplná veta = pravda; update_Display (); // Prijal sa celý rámec, analyzujte ho a zobrazte údaje prijímača} else {// Vyplňte vzdialenosť poľa s informáciami o vzdialenosti [nbr_char_distance] = incoming_char; nbr_char_distance ++; } prestávka; case endOfFrame: if (incoming_char == ':') detekované_pole = maneuverField; // Nový rámec zistil zlom; predvolené: // Nerobte nič; } delay (20);} void update_Display () {// Uloží do pamäte každé pole znakov, aby sa predišlo možným konfliktom memcpy (tempManeuver, maneuver, nbr_char_maneuver); memcpy (tempInstructions, instructions, nbr_char_instructions); memcpy (tempDistance, distance, nbr_char_distance); parseCache (); // Analyzujte a spracujte pole char fullsentence = false; // Veta spracovaná, pripravená na ďalšiu} neplatné parseCache () {u8g2.clearBuffer (); // vymazanie vnútornej pamäte u8g2.setFont (u8g2_font_ncenB10_tr); // vyberte vhodné písmo // char pole -> reťazec povinný na použitie funkcie substring () String maneuverString = tempManeuver; Reťazec príkazovString = tempInstructions; // Implementačný protokol tu. Zatiaľ podporuje iba zákruty. if (maneuverString.substring (0, 4) == "turn") {// Skontrolujte typ manévru Serial.print ("ZATOČENÉ ZATOČENÉ"); if (instructionsString.substring (0, 5) == "right") {// Skontrolujte konkrétne pokyny a podľa toho zobrazte u8g2.drawStr (5, 15, "-"); } else if (guidelinesString.substring (0, 4) == "left") {// Skontrolujte konkrétne pokyny a podľa toho zobrazte u8g2.drawStr (5, 15, "<---"); } else u8g2.drawStr (5, 15, "Chyba"); // Neplatné pole s pokynmi}/ * Implementujte ďalšie typy manévrov (kruhové objazdy atď.) * Else if (tempManeuver == "rdbt") { * *] */ u8g2.drawStr (5, 30, tempDistance); // Zobrazenie zostávajúcej vzdialenosti u8g2.sendBuffer (); // prenos internej pamäte na displej // Pred ďalším čítaním memset (manéver, 0, 10) vynulujte všetky polia znakov. memset (inštrukcie, 0, 10); súprava (vzdialenosť, 0, 10); memset (tempManeuver, 0, 10); memset (tempInstructions, 0, 10); memset (tempDistance, 0, 10); // Reset počtu prvkov v poliach nbr_char_distance = 0; nbr_char_instructions = 0; nbr_char_maneuver = 0;}

Krok 7: Kód: Android

Kód: Android Side
Kód: Android Side
Kód: Android Side
Kód: Android Side
Kód: Android Side
Kód: Android Side

V aplikácii pre smartfóny som sa rozhodol použiť navigačnú súpravu Mapbox SDK, pretože pri vytváraní navigačnej mapy od začiatku ponúka veľa užitočných funkcií. Umožňuje tiež použitie mnohých užitočných poslucháčov, ktorí rozhodne pomáhajú pri fungovaní tohto modulu. Tiež som použil harry1453 android-bluetooth-sériovú knižnicu pre Android, pretože to uľahčilo zostavenie sériovej komunikácie Bluetooth.

Ak si chcete túto aplikáciu postaviť doma, budete potrebovať prístupový token Mapbox, ktorý je bezplatný až do určitého počtu žiadostí za mesiac. Tento token budete musieť vložiť do kódu a vytvoriť aplikáciu na svojej strane. Budete tiež musieť zadať MAC adresu Bluetooth vášho vlastného ESP32.

Aplikácia vás v aktuálnom stave prevedie z vášho aktuálneho miesta na akékoľvek miesto, na ktoré môžete kliknúť na mape. Ako je uvedené v úvode, nepodporuje však žiadny iný manéver ako zákruty a zatiaľ nezvláda trasy.

Celý zdrojový kód nájdete na mojom github.

Krok 8: Čo bude ďalej?

Teraz, keď je aplikácia dostatočne funkčná na to, aby skutočne viedla svojho používateľa po stanovenej trase (ak neexistujú odchýlky od nastavenej trasy), zameriam sa predovšetkým na vylepšenie aplikácie pre smartfóny a implementáciu niekoľkých funkcií, ktoré by z modulu urobili životaschopné navigačné zariadenie. To zahŕňa povolenie komunikácie Bluetooth z telefónu, aj keď je obrazovka vypnutá, ako aj podporu ďalších typov manévrov (kruhové objazdy, spájanie, …). Implementujem aj funkciu presmerovania, ak sa používateľ odchýli od pôvodnej trasy.

Keď je toto všetko hotové, vylepším kontajner a mechanizmus jeho pripevnenia, vytlačím ho 3D a pokúsim sa vziať modul na prvé spustenie.

Ak všetko pôjde dobre, mojim dlhodobým cieľom je navrhnúť vlastnú dosku plošných spojov pre vstavanú elektroniku tohto projektu, ktorá by ušetrila veľa miesta na konečnom produkte.

V budúcnosti by som mohol do tohto modulu pridať aj ďalšie funkcie, vrátane zobrazenia času a budíka s upozornením na telefón, vďaka ktorému sa po prijatí textovej správy alebo hovoru zobrazí ikona. Nakoniec by som rád ako veľký fanúšik hudby pridal do tohto modulu možnosti Spotify. V tejto chvíli je však len pekné mať to.

Krok 9: Záver a špeciálne poďakovanie

Záver a špeciálne poďakovanie!
Záver a špeciálne poďakovanie!

Ako sa uvádza v úvode, aj keď tento projekt nie je ani zďaleka dokončený, naozaj som sa oň chcel podeliť so svetom v nádeji, že by mohol inšpirovať niekoho iného. Tiež som chcel zdokumentovať svoj výskum na túto tému, pretože o AR a HUD nie je v skutočnosti veľký záujem fanúšikov, čo je podľa mňa škoda.

Chcem sa veľmi pekne poďakovať Awall99 a Danelovi Quintanovi, ktorého príslušný projekt rozšírenej reality ma pri tvorbe tohto modulu veľmi inšpiroval.

Ďakujem vám všetkým za pozornosť. Keď bude v blízkej budúcnosti tento projekt vylepšený, určite zverejním aktualizáciu. Medzitým sa uvidíme všetci neskôr!

Odporúča: