Բովանդակություն:

Smart Motorcycle HUD- ի նախատիպը (շրջադարձային նավարկություն և շատ ավելին). 9 քայլ
Smart Motorcycle HUD- ի նախատիպը (շրջադարձային նավարկություն և շատ ավելին). 9 քայլ

Video: Smart Motorcycle HUD- ի նախատիպը (շրջադարձային նավարկություն և շատ ավելին). 9 քայլ

Video: Smart Motorcycle HUD- ի նախատիպը (շրջադարձային նավարկություն և շատ ավելին). 9 քայլ
Video: Տանուկին բարձր արագությամբ իջնում ​​է բլուրը!! 🛹🌪🦊 - Tanuki Sunset Classic GamePlay 🎮📱 🇦🇲 2024, Հուլիսի
Anonim
Smart Motorcycle HUD նախատիպը (շրջադարձային նավարկություն և շատ ավելին)
Smart Motorcycle HUD նախատիպը (շրջադարձային նավարկություն և շատ ավելին)
Smart Motorcycle HUD նախատիպը (շրջադարձային նավարկություն և շատ ավելին)
Smart Motorcycle HUD նախատիպը (շրջադարձային նավարկություն և շատ ավելին)
Smart Motorcycle HUD նախատիպը (շրջադարձային նավարկություն և շատ ավելին)
Smart Motorcycle HUD նախատիպը (շրջադարձային նավարկություն և շատ ավելին)
Smart Motorcycle HUD նախատիպը (շրջադարձային նավարկություն և շատ ավելին)
Smart Motorcycle HUD նախատիպը (շրջադարձային նավարկություն և շատ ավելին)

Ողջու՜յն !

This Instructables- ը այն պատմությունն է, թե ինչպես եմ ես նախագծել և կառուցել HUD (Heads-Up Display) հարթակ, որը նախատեսված է մոտոցիկլետների սաղավարտների վրա տեղադրելու համար: Այն գրվել է «քարտեզներ» մրցույթի համատեքստում: Lyավոք, ես չկարողացա ամբողջովին ավարտել այս նախագիծը ժամանակին մրցույթի վերջնաժամկետի համար, բայց ես դեռ ուզում էի կիսվել դրա վերաբերյալ իմ առաջընթացով, ինչպես նաև փաստաթղթավորել այն կատարած փորձությունների և սխալների մասին:

Այս նախագծի գաղափարն առաջին անգամ ծագեց մի քանի տարի առաջ, երբ մոտոցիկլետ վարեցի, և ես սկսեցի մտածել, թե ինչ հանդերձանք պետք է գներ, որպեսզի իմ զբոսանքներն ավելի հաճելի լինեն: Այն ժամանակ ինձ տարակուսեց, որ հեծանիվ վարելիս հիմնական GPS նավարկություն ստանալու լավագույն միջոցը հիմնականում սմարթֆոնը կցելն է հեծանիվի ղեկին: Ես ինքս ինձ վստահ եմ, որ, անկասկած, կարող է ավելի լավ միջոց լինել նման տեղեկատվություն ձեռք բերելու համար:

Դա այն ժամանակն էր, երբ հասավ ինձ. Գլխի բարձրացման էկրանը կարող է լինել նավարկության ընթացքում նավարկություն ստանալու միջոց ՝ առանց դատարկելու ձեր հեռախոսի մարտկոցը և այն ենթարկելով տարրերին:

Timeամանակի ընթացքում այս միտքը հասունացավ իմ մտքում, և ես չնայած այն բանին, որ միշտ իմ առջև HUD ունենալը շատ ավելի շատ օգտագործումներ թույլ կտար, քան պարզ նավարկությունը: Ահա թե ինչու է իմ պլանը հարթակը դարձնել հանրային և մոդուլային, այնպես որ յուրաքանչյուրը կարող է ստեղծել մոդուլ, որը կցուցադրի անհրաժեշտ տեղեկատվությունը սեփական HUD- ում

Չնայած կան կոմերցիոնորեն մատչելի ապրանքներ, որոնք կատարում են այս խնդիրը, չկան այնպիսիք, որոնք մոդուլային են, ինչպես իմ հարթակը, և դրանք նույնպես մի փոքր թանկ են: Ինչևէ, բարի գալուստ այս նախագիծ:

Ինչ է աշխատում այս պահի դրությամբ

