Բովանդակություն:
- Քայլ 1. Ինչպես է ամեն ինչ աշխատում. Բացատրվում են դիզայնի ընտրությունները
- Քայլ 2: Մասեր. Ուղեղներ. Միկրոկոնտրոլեր և էկրան
- Քայլ 3. Մասեր - Օպտիկա. Փոխզիջում գտնելը
- Քայլ 4. Մասեր - տարա, որը կարող է դրանք բոլորը պահել
- Քայլ 5. Մեր մոդուլի համար արձանագրություն ստեղծելը
- Քայլ 6: Կոդ. ESP32 Կողմ
- Քայլ 7: Կոդ. Android Side
- Քայլ 8: Ի՞նչ է հաջորդը:
- Քայլ 9: Եզրակացություն և հատուկ շնորհակալություն:
Video: Smart Motorcycle HUD- ի նախատիպը (շրջադարձային նավարկություն և շատ ավելին). 9 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:45
Ողջու՜յն !
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- ի ծածկագիրը ներկայումս բավականին պարզ է: Այն օգտագործում է 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
Սմարթֆոնների հավելվածի համար ես որոշեցի օգտագործել Mapbox- ի նավարկության SDK- ն, քանի որ այն առաջարկում է բազմաթիվ օգտակար հատկություններ, երբ խոսքը վերաբերում է նավարկության քարտեզը զրոյից կառուցելուն: Այն նաև թույլ է տալիս օգտագործել բազմաթիվ օգտակար ունկնդիրներ, որոնք միանշանակ օգնում են այս մոդուլը գործի դնել: Ես նաև օգտագործեցի harry1453- ի android-bluetooth- սերիական գրադարանը android- ի համար, քանի որ դա Bluetooth սերիական հաղորդակցությունը շատ ավելի հեշտ դարձրեց միասին:
Եթե ցանկանում եք այս ծրագիրը կառուցել տանը, ձեզ հարկավոր է ձեռք բերել Mapbox մուտքի նշան, որն անվճար է ամսական մինչև որոշակի քանակությամբ հարցումների: Դուք ստիպված կլինեք տեղադրել այս նշանը ծածկագրում և հավելվածը կառուցեք ձեր կողքին: Դուք նաև պետք է կոդավորեք ձեր սեփական ESP32- ի Bluetooth MAC հասցեով:
Ինչպես որ կա, ծրագիրը կարող է ձեզ ուղղորդել ձեր ընթացիկ գտնվելու վայրից ցանկացած վայր, որի վրա կարող եք սեղմել քարտեզի վրա: Ինչպես նշվեց ներածության մեջ, այն, այնուամենայնիվ, չի աջակցում այլ մանևրների, քան շրջադարձերն է և դեռևս չի վարում ճանապարհներից դուրս:
Ամբողջ աղբյուրի կոդը կարող եք գտնել իմ github- ում:
Քայլ 8: Ի՞նչ է հաջորդը:
Այժմ, երբ ծրագիրը բավականաչափ ֆունկցիոնալ է ՝ իր օգտագործողին որոշակի երթուղու իրական ուղորդման համար (եթե սահմանված երթուղուց շեղումներ չկան), իմ հիմնական ուշադրությունը կլինի սմարթֆոնների հավելվածի կատարելագործումը և այն մի քանի հնարավորությունների ներդրումը, որոնք մոդուլը կդարձնեն կենսունակ նավիգացիոն սարք: Սա ներառում է հեռախոսից Bluetooth հաղորդակցման հնարավորություն նույնիսկ էկրանն անջատված վիճակում, ինչպես նաև այլ տեսակի զորավարժությունների աջակցություն (շրջանաձև երթևեկություն, միաձուլում և այլն): Ես նաև կիրականացնեմ վերափոխման գործառույթ, եթե օգտագործողը շեղվի սկզբնական երթուղուց:
Երբ այս ամենն ավարտվի, ես կբարելավեմ բեռնարկղը և դրա ամրացման մեխանիզմը, 3D տպելու եմ այն և կփորձեմ մոդուլը վերցնել առաջին գործարկման համար:
Եթե ամեն ինչ լավ ընթանա, իմ երկարաժամկետ նպատակն է նախագծել անհատական PCB այս նախագծի ներդրված էլեկտրոնիկայի համար, որը շատ տարածք կխնայի վերջնական արտադրանքի վրա:
Ես կարող եմ նաև հետագայում այս մոդուլին մի քանի այլ հնարավորություններ ավելացնել, այդ թվում ՝ ժամանակի ցուցադրում, ինչպես նաև հեռախոսի ծանուցման ահազանգ, որը կարող է պատկերակ դարձնել, երբ օգտվողը ստանում է տեքստային հաղորդագրություն կամ զանգ: Ի վերջո, ես կցանկանայի Spotify- ի հնարավորությունները ավելացնել այս մոդուլին ՝ որպես երաժշտության հսկայական երկրպագու: Այնուամենայնիվ, ժամանակի այս պահին դա ունենալը միայն հաճելի է:
Քայլ 9: Եզրակացություն և հատուկ շնորհակալություն:
Ինչպես նշվեց ներածության մեջ, չնայած այս նախագիծը դեռևս ավարտված չէ, ես իսկապես ուզում էի այն կիսել աշխարհի հետ, հույսով, որ այն կարող է ոգեշնչել մեկ ուրիշին:Ես նաև ցանկանում էի փաստաթղթավորել այս թեմայով իմ հետազոտությունը, քանի որ իրականում AR- ի և HUD- ի նկատմամբ հոբբիստների մեծ հետաքրքրություն չկա, ինչը, իմ կարծիքով, ամոթ է:
Wantանկանում եմ մեծ շնորհակալություն հայտնել Awall99- ին և Դանել Կինտանային, որոնց համապատասխան լրացված իրականության նախագիծը ինձ շատ ոգեշնչեց այս մոդուլի ստեղծման գործում:
Շնորհակալ եմ բոլորիդ ուշադրության համար, վստահ կլինեմ, որ թարմացում կտեղադրեմ, երբ մոտ ապագայում այս նախագիծը բարելավվի: Միևնույն ժամանակ, բոլորիդ կհանդիպենք ավելի ուշ:
Խորհուրդ ենք տալիս:
Կառուցեք պարզ հեծանիվի շրջադարձային ազդանշան. 11 քայլ (նկարներով)
Կառուցեք պարզ հեծանիվի շրջադարձային ազդանշան. Աշնան գալուստով, երբեմն դժվար է գիտակցել, որ օրերը կարճացել են, չնայած ջերմաստիճանը կարող է նույնը լինել: Դա պատահել է բոլորի հետ. Դուք գնում եք կեսօրին հեծանվային ճանապարհորդության, բայց մինչ կես ճանապարհ վերադառնալը, մութ է, և դուք
Ես պատրաստել եմ հին CD սկավառակ Wifi ռոբոտի մեջ ՝ օգտագործելով Nodemcu, L298N Motor Drive և շատ ավելին. 5 քայլ
Ես պատրաստել եմ հին CD սկավառակ Wifi ռոբոտի մեջ ՝ օգտագործելով Nodemcu, L298N Motor Drive և շատ ավելին. VX Robotics & Էլեկտրոնիկա ներկա
Հիանալի ջերմոց ՝ ավտոմատ ջրելով, ինտերնետ կապով և շատ ավելին ՝ 7 քայլ (նկարներով)
Հիանալի ջերմոց ՝ ավտոմատ ջրելով, ինտերնետ կապով և շատ ավելին. Բարի գալուստ այս հրահանգներ: Մարտի սկզբին ես այգու խանութում էի և մի քանի ջերմոց տեսա: Եվ քանի որ ես վաղուց էի ուզում նախագիծ կազմել բույսերի և էլեկտրոնիկայի միջոցով, առաջ գնացի և գնեցի մեկը ՝ https://www.instagram.com/p
Խաղ պատրաստելով Գրառման գրքույկում և շատ ավելին ՝ 10 քայլ
Խաղ պատրաստելով Գրառման գրքույկում և շատ ավելին. Սա իմ առաջին հրահանգն է: Այսպիսով, եթե ունեք որևէ առաջարկ, խնդրում ենք մեկնաբանել: Եկեք սկսենք: Երբ մենք բոլորս լսում ենք նոթատետր բառը, մենք մտածում ենք որոշ ձանձրալի անօգուտ ծրագրերի մասին ՝ իրերը նշելու համար: Դե, նոթատետրը դրանից ավելին է: Մենք կարող ենք վերահսկել մեր էջը
Շատ պարզ Դեռ շատ արդյունավետ կատակ (համակարգչային կատակ) ՝ 3 քայլ
Շատ պարզ … Այնուամենայնիվ, շատ արդյունավետ կատակ (համակարգչային կատակ). Այս հրահանգը շատ պարզ է, բայց ՝ շատ արդյունավետ: Ինչ կլինի `դուք թաքցնում եք զոհի աշխատասեղանի բոլոր պատկերակները: Victimոհը կզարմանա, երբ տեսնի համակարգիչը, երբ դու կատակ ես անում: Սա չի կարող որևէ կերպ վնասել համակարգչին