Ինչպես նշվեց, այս նախագիծը դեռ շատ զարգացման փուլում է, և սա այն է, ինչ այժմ աշխատում է:

- Հաղորդակցություն սմարթֆոնի և ESP32- ի վրա հիմնված տախտակի միջև (հեռախոսը արթուն է)

- Օպտիկայի դիզայնը կատարված է (երկարաժամկետ հեռանկարում կարող են անհրաժեշտ լինել փոքր ճշգրտումներ)

- Android նավարկության ծրագիր ՝ օգտագործելով Mapbox նավիգացիոն SDK- ն.

- Կարող է հաշվարկել և ցուցադրել օգտվողի դիրքը քարտեզի վրա, ինչպես նաև երթուղուց դեպի նպատակակետ

- Կարող է միանալ Bluetooth սարքին (սարքի MAC հասցեն առայժմ կոդավորված է)

- Իրական ժամանակում նավարկելու ունակություն, ներառյալ սերիական Bluetooth- ի միջոցով առաջիկա մանևրի տեղեկատվության արդյունահանումը և ուղարկումը (առայժմ աջակցում է միայն շրջադարձերը)

Այն, ինչ աշխատանքի կարիք ունի

Այս ցանկը պարունակում է տարրեր, որոնք բացարձակապես անհրաժեշտ են HUD- ի նպատակային օգտագործման համար, բայց դեռ պատրաստ չեն իրականացման:

- Ընդհանուր դիզայն (սաղավարտի ամրացում, ռեֆլեկտորի անկյունը կարգավորող մեխանիզմ,..)

- Android ծրագիր.

- Իրականացնել ճանապարհից դուրս հայտնաբերում և ուղղում

- Օգտագործողի համար նպատակակետի հասցեն մուտքագրելու ունակություն

- Wayանապարհի՞ն:

- Էրգոնոմիկա / գեղագիտություն

Պարագաներ:

Էական

- esp32- ի վրա հիմնված զարգացման տախտակ

- somewhatանկացած փոքր ինչ android սմարթֆոն (Bluetooth- ը միացված է)

- SSD1306 կամ այլ միացված 96 դյույմանոց OLED էկրան (իմը 128x64 պիքսել էր, տե՛ս «Ուղեղը. Միկրոկոնտրոլեր և էկրան» մաս)

- Ռեֆլեկտոր (ակրիլ/ապակի/պլեքսիգլասի ցանկացած կտոր կանի)

- Ֆրենելի ոսպնյակ (իմն ուներ F. երկարություն մոտ 13 սմ, տես «Տեսապակի ընտրություն» մաս)

Գործիքներ

- oldոդման երկաթ

- Breadboard

- Մի քանի ցատկող մալուխ

- 3D տպիչ / 3D տպագրության ծառայություն

Քայլ 1. Ինչպես է ամեն ինչ աշխատում. Բացատրվում են դիզայնի ընտրությունները

Ինչպես է ամեն ինչ աշխատում. Դիզայնի ընտրությունը բացատրված է
Ինչպես է ամեն ինչ աշխատում. Դիզայնի ընտրությունը բացատրված է
Ինչպես է ամեն ինչ աշխատում. Դիզայնի ընտրությունը բացատրված է
Ինչպես է ամեն ինչ աշխատում. Դիզայնի ընտրությունը բացատրված է
Ինչպես է ամեն ինչ աշխատում. Դիզայնի ընտրությունը բացատրված է
Ինչպես է ամեն ինչ աշխատում. Դիզայնի ընտրությունը բացատրված է

Heads Up Display- ի հիմնական գաղափարն այն է, որ ինչ -որ մեկի աչքի առջև պատկեր ցուցադրվի, որպեսզի նրանք ստիպված չլինեն հայացք նետել այն ամենից, ինչ անում են (լինի դա ինքնաթիռ վարելը, թե մոտոցիկլ վարելը, որը մերն է լինելու): օրինակ գործ):

Օպտիկա

Տեխնիկապես դրան կարելի է հասնել ՝ ուղղակիորեն էկրան դնելով օգտագործողի աչքերի առջև: Այնուամենայնիվ, էկրանը թափանցիկ չէ և, հետևաբար, կխոչընդոտի նրա օգտագործողի տեսլականին: Այնուհետև կարող եք էկրանը տեղադրել ռեֆլեկտիվ մակերևույթի դիմաց, որն արտացոլում է էկրանի բովանդակությունը ՝ միևնույն ժամանակ բավականաչափ թափանցիկ, որպեսզի օգտագործողը կարողանա տեսնել իր առջևում եղածը:

Այնուամենայնիվ, այս մոտեցումն ունի հսկայական թերություն. Իրական էկրանը սովորաբար ավելի մոտ է օգտագործողի աչքերին, քան այն, ինչ իրականում օգտվողը պետք է կենտրոնանա (օրինակ ՝ իրենից առաջ ճանապարհը): Սա նշանակում է, որ ռեֆլեկտիվ մակերևույթի վրա կարդալը, օգտագործողի աչքերը պետք է հարմարվեն իր աչքերից ցուցադրվող հեռավորությանը (ասենք 20 սմ), այնուհետև նորից պետք է հարմարվի ՝ առաջիկա ճանապարհին կենտրոնանալու համար: (~ 2/5 մետր): Այս ամբողջ գործողության տևողությունը թանկարժեք ժամանակ է, որը պետք է ծախսվի ճանապարհին նայելու համար, և հաճախակի հարմարվելը կարող է անհարմար լինել օգտագործողի համար ընդամենը մի քանի րոպե անց:

Այդ պատճառով ես որոշեցի ոսպնյակ ավելացնել էկրանի և անդրադարձիչի միջև: Այս ոսպնյակը, եթե ուշադիր ընտրվի, պետք է թույլ տա ստեղծել էկրանի վիրտուալ պատկեր (տե՛ս վերևի սխեման), որն այնուհետև, ըստ երևույթին, ավելի հեռու կլինի օգտագործողի աչքերից, հետևաբար պահանջելով ավելի քիչ կտրուկ հարմարեցումներ (կամ ընդհանրապես, կատարյալ սցենարով): Այս դիզայնը թույլ է տալիս օգտվողին արագ հայացք նետել անդրադարձիչի վրա, ստանալ իրեն անհրաժեշտ տեղեկատվությունը և ակնթարթորեն հետ նայել դեպի ճանապարհը:

Սմարթֆոնի դերը

Քանի որ անիրատեսական էր միայն ESP32- ում մի ամբողջ նավիգացիոն ծրագիր ներդնելը, ես որոշեցի պատրաստել Android ծրագիր, որը կհոգա այս մասին: Այնուհետև հավելվածը պարզապես պետք է ESP32- ին ասի, թե ինչ պետք է անի օգտվողը ՝ իր նպատակակետին հասնելու համար, և ESP32- ը այդ տեղեկատվությունը փոխանցում է HUD- ով (տես «Ինչպես է աշխատում մոդուլը» նկարը):

Քայլ 2: Մասեր. Ուղեղներ. Միկրոկոնտրոլեր և էկրան

Մասեր - ուղեղը. Միկրոկոնտրոլեր և էկրան
Մասեր - ուղեղը. Միկրոկոնտրոլեր և էկրան
Մասեր - ուղեղը. Միկրոկոնտրոլեր և էկրան
Մասեր - ուղեղը. Միկրոկոնտրոլեր և էկրան

Ինչպես նշվեց վերևում, ես պլանավորում էի, որ իմ մոդուլը ցուցադրեր նավիգացիոն տեղեկություններ, մինչդեռ իրականում դրանք չունենալով հաշվարկել իրական դիրքը, հետևումը և իրական ժամանակի նավարկությունը: օգտվողի հեռախոսը փոխարենը կշփվի մոդուլի հետ և կուղարկի այն տեղեկատվությունը, որը կցուցադրվի HUD- ում:

Օգտվողի հեռախոսի և մոդուլի միջև հաղորդակցությունը հեշտացնելու համար ես ընտրեցի այս նախագծի համար օգտագործել ESP32 տախտակ: Այս ընտրությունը պայմանավորված էր այս հատուկ մոդուլով, որն ունի ինտեգրված Bluetooth հնարավորություններ, ինչպես նաև մի քանի այլ հետաքրքիր բնութագրեր (հեշտ օգտագործման համար ոչ անկայուն պահեստավորում, երկմիջուկ պրոցեսոր, բավականաչափ RAM ՝ OLED էկրանն իրականում I2C- ի միջոցով վարելու համար …): ESP32- ի շուրջ հիմնված PCB- ների նախագծումը համեմատաբար պարզ է, ինչը ես հաշվի եմ առել: Ես նաև մասնագիտական փորձ ունեմ ESP32- ով սխեմաներ օգտագործելու և նախագծելու համար, ինչը միանշանակ ազդեց իմ ընտրության վրա:

Էկրանի ընտրությունը հիմնականում ընկնում էր այն ամենի վրա, ինչ ես կարող էի գտնել, որ չնայած այն բավականին պայծառ կլիներ ձեր օգտագործման համար, միևնույն ժամանակ հնարավորինս փոքր լինելով: Ինձ շատ չէր անհանգստացնում էկրանի պիքսելների քանակը, քանի որ իմ նպատակը շատ մինիմալիստական և պարզ UI ունենալն էր:

Պետք է նշել, որ էկրանի վարորդին պետք է աջակցել գրադարանը, որը թույլ է տալիս պատկերների հայելապատում: Դա պայմանավորված է նրանով, որ ցուցադրվող պատկերը շրջվում է, երբ այն անցնում է ոսպնյակի միջով և հայտնվում է ռեֆլեկտորի վրա, և այն, ինչ ցուցադրվում է ձեռքով, չպահանջելը հսկայական բեռ է մեր ուսերից ՝ որպես շինարարների:

Քայլ 3. Մասեր - Օպտիկա. Փոխզիջում գտնելը

Մասեր - Օպտիկա. Փոխզիջում գտնելը
Մասեր - Օպտիկա. Փոխզիջում գտնելը
Մասեր - Օպտիկա. Փոխզիջում գտնելը
Մասեր - Օպտիկա. Փոխզիջում գտնելը
Մասեր - Օպտիկա. Փոխզիջում գտնելը
Մասեր - Օպտիկա. Փոխզիջում գտնելը

Այս նախագծի օպտիկան բավականին դժվար էր մոտենալ, քանի որ ես գաղափար չունեի, թե ինչ էի ես նույնիսկ փնտրում, երբ առաջին անգամ սկսեցի այս նախագիծը: Որոշ հետազոտություններից հետո ես հասկացա, որ այն, ինչ ուզում էի անել, իմ OLED էկրանի «վիրտուալ պատկեր» ստեղծելն էր, որն, ըստ երևույթին, ավելի հեռու կլիներ աչքից, քան իրականում կա: Այս վիրտուալ պատկերի ձևավորման իդեալական հեռավորությունը կլինի վարորդի դիմաց մոտ 2-5 մետր: Սա կարծես այն հեռավորությունն է այն օբյեկտներից, որոնց վրա մենք կենտրոնանում ենք մեքենա վարելիս (այլ մեքենաներ, ճանապարհի բախումներ և այլն …):

Այդ նպատակին հասնելու համար ես ընտրեցի օգտագործել Ֆրենելի ոսպնյակ, քանի որ դրանք բավականին մեծ են, էժան, թվում էր, թե նրանք բավականին լավ կիզակետային հեռավորություն են առաջարկում իմ նախագծի համար, և դրանք կարելի է կտրել պարզ մկրատով (ինչը այդպես չէ ավելի նուրբ կլոր ձևի ապակյա ոսպնյակներ): Ֆրեսելի ոսպնյակներ կարելի է գտնել «գրպանի խոշորացույց» կամ «ընթերցման քարտ խոշորացույց» անուններով, քանի որ դրանք շատ տեղին են վատ տեսողություն ունեցող մարդկանց կարդալիս օգնելու համար:

Հիմնականում, այստեղ հնարքը վերաբերում էր հետևյալ փոխզիջումների միջև ճիշտ փոխզիջում գտնելուն:

- Ունենալ ողջամիտ վիրտուալ պատկերի հեռավորություն (այսինքն ՝ որքան հեռու է թվում HUD- ը օգտագործողի համար, կամ որքան հեռու օգտվողը պետք է հարմարեցնի իր աչքերը ՝ տեսնելու, թե ինչ է HUD- ում)

- Էկրանի տեքստը չափազանց մեծացնել ոսպնյակը (ինչը հիմնականում խոշորացույց է)

- Ունենալով ողջամիտ հեռավորություն OLED էկրանի և ոսպնյակի միջև, ինչը հակառակ դեպքում կհանգեցներ շատ մեծ մոդուլի

Ես անձամբ պատվիրեցի մի քանի տարբեր ոսպնյակ ամազոնում և որոշեցի դրանց համապատասխան կիզակետային հեռավորությունները ՝ նախքան մոտ 13 սմ երկարությամբ մեկը ընտրելը: Ես գտա այս F.length- ը, OLED- Ոսպնյակի 9 սմ հեռավորությամբ, ինձ բավարարող պատկեր տվեց իմ անդրադարձիչի վրա (տե՛ս վերևի վերջին մի քանի պատկերները):

Ինչպես կտեսնեք իմ նկարազարդումներում, ցուցադրվող տեքստի վրա ճիշտ կենտրոնանալու համար այս լուսանկարներն օգտագործող տեսախցիկը պետք է հարմարվի այնպես, ասես կենտրոնացած է հեռավոր օբյեկտի վրա, ինչը դարձնում է ամեն ինչ նույն հարթության վրա, ինչ ռեֆլեկտորը պղտոր է թվում:. Սա հենց այն է, ինչ մենք ցանկանում ենք մեր HUD- ի համար:

Դուք կարող եք գտնել ոսպնյակի կրիչի համար նախատեսված 3D ֆայլերը այստեղ:

Քայլ 4. Մասեր - տարա, որը կարող է դրանք բոլորը պահել

Մասեր - բեռնարկղ `դրանք բոլորը պահելու համար
Մասեր - բեռնարկղ `դրանք բոլորը պահելու համար
Մասեր - բեռնարկղ `դրանք բոլորը պահելու համար
Մասեր - բեռնարկղ `դրանք բոլորը պահելու համար

Մինչ ես գրում եմ այս Instructables- ը, իրական կոնտեյները, որը կպահի գլխավոր էջի յուրաքանչյուր կտոր, այնքան էլ նախագծված չէ: Այնուամենայնիվ, ես ունեմ մի քանի պատկերացում դրա ընդհանուր ձևի և այն մասին, թե ինչպես մոտենալ որոշակի խնդիրներին (ինչպես, օրինակ, ինչպես պահել ռեֆլեկտորը և այն դարձնել 100+ կմ/ժ քամու դիմացկուն): Սա դեռ շատ ընթացքի մեջ է:

Քայլ 5. Մեր մոդուլի համար արձանագրություն ստեղծելը

Հեռախոսից նավարկության հրահանգները զարգացման տախտակին ուղարկելու համար ես պետք է կազմեի իմ սեփական հաղորդակցության արձանագրությունը, որը թույլ կտար ինձ հեշտությամբ ուղարկել հեռախոսից պահանջվող տվյալները ՝ միևնույն ժամանակ հեշտացնելով դրանց մշակումը մեկ անգամ ստանալուց հետո:

Այս Հրահանգները գրելու պահին այն տեղեկատվությունը, որը անհրաժեշտ էր փոխանցել հեռախոսից ՝ մոդուլով նավարկելու համար, հետևյալն էր.

- Առաջիկա մանևրի տեսակը (պարզ շրջադարձ, շրջանաձև երթևեկություն, միացում մեկ այլ ճանապարհի վրա …)

- Առաջիկա զորավարժության ճշգրիտ հրահանգները (կախված մանևրի տիպից. Աջ/ձախ ՝ շրջադարձի համար, որից դուրս գալու համար պետք է շրջանցել,…)

- Առաջիկա զորավարժությունից առաջ մնացած հեռավորությունը (առայժմ մետրերով)

Ես որոշեցի կազմակերպել այս տվյալները ՝ օգտագործելով շրջանակի հետևյալ կառուցվածքը.

տիպ. հրահանգներ, հեռավորություն;

Թեև սա գեղեցիկ լուծում չէ, այն մեզ թույլ է տալիս հեշտությամբ առանձնացնել և տարբերակել մեր արձանագրության յուրաքանչյուր դաշտ, ինչը հեշտացրել է ESP32- ի կողմից կոդավորումը:

Կարևոր է նկատի ունենալ, որ ապագա գործառույթների համար այս արձանագրությանը կարող է անհրաժեշտ լինել ավելացնել այլ տեղեկություններ (օրինակ ՝ ճշգրիտ օրն ու ժամը կամ օգտվողի հեռախոսում հնչող երաժշտությունը), ինչը հեշտությամբ հնարավոր կլինի կիրառել կառուցել տրամաբանություն, ինչպես հիմա:

Քայլ 6: Կոդ. ESP32 Կողմ

Կոդ `ESP32 Կողք
Կոդ `ESP32 Կողք
Կոդ `ESP32 Կողք
Կոդ `ESP32 Կողք

ESP32- ի ծածկագիրը ներկայումս բավականին պարզ է: Այն օգտագործում է U8g2lib գրադարանը, որը հնարավորություն է տալիս հեշտությամբ վերահսկել OLED էկրանը (միաժամանակ թույլ տալով ցուցադրվող պատկերի հայելազերծումը):

Հիմնականում այն ամենը, ինչ անում է ESP32- ը, սերիական տվյալներ է ստանում Bluetooth- ի միջոցով, երբ ծրագիրը ուղարկում է այն, վերլուծում այն և ցուցադրում այս տվյալները կամ նկարները (այսինքն. Ցուցադրել սլաք `« թեքել ձախ/աջ »նախադասության փոխարեն): Ահա կոդը ՝

/*Android- ի հավելվածից HUD- ի վերահսկման ծրագիրը սերիական bluetooth- ի միջոցով*/#ներառում է «BluetoothSerial.h» // Սերիական Bluetooth- ի վերնագրի ֆայլը, լռելյայն կավելացվի Arduino- ում#ներառել#ներառել #ifdef U8X8_HAVE_HW_SPI#ներառել#endif# ifdef U8X8_HAVE_HW_I2C #ներառում է #endif // OLED գրադարանի կոնստրուկտոր, համապատասխանաբար անհրաժեշտ է փոխել ձեր էկրանին // Պետական մեքենայի կողմից հայտնաբերված_ադաշտի արժեքներ + փոփոխական#սահմանել մանևրային դաշտ 1#սահմանել հրահանգները Դաշտն 2#սահմանել հեռավորությունը Դաշտը 3#սահմանել endOfFrame 4 -ը հայտնաբերել է_ դաշտ = endOfFrame; BluetoothSerial serialBT; // Object for Bluetoothchar incoming_char; char մանևր [10]; char հրահանգներ [10]; char distance [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; բուլյան լրիվ նախադասություն = կեղծ; անվավեր կարգավորում () {Serial.begin (9600); // Սկսեք սերիական մոնիտորը 9600 bauds u8g2.begin- ում (); // Սկսեք OLED հսկիչ serialBT.begin («ESP32_BT»); // Bluetooth ազդանշանի ուշացման անուն (20); Serial.println («Bluetooth սարքը պատրաստ է զուգավորման»);} void loop () {if (serialBT.available () &&! Fullsentence) // Bluetooth սերիայի միջոցով ստացվող կերպարներ {incoming_char = serialBT.read (); Serial.print ("Ստացվել է"); Serial.println (մուտքային_չար); } անջատիչ (հայտնաբերված_ադաշտ) {case maneuverField: Serial.println ("Հայտնաբերված դաշտ. մանևր"); if (մուտքային_չար == '.') // Հաջորդ դաշտը հայտնաբերված է {dete_field = οδηγίεςField; } else {// Լրացրեք մանևրի տիպի info array manuver [nbr_char_maneuver] = մուտքային_չար; nbr_char_maneuver ++; } ընդմիջում; գործի հրահանգներԴաշտ: Serial.println ("Հայտնաբերված դաշտ. հրահանգներ"); եթե (մուտքային_չար == ',') // Հաջորդ դաշտը հայտնաբերված է {dete_field = distanceField; } else {// Լրացրեք հրահանգների տեղեկատվական զանգվածի հրահանգները [nbr_char_instructions] = մուտքային_չար; nbr_char_instructions ++; } ընդմիջում; գործի հեռավորությունԴաշտ: Serial.println ("Հայտնաբերված դաշտ. հեռավորություն"); if (incoming_char == ';') // Շրջանակի վերջը հայտնաբերված է {dete_field = endOfFrame; Serial.print («մանևրել.»); Serial.println (մանևր); Serial.print («հրահանգներ»); Serial.println (հրահանգներ); Serial.print ("հեռավորությունը"); Serial.println (հեռավորություն); լրիվ նախադասություն = ճշմարիտ; update_Display (); // Լրիվ շրջանակը ստացվել է, վերլուծել այն և ցուցադրել ընդունիչի տվյալները} այլապես {// Լրացրեք հեռավորության մասին տեղեկատվության զանգվածի հեռավորությունը [nbr_char_distance] = մուտքային_չար; nbr_char_distance ++; } ընդմիջում; դեպքում endOfFrame: if (incoming_char == ':') dete_field = maneuverField; // Նոր շրջանակի հայտնաբերված ընդմիջում; լռելյայն ՝ // Ոչինչ չկոտրել; } ուշացում (20);} void update_Display () {// Քեշի յուրաքանչյուր char զանգված `հնարավոր կոնֆլիկտներից խուսափելու համար (tempManeuver, manuver, nbr_char_maneuver); memcpy (tempInstructions, հրահանգներ, nbr_char_instructions); memcpy (tempDistance, distance, nbr_char_distance); parseCache (); // Վերլուծել և մշակել char arrays լրիվությունը = կեղծ; // Նախադասությունը մշակված է, պատրաստ հաջորդի համար} void parseCache () {u8g2.clearBuffer (); // մաքրել ներքին հիշողությունը u8g2.setFont (u8g2_font_ncenB10_tr); // ընտրել համապատասխան տառատեսակ // char arrays -> string պարտադիր է substring () գործառույթն օգտագործելու համար String maneuverString = tempManeuver; Լարային ցուցումներString = tempInstructions; // Արձանագրության իրականացումը այստեղ: Առայժմ աջակցում է միայն շրջադարձերը: if (maneuverString.substring (0, 4) == "շրջադարձ") {// Ստուգեք մանևրելու տեսակը Serial.print ("TURN DETECTED"); if (οδηγίεςString.substring (0, 5) == "աջ") {// Ստուգեք կոնկրետ հրահանգները և համապատասխանաբար ցուցադրեք u8g2.drawStr (5, 15, "-"); } else if (οδηγίεςString.substring (0, 4) == "ձախ") {// Ստուգեք կոնկրետ հրահանգները և համապատասխանաբար ցուցադրեք u8g2.drawStr (5, 15, "<---"); } else u8g2.drawStr (5, 15, «Սխալ»); // Հրահանգների անվավեր դաշտ}/ * Իրականացրեք մանևրման այլ տեսակներ (շրջանաձև երթևեկություն և այլն) * այլ դեպքում (tempManeuver == "rdbt") { * *] */ u8g2.drawStr (5, 30, tempDistance); // Displayուցադրել մնացած հեռավորությունը u8g2.sendBuffer (); // փոխանցել ներքին հիշողությունը էկրանին // Վերականգնել բոլոր char զանգվածները հաջորդ ընթերցման մեմբեթից առաջ (մանևրել, 0, 10); memset (հրահանգներ, 0, 10); memset (հեռավորություն, 0, 10); memset (tempManeuver, 0, 10); memset (tempInstructions, 0, 10); memset (tempDistance, 0, 10); // Վերականգնել զանգվածների տարրեր nbr_char_distance = 0; nbr_char_instructions = 0; nbr_char_maneuver = 0;}

Քայլ 7: Կոդ. Android Side

Կոդ. Android Side
Կոդ. Android Side
Կոդ. Android Side
Կոդ. Android Side
Կոդ. Android Side
Կոդ. Android Side

Սմարթֆոնների հավելվածի համար ես որոշեցի օգտագործել Mapbox- ի նավարկության SDK- ն, քանի որ այն առաջարկում է բազմաթիվ օգտակար հատկություններ, երբ խոսքը վերաբերում է նավարկության քարտեզը զրոյից կառուցելուն: Այն նաև թույլ է տալիս օգտագործել բազմաթիվ օգտակար ունկնդիրներ, որոնք միանշանակ օգնում են այս մոդուլը գործի դնել: Ես նաև օգտագործեցի harry1453- ի android-bluetooth- սերիական գրադարանը android- ի համար, քանի որ դա Bluetooth սերիական հաղորդակցությունը շատ ավելի հեշտ դարձրեց միասին:

Եթե ցանկանում եք այս ծրագիրը կառուցել տանը, ձեզ հարկավոր է ձեռք բերել Mapbox մուտքի նշան, որն անվճար է ամսական մինչև որոշակի քանակությամբ հարցումների: Դուք ստիպված կլինեք տեղադրել այս նշանը ծածկագրում և հավելվածը կառուցեք ձեր կողքին: Դուք նաև պետք է կոդավորեք ձեր սեփական ESP32- ի Bluetooth MAC հասցեով:

Ինչպես որ կա, ծրագիրը կարող է ձեզ ուղղորդել ձեր ընթացիկ գտնվելու վայրից ցանկացած վայր, որի վրա կարող եք սեղմել քարտեզի վրա: Ինչպես նշվեց ներածության մեջ, այն, այնուամենայնիվ, չի աջակցում այլ մանևրների, քան շրջադարձերն է և դեռևս չի վարում ճանապարհներից դուրս:

Ամբողջ աղբյուրի կոդը կարող եք գտնել իմ github- ում:

Քայլ 8: Ի՞նչ է հաջորդը:

Այժմ, երբ ծրագիրը բավականաչափ ֆունկցիոնալ է ՝ իր օգտագործողին որոշակի երթուղու իրական ուղորդման համար (եթե սահմանված երթուղուց շեղումներ չկան), իմ հիմնական ուշադրությունը կլինի սմարթֆոնների հավելվածի կատարելագործումը և այն մի քանի հնարավորությունների ներդրումը, որոնք մոդուլը կդարձնեն կենսունակ նավիգացիոն սարք: Սա ներառում է հեռախոսից Bluetooth հաղորդակցման հնարավորություն նույնիսկ էկրանն անջատված վիճակում, ինչպես նաև այլ տեսակի զորավարժությունների աջակցություն (շրջանաձև երթևեկություն, միաձուլում և այլն): Ես նաև կիրականացնեմ վերափոխման գործառույթ, եթե օգտագործողը շեղվի սկզբնական երթուղուց:

Երբ այս ամենն ավարտվի, ես կբարելավեմ բեռնարկղը և դրա ամրացման մեխանիզմը, 3D տպելու եմ այն և կփորձեմ մոդուլը վերցնել առաջին գործարկման համար:

Եթե ամեն ինչ լավ ընթանա, իմ երկարաժամկետ նպատակն է նախագծել անհատական PCB այս նախագծի ներդրված էլեկտրոնիկայի համար, որը շատ տարածք կխնայի վերջնական արտադրանքի վրա:

Ես կարող եմ նաև հետագայում այս մոդուլին մի քանի այլ հնարավորություններ ավելացնել, այդ թվում ՝ ժամանակի ցուցադրում, ինչպես նաև հեռախոսի ծանուցման ահազանգ, որը կարող է պատկերակ դարձնել, երբ օգտվողը ստանում է տեքստային հաղորդագրություն կամ զանգ: Ի վերջո, ես կցանկանայի Spotify- ի հնարավորությունները ավելացնել այս մոդուլին ՝ որպես երաժշտության հսկայական երկրպագու: Այնուամենայնիվ, ժամանակի այս պահին դա ունենալը միայն հաճելի է:

Քայլ 9: Եզրակացություն և հատուկ շնորհակալություն:

Եզրակացություն և հատուկ շնորհակալություն
Եզրակացություն և հատուկ շնորհակալություն

Ինչպես նշվեց ներածության մեջ, չնայած այս նախագիծը դեռևս ավարտված չէ, ես իսկապես ուզում էի այն կիսել աշխարհի հետ, հույսով, որ այն կարող է ոգեշնչել մեկ ուրիշին:Ես նաև ցանկանում էի փաստաթղթավորել այս թեմայով իմ հետազոտությունը, քանի որ իրականում AR- ի և HUD- ի նկատմամբ հոբբիստների մեծ հետաքրքրություն չկա, ինչը, իմ կարծիքով, ամոթ է:

Wantանկանում եմ մեծ շնորհակալություն հայտնել Awall99- ին և Դանել Կինտանային, որոնց համապատասխան լրացված իրականության նախագիծը ինձ շատ ոգեշնչեց այս մոդուլի ստեղծման գործում:

Շնորհակալ եմ բոլորիդ ուշադրության համար, վստահ կլինեմ, որ թարմացում կտեղադրեմ, երբ մոտ ապագայում այս նախագիծը բարելավվի: Միևնույն ժամանակ, բոլորիդ կհանդիպենք ավելի ուշ:

Խորհուրդ ենք տալիս: