विषयसूची:
- चरण 1: यह सब कैसे काम करता है: डिज़ाइन विकल्प समझाया गया
- चरण 2: भाग - दिमाग: माइक्रोकंट्रोलर और स्क्रीन
- चरण 3: भाग - प्रकाशिकी: एक समझौता ढूँढना
- चरण 4: भागों - उन सभी को रखने के लिए एक कंटेनर
- चरण 5: हमारे मॉड्यूल के लिए एक प्रोटोकॉल बनाना
- चरण 6: कोड: ESP32 साइड
- चरण 7: कोड: एंड्रॉइड साइड
- चरण 8: आगे क्या है?
- चरण 9: निष्कर्ष और विशेष धन्यवाद
वीडियो: स्मार्ट मोटरसाइकिल एचयूडी प्रोटोटाइप (बारी-बारी से नेविगेशन और बहुत कुछ): 9 कदम
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:18
नमस्ते !
यह इंस्ट्रक्शंस इस बात की कहानी है कि कैसे मैंने एक HUD (हेड्स-अप डिस्प्ले) प्लेटफॉर्म बनाया और बनाया, जिसे मोटरसाइकिल हेलमेट पर लगाया गया था। यह "नक्शे" प्रतियोगिता के संदर्भ में लिखा गया था। अफसोस की बात है कि मैं प्रतियोगिता की समय सीमा के लिए समय पर इस परियोजना को पूरी तरह से पूरा करने में सक्षम नहीं था, लेकिन मैं अभी भी इस पर अपनी प्रगति साझा करना चाहता था, साथ ही इसे बनाने के दौरान मुझे जो भी परीक्षण और त्रुटि मिली थी, उसका दस्तावेजीकरण करना चाहता था।
इस परियोजना का विचार पहली बार मेरे पास कुछ साल पहले आया था, जब मैं मोटरसाइकिलों में आया था, और मैं यह देखना शुरू कर रहा था कि मेरी सवारी को और अधिक मनोरंजक बनाने के लिए मुझे कौन सा गियर खरीदना होगा। उस समय, इसने मुझे चकित कर दिया कि सवारी करते समय कुछ बुनियादी जीपीएस नेविगेशन प्राप्त करने का सबसे अच्छा तरीका मूल रूप से अपने स्मार्टफोन को अपनी बाइक के हैंडलबार से जोड़ना था। हालांकि मैं अपने आप से निश्चित रूप से, उस तरह की जानकारी प्राप्त करने का एक बेहतर तरीका हो सकता है।
तभी यह मेरे पास आया: एक हेड-अप डिस्प्ले आपके फोन की बैटरी को खाली किए बिना, और तत्वों को उजागर किए बिना, सवारी करते समय नेविगेशन प्राप्त करने का तरीका हो सकता है।
समय के साथ, यह विचार मेरे दिमाग में परिपक्व हो गया, और हालांकि मुझे लगता है कि हर समय मेरे सामने एक एचयूडी होने से साधारण नेविगेशन की तुलना में कई और उपयोग किए जा सकते हैं। यही कारण है कि मेरी योजना मंच को सार्वजनिक और मॉड्यूलर बनाने की है, ताकि कोई भी ऐसा मॉड्यूल बना सके जो अपने स्वयं के एचयूडी पर आवश्यक जानकारी प्रदर्शित करे।
हालाँकि व्यावसायिक रूप से उपलब्ध उत्पाद हैं जो इस कार्य को पूरा करते हैं, लेकिन मेरे प्लेटफ़ॉर्म की तरह मॉड्यूलर नहीं हैं, और वे थोड़े महंगे भी हैं। बहरहाल, इस परियोजना में आपका स्वागत है।
अभी क्या काम करता है
जैसा कि कहा गया है, यह परियोजना अभी भी विकास की स्थिति में है, और यह वही है जो वर्तमान में काम कर रहा है।
- एक स्मार्टफोन और एक ESP32 आधारित बोर्ड के बीच संचार (फोन जागृत)
- प्रकाशिकी डिजाइन किया गया (लंबे समय में छोटे समायोजन की आवश्यकता हो सकती है)
- मैपबॉक्स नेविगेशन एसडीके का उपयोग कर एंड्रॉइड नेविगेशन ऐप:
- मानचित्र पर उपयोगकर्ता की स्थिति की गणना और प्रदर्शित करने में सक्षम, साथ ही साथ गंतव्य तक का मार्ग
- ब्लूटूथ डिवाइस से कनेक्ट करने में सक्षम (डिवाइस का मैक पता अभी हार्डकोड किया गया है)
- सीरियल ब्लूटूथ के माध्यम से आगामी युद्धाभ्यास की जानकारी निकालने और भेजने सहित वास्तविक समय नेविगेशन में सक्षम (केवल अभी के लिए समर्थन करता है)
क्या काम चाहिए
इस सूची में ऐसे आइटम हैं जो HUD के इच्छित उपयोग के लिए बिल्कुल आवश्यक हैं, लेकिन अभी तक लागू होने के लिए तैयार नहीं हैं।
- समग्र डिजाइन (हेलमेट अटैचमेंट, रिफ्लेक्टर का कोण समायोजन तंत्र,..)
- एंड्रॉइड ऐप:
- ऑफ-रूट डिटेक्शन और सुधार लागू करें
- उपयोगकर्ता के लिए गंतव्य पता इनपुट करने की क्षमता
- वेपॉइंट्स?
- एर्गोनॉमिक्स / सौंदर्यशास्त्र
आपूर्ति:
अनिवार्य
- एक esp32 आधारित विकास बोर्ड
- कुछ हद तक हाल ही में एंड्रॉइड स्मार्टफोन (ब्लूटूथ सक्षम)
- एक SSD1306 या अन्य सक्षम 96" OLED स्क्रीन (मेरा 128x64 पिक्सेल था, "दि दिमाग: माइक्रोकंट्रोलर और स्क्रीन" भाग देखें)
- एक परावर्तक (ऐक्रेलिक/ग्लास/प्लेक्सीग्लास का कोई भी टुकड़ा करेगा)
- एक फ्रेस्नेल लेंस (मेरा लगभग 13 सेमी की एफ। लंबाई थी, "लेंस पसंद" भाग देखें)
उपकरण
- सोल्डरिंग आयरन
- ब्रेड बोर्ड
- कुछ जम्पर केबल
- 3डी प्रिंटर / 3डी प्रिंटिंग सर्विस
चरण 1: यह सब कैसे काम करता है: डिज़ाइन विकल्प समझाया गया
हेड्स अप डिस्प्ले का मूल विचार किसी की दृष्टि के सामने एक छवि प्रदर्शित करना है, इसलिए उन्हें जो कुछ भी वे कर रहे हैं उससे दूर देखने की ज़रूरत नहीं है (चाहे वह एक विमान का संचालन हो, या मोटरसाइकिल चला रहा हो, जो हमारा होगा उदाहरण मामला)।
प्रकाशिकी
तकनीकी रूप से, यह उपयोगकर्ता की आंखों के सामने सीधे स्क्रीन लगाकर प्राप्त किया जा सकता है। हालांकि, एक स्क्रीन पारदर्शी नहीं है, और इसलिए इसके उपयोगकर्ता की दृष्टि में बाधा उत्पन्न होगी। फिर आप स्क्रीन को एक परावर्तक सतह के सामने रख सकते हैं, जो स्क्रीन की सामग्री को प्रतिबिंबित करेगा, जबकि देखने के माध्यम से भी पर्याप्त है कि उपयोगकर्ता देख सकता है कि उसके सामने क्या है।
हालांकि, इस दृष्टिकोण में एक बड़ी खामी है: वास्तविक स्क्रीन आमतौर पर उपयोगकर्ता की आंखों के करीब होती है, जिस पर उपयोगकर्ता को वास्तव में ध्यान केंद्रित करना होता है (उदाहरण के लिए उसके आगे की सड़क)। इसका मतलब यह है कि, परावर्तक सतह पर क्या है, इसे पढ़ने के लिए, उपयोगकर्ता की आंखों को अपनी आंखों से प्रदर्शन की दूरी (मान लीजिए 20 सेमी) के अनुकूल होने की आवश्यकता होगी, और फिर आगे की सड़क पर ध्यान केंद्रित करने के लिए फिर से अनुकूलन करने की आवश्यकता होगी (~ 2/5 मीटर)। इस पूरे ऑपरेशन में लगने वाला समय कीमती समय है जिसे सड़क पर देखने में खर्च किया जाना चाहिए, और बार-बार आदत डालने से कुछ ही मिनटों के बाद उपयोगकर्ता को असहजता हो सकती है।
इसलिए मैंने स्क्रीन और परावर्तक के बीच एक लेंस जोड़ने का फैसला किया। यह लेंस, यदि सावधानी से चुना जाता है, तो स्क्रीन की एक आभासी छवि के निर्माण की अनुमति देनी चाहिए (ऊपर योजनाबद्ध देखें), जो तब उपयोगकर्ता की आंखों से और दूर दिखाई देगी क्योंकि यह वास्तव में है, इस प्रकार कम अचानक अनुकूलन की आवश्यकता होती है (या बिल्कुल भी नहीं, एक आदर्श परिदृश्य में)। यह डिज़ाइन उपयोगकर्ता को परावर्तक पर तुरंत नज़र डालने, उसे आवश्यक जानकारी प्राप्त करने और तुरंत सड़क पर वापस देखने की अनुमति देता है।
स्मार्टफोन की भूमिका
क्योंकि अकेले ESP32 पर एक संपूर्ण नेविगेशन एप्लिकेशन को आज़माना और लागू करना अवास्तविक था, मैंने एक Android ऐप बनाने का फैसला किया जो इस बात का ध्यान रखेगा। ऐप को तब केवल ESP32 को यह बताने की आवश्यकता होगी कि उपयोगकर्ता को अपने गंतव्य तक पहुंचने के लिए क्या करना है, और ESP32 उस जानकारी को HUD के माध्यम से रिले करता है (देखें "मॉड्यूल कैसे काम करता है" आंकड़ा)।
चरण 2: भाग - दिमाग: माइक्रोकंट्रोलर और स्क्रीन
जैसा कि ऊपर बताया गया है, मैंने अपने मॉड्यूल को नेविगेशन जानकारी प्रदर्शित करने की योजना बनाई है, जबकि वास्तव में यह वास्तविक स्थिति, ट्रैकिंग और रीयल-टाइम नेविगेशन की गणना नहीं कर रहा है। इसके बजाय उपयोगकर्ता का फोन मॉड्यूल के साथ संचार करेगा, और उसे सूचना भेजकर HUD पर प्रदर्शित करेगा।
उपयोगकर्ता के फोन और मॉड्यूल के बीच संचार की सुविधा के लिए, मैंने इस परियोजना के लिए एक ESP32 आधारित बोर्ड का उपयोग करना चुना। यह विकल्प इस विशिष्ट मॉड्यूल के कारण एकीकृत ब्लूटूथ क्षमताओं के साथ-साथ कुछ अन्य दिलचस्प विशिष्टताओं (गैर-वाष्पशील भंडारण, दोहरे कोर सीपीयू का उपयोग करने में आसान, वास्तव में I2C के माध्यम से OLED डिस्प्ले को चलाने के लिए पर्याप्त रैम) के कारण था। ईएसपी 32 के आधार पर पीसीबी को डिजाइन करना अपेक्षाकृत सरल है, जिसे मैंने ध्यान में रखा था। मेरे पास ESP32 के साथ सर्किट का उपयोग करने और डिजाइन करने का पेशेवर अनुभव भी है, जिसने निश्चित रूप से मेरी पसंद को प्रभावित किया।
स्क्रीन की पसंद मूल रूप से जो कुछ भी मुझे मिल सकता था वह नीचे आ गया, हालांकि मैं वाई उपयोग के लिए पर्याप्त उज्ज्वल होगा, जबकि जितना संभव हो उतना छोटा होगा। मैं स्क्रीन के पिक्सल की संख्या के बारे में बहुत चिंतित नहीं था, क्योंकि मेरा उद्देश्य बहुत ही न्यूनतर और सरल यूआई रखना था।
यह ध्यान दिया जाना चाहिए कि स्क्रीन ड्राइवर को एक पुस्तकालय द्वारा समर्थित होना चाहिए जो छवि मिररिंग की अनुमति देता है। ऐसा इसलिए है क्योंकि प्रदर्शित छवि लेंस के माध्यम से फ़्लिप हो जाती है और परावर्तक पर दिखाई देती है, और जो प्रदर्शित होता है उसे मैन्युअल रूप से उलटने की आवश्यकता नहीं होती है, यह बिल्डरों के रूप में हमारे कंधों से बहुत बड़ा भार है।
चरण 3: भाग - प्रकाशिकी: एक समझौता ढूँढना
इस परियोजना के लिए प्रकाशिकी तक पहुंचना काफी कठिन था, क्योंकि जब मैंने पहली बार इस परियोजना को शुरू किया था तो मुझे पता नहीं था कि मैं क्या ढूंढ रहा था। कुछ शोध के बाद, मैं समझ गया कि मैं जो करना चाहता था वह मेरी ओएलईडी स्क्रीन की "वर्चुअल इमेज" बनाना था, जो वास्तव में आंखों की तुलना में अधिक दूर दिखाई देगी। इस आभासी छवि के बनने के लिए आदर्श दूरी चालक के सामने लगभग 2-5 मीटर होगी, यह उन वस्तुओं की दूरी प्रतीत होती है जिन पर हम गाड़ी चलाते समय ध्यान केंद्रित करते हैं (अन्य कारें, सड़क पर धक्कों, आदि …)
उस लक्ष्य को प्राप्त करने के लिए, मैंने फ्रेस्नेल लेंस का उपयोग करना चुना, क्योंकि ये काफी बड़े, सस्ते हैं, वे मेरी परियोजना के लिए पर्याप्त फोकल दूरी की पेशकश करते हैं, और उन्हें साधारण कैंची से काटा जा सकता है (जो कि ऐसा नहीं है) अधिक परिष्कृत गोल आकार के ग्लास लेंस)। फ्रेस्नेल लेंस को "पॉकेट मैग्निफायर" या "रीडिंग कार्ड मैग्निफायर" जैसे नाम मिल सकते हैं, क्योंकि वे खराब दृष्टि वाले लोगों को पढ़ने में मदद करने के लिए बहुत उपयुक्त हैं।
मूल रूप से, यहाँ ट्रिक सभी के बीच सही समझौता खोजने के बारे में थी:
- एक उचित आभासी छवि दूरी (अर्थात, उपयोगकर्ता को HUD कितनी दूर तक प्रतीत होगा, या HUD पर क्या है, यह देखने के लिए उपयोगकर्ता को अपनी आँखों को कितनी दूर तक समायोजित करना होगा)
- स्क्रीन पर टेक्स्ट को लेंस द्वारा बहुत बड़ा नहीं किया जाना (जो मूल रूप से एक आवर्धक है)
- OLED स्क्रीन और लेंस के बीच उचित दूरी होना, जो अन्यथा बहुत भारी मॉड्यूल की ओर ले जाएगा
मैंने व्यक्तिगत रूप से अमेज़ॅन पर कुछ अलग लेंस का आदेश दिया, और उनकी संबंधित फोकल लंबाई निर्धारित की, लगभग 13 सेमी की एफ। लंबाई के साथ एक को चुनने से पहले। मैंने पाया कि यह F.length, 9cm की OLED-लेंस दूरी के साथ, मुझे अपने परावर्तक पर एक संतोषजनक छवि दी (ऊपर पिछली कुछ छवियां देखें)।
जैसा कि आप मेरे दृष्टांतों पर देखेंगे, प्रदर्शित पाठ पर ठीक से ध्यान केंद्रित करने के लिए, इन चित्रों को लेने के लिए उपयोग किए जाने वाले कैमरे को इस तरह समायोजित करना होगा जैसे कि वह किसी दूर की वस्तु पर ध्यान केंद्रित कर रहा हो, जिससे सब कुछ उसी तल पर हो जाता है जैसे परावर्तक धुंधला दिखाई देता है. ठीक यही हम अपने HUD के लिए चाहते हैं।
आप यहाँ पर लेंस धारक के लिए 3D फ़ाइलें पा सकते हैं।
चरण 4: भागों - उन सभी को रखने के लिए एक कंटेनर
जैसा कि मैं इस इंस्ट्रक्शंस को लिख रहा हूं, वास्तविक कंटेनर जो हेड-अप डिस्प्ले के हर टुकड़े को रखेगा, काफी डिज़ाइन नहीं किया गया है। हालांकि मेरे पास इसके सामान्य आकार के बारे में कुछ विचार हैं और कुछ समस्याओं से कैसे संपर्क करें (जैसे कि एक परावर्तक को अभी भी कैसे पकड़ना है, और इसे 100+ किमी/घंटा हवाओं का सामना करना पड़ता है)। यह अभी भी बहुत काम प्रगति पर है।
चरण 5: हमारे मॉड्यूल के लिए एक प्रोटोकॉल बनाना
फोन से विकास बोर्ड को नेविगेशन निर्देश भेजने के लिए, मुझे अपने स्वयं के संचार प्रोटोकॉल के साथ आना पड़ा, जो मुझे फोन से आवश्यक डेटा आसानी से भेजने की अनुमति देगा, साथ ही एक बार प्राप्त होने पर इसके प्रसंस्करण की सुविधा प्रदान करेगा।
इस निर्देश को लिखने के समय, मॉड्यूल के साथ नेविगेट करने के लिए फोन से जिन सूचनाओं को प्रसारित करने की आवश्यकता थी, वे इस प्रकार थीं:
- आगामी युद्धाभ्यास का प्रकार (साधारण मोड़, गोल चक्कर, किसी अन्य सड़क पर विलय, …)
- आगामी युद्धाभ्यास के सटीक निर्देश (पैंतरेबाज़ी के प्रकार पर निर्भर: एक मोड़ के लिए दाएं/बाएं; जो एक चौराहे के लिए बाहर निकलने के लिए बाहर निकलता है, …)
- आगामी युद्धाभ्यास से पहले शेष दूरी (अभी के लिए मीटर में)
मैंने निम्नलिखित फ्रेम संरचना का उपयोग करके इस डेटा को व्यवस्थित करने का निर्णय लिया:
:प्रकार.निर्देश, दूरी;
एक सुंदर समाधान नहीं होने के बावजूद, यह हमें अपने प्रोटोकॉल के प्रत्येक क्षेत्र को आसानी से अलग करने और अलग करने की अनुमति देता है, जिससे ईएसपी 32 पक्ष पर कोडिंग की सुविधा मिलती है।
यह ध्यान रखना महत्वपूर्ण है कि, भविष्य की सुविधाओं के लिए, अन्य जानकारी को इस प्रोटोकॉल में जोड़ने की आवश्यकता हो सकती है (जैसे सटीक दिन और समय, या उपयोगकर्ता के फोन पर बजने वाला संगीत), जो इसका उपयोग करके आसानी से संभव होगा। अब के रूप में तर्क निर्माण।
चरण 6: कोड: ESP32 साइड
ESP32 के लिए कोड वर्तमान में काफी सरल है। यह U8g2lib लाइब्रेरी का उपयोग करता है, जो OLED स्क्रीन के आसान नियंत्रण को सक्षम बनाता है (प्रदर्शित छवि के मिररिंग को सक्षम करते हुए)।
मूल रूप से, सभी ESP32 ब्लूटूथ के माध्यम से सीरियल डेटा प्राप्त करता है जब ऐप इसे भेजता है, इसे पार्स करता है, और इस डेटा या चित्रों को इस डेटा के आधार पर प्रदर्शित करता है (यानी। वाक्य के बजाय एक तीर प्रदर्शित करना "बाएं / दाएं मुड़ें")। यहाँ कोड है:
/*सीरियल ब्लूटूथ के माध्यम से एक एंड्रॉइड ऐप से एक एचयूडी को नियंत्रित करने के लिए प्रोग्राम*/#शामिल "ब्लूटूथसेरियल.एच" // सीरियल ब्लूटूथ के लिए हेडर फाइल, डिफ़ॉल्ट रूप से Arduino#include #include #ifdef U8X8_HAVE_HW_SPI#include #endif# में जोड़ा जाएगा ifdef U8X8_HAVE_HW_I2C#include #endif//OLED लाइब्रेरी कंस्ट्रक्टर, आपकी स्क्रीन के अनुसार बदलने की जरूरत हैU8G2_SSD1306_128X64_ALT0_F_HW_I2C u8g2(U8G2_MIRROR, /* reset=*/ U8X8_PIN_NONE); // स्टेट मशीन डिटेक्टेड_फील्ड वैल्यू + वेरिएबल # डिफाइन मैन्युवरफिल्ड 1 # डिफाइन इंस्ट्रक्शनफिल्ड 2 # डिफाइन डिस्टेंसफिल्ड 3 # डिफाइन एंडऑफफ्रेम 4इंट डिटेक्टेड_फील्ड = एंडऑफफ्रेम; ब्लूटूथ सीरियल सीरियलबीटी; // ब्लूटूथचर इनकमिंग_चार के लिए ऑब्जेक्ट; चार पैंतरेबाज़ी [१०]; चार निर्देश [१०]; चार दूरी [१०]; चार अस्थायी पैंतरेबाज़ी [१०]; चार अस्थायी निर्देश [१०]; चार अस्थायी दूरी [१०]; int nbr_char_maneuver = 0; int nbr_char_instructions = 0; int nbr_char_distance = 0; बूलियन फुलसेंटेंस = असत्य; शून्य सेटअप () {Serial.begin (९६००); // 9600 बॉड्स u8g2.begin () में सीरियल मॉनिटर शुरू करें; // इनिट OLED कंट्रोल serialBT.begin ("ESP32_BT"); // ब्लूटूथ सिग्नल देरी का नाम (20); Serial.println("ब्लूटूथ डिवाइस इज रेडी टू पेयर");}void लूप() { if (serialBT.available() && !fullsentence) // ब्लूटूथ सीरियल के जरिए प्राप्त होने वाले कैरेक्टर {incoming_char = serialBT.read(); सीरियल.प्रिंट ("प्राप्त:"); सीरियल.प्रिंट्लन (इनकमिंग_चार); } स्विच (पता लगाया_फ़ील्ड) {केस पैंतरेबाज़ी फ़ील्ड: Serial.println ("पता लगाया गया फ़ील्ड: पैंतरेबाज़ी"); अगर (इनकमिंग_चार == '.') } और {// पैंतरेबाज़ी प्रकार की जानकारी सरणी पैंतरेबाज़ी भरें [nbr_char_maneuver] = आने वाली_चार; nbr_char_maneuver++; } टूटना; केस निर्देश फ़ील्ड: Serial.println ("पता लगाया गया फ़ील्ड: निर्देश"); अगर (इनकमिंग_चार == ',') // अगला फ़ील्ड पता चला {डिटेक्ट_फ़ील्ड = डिस्टेंसफ़िल्ल्ड; } और {// निर्देश जानकारी सरणी निर्देश भरें [nbr_char_instructions] = आने वाली_चार; nbr_char_निर्देश ++; } टूटना; केस डिस्टेंसफिल्ड: Serial.println ("डिटेक्टेड फील्ड: डिस्टेंस"); अगर (इनकमिंग_चार == ';') // फ्रेम के अंत का पता चला {डिटेक्टेड_फील्ड = एंडऑफफ्रेम; सीरियल.प्रिंट ("पैंतरेबाज़ी:"); Serial.println (पैंतरेबाज़ी); सीरियल.प्रिंट ("निर्देश:"); Serial.println (निर्देश); सीरियल.प्रिंट ("दूरी:"); Serial.println (दूरी); पूर्णवाक्य = सत्य; अपडेट_डिस्प्ले (); // पूर्ण फ्रेम प्राप्त हुआ, इसे पार्स करें और रिसीवर डेटा प्रदर्शित करें} और {// दूरी जानकारी सरणी दूरी भरें [nbr_char_distance] = आने वाली_चार; nbr_char_distance ++; } टूटना; केस एंडऑफफ्रेम: अगर (इनकमिंग_चार == ':') डिटेक्टेड_फील्ड = मैन्युवरफिल्ड; // नया फ्रेम ब्रेक का पता चला; डिफ़ॉल्ट: // कुछ भी न तोड़ें; } देरी (20);} शून्य अपडेट_डिस्प्ले () {// संभावित संघर्षों से बचने के लिए प्रत्येक चार सरणी को कैश करें memcpy (tempManeuver, पैंतरेबाज़ी, nbr_char_maneuver); memcpy (अस्थायी निर्देश, निर्देश, nbr_char_instructions); memcpy (tempDistance, दूरी, nbr_char_distance); पार्स कैश (); // पार्स और प्रक्रिया चार सरणियों fullsentence = असत्य; // वाक्य संसाधित, अगले एक के लिए तैयार}void parseCache(){ u8g2.clearBuffer(); // आंतरिक मेमोरी को साफ़ करें u8g2.setFont(u8g2_font_ncenB10_tr); // एक उपयुक्त फ़ॉन्ट चुनें // चार सरणियाँ -> सबस्ट्रिंग () फ़ंक्शन का उपयोग करने के लिए अनिवार्य स्ट्रिंग स्ट्रिंग पैंतरेबाज़ी = tempManeuver; स्ट्रिंग निर्देशस्ट्रिंग = अस्थायी निर्देश; // यहां प्रोटोकॉल लागू करना। अभी के लिए केवल टर्न का समर्थन करता है। if (maneuverString.substring(0, 4) == "टर्न") {// पैंतरेबाज़ी प्रकार के लिए जाँच करें Serial.print("TURN DETECTED"); अगर (निर्देशस्ट्रिंग.सबस्ट्रिंग (0, 5) == "दाएं") {// विशिष्ट निर्देशों की जांच करें और तदनुसार प्रदर्शित करें u8g2.drawStr(5, 15, "-"); } और अगर (निर्देशस्ट्रिंग.सबस्ट्रिंग (0, 4) == "बाएं") {// विशिष्ट निर्देशों की जांच करें और तदनुसार प्रदर्शित करें u8g2.drawStr(5, 15, "<---"); } और u8g2.drawStr(5, 15, "इरेट।"); // अमान्य निर्देश फ़ील्ड } /* अन्य पैंतरेबाज़ी प्रकार (गोल चक्कर, आदि) लागू करें। // शेष दूरी प्रदर्शित करें u8g2.sendBuffer (); // आंतरिक मेमोरी को डिस्प्ले में स्थानांतरित करें // अगली रीडिंग मेमसेट (पैंतरेबाज़ी, 0, 10) से पहले सभी चार सरणियों को रीसेट करें; मेमसेट (निर्देश, 0, 10); मेमसेट (दूरी, 0, 10); मेमसेट (tempManeuver, 0, 10); मेमसेट (अस्थायी निर्देश, 0, 10); मेमसेट (अस्थायी दूरी, 0, 10); // सरणियों में तत्वों की संख्या रीसेट करें nbr_char_distance = 0; nbr_char_instructions = 0; nbr_char_maneuver = 0;}
चरण 7: कोड: एंड्रॉइड साइड
स्मार्टफोन ऐप के लिए, मैंने मैपबॉक्स के नेविगेशन एसडीके का उपयोग करने का फैसला किया, क्योंकि जब यह स्क्रैच से नेविगेशन मैप बनाने की बात आती है तो यह बहुत उपयोगी सुविधाएं प्रदान करता है। यह कई उपयोगी श्रोताओं के उपयोग की भी अनुमति देता है, जो निश्चित रूप से इस मॉड्यूल को काम करने में मदद करते हैं। मैंने एंड्रॉइड के लिए हैरी 1453 की एंड्रॉइड-ब्लूटूथ-सीरियल लाइब्रेरी का भी इस्तेमाल किया, क्योंकि इसने ब्लूटूथ सीरियल कम्युनिकेशन को एक साथ रखना बहुत आसान बना दिया।
यदि आप इस ऐप को घर पर बनाना चाहते हैं, तो आपको मैपबॉक्स एक्सेस टोकन प्राप्त करने की आवश्यकता होगी, जो प्रति माह एक निश्चित संख्या में अनुरोधों तक निःशुल्क है। आपको इस टोकन को कोड में डालना होगा, और ऐप को अपनी तरफ बनाना होगा। आपको अपने स्वयं के ESP32 के ब्लूटूथ मैक पते में भी कोड करना होगा।
जैसा कि यह खड़ा है, ऐप आपको आपके वर्तमान स्थान से किसी भी स्थान पर मार्गदर्शन कर सकता है जिसे आप मानचित्र पर क्लिक कर सकते हैं। जैसा कि परिचय में उल्लेख किया गया है, हालांकि, यह मोड़ के अलावा किसी अन्य युद्धाभ्यास का समर्थन नहीं करता है, और अभी तक ऑफ-रूट को संभालता नहीं है।
आप मेरे जीथब पर संपूर्ण स्रोत कोड पा सकते हैं।
चरण 8: आगे क्या है?
अब जबकि ऐप वास्तव में अपने उपयोगकर्ता को एक निर्धारित मार्ग पर मार्गदर्शन करने के लिए पर्याप्त रूप से कार्यात्मक है (यदि निर्धारित मार्ग से कोई विचलन नहीं हैं), मेरा मुख्य ध्यान स्मार्टफोन ऐप को बेहतर बनाना होगा, और कुछ क्षमताओं को लागू करना होगा जो मॉड्यूल को एक व्यवहार्य नेविगेशन डिवाइस। इसमें स्क्रीन बंद होने पर भी फोन से ब्लूटूथ संचार सक्षम करना, साथ ही अन्य प्रकार के युद्धाभ्यास (गोल चक्कर, विलय, …) के लिए समर्थन शामिल है। यदि उपयोगकर्ता मूल मार्ग से विचलित हो जाता है तो मैं एक पुनर्रचना सुविधा भी लागू करूंगा।
जब यह सब हो जाएगा, तो मैं कंटेनर और उसके अटैचमेंट मैकेनिज्म में सुधार करूंगा, इसे 3 डी प्रिंट करूंगा, और पहले रन के लिए मॉड्यूल को लेने की कोशिश करूंगा।
यदि सब कुछ ठीक रहा, तो मेरा दीर्घकालिक उद्देश्य इस परियोजना के एम्बेडेड इलेक्ट्रॉनिक्स के लिए एक कस्टम पीसीबी डिजाइन करना है, जो अंतिम उत्पाद पर काफी जगह बचाएगा।
मैं भविष्य में इस मॉड्यूल में कुछ अन्य सुविधाएं भी जोड़ सकता हूं, जिसमें एक समय प्रदर्शन, साथ ही एक फोन अधिसूचना अलार्म भी शामिल है, जो उपयोगकर्ता को एक टेक्स्ट संदेश या कॉल प्राप्त होने पर एक आइकन दिखाई दे सकता है। अंत में मैं इस मॉड्यूल में एक विशाल संगीत प्रशंसक के रूप में Spotify क्षमताओं को जोड़ना पसंद करूंगा। हालांकि, इस समय, यह केवल एक अच्छा है।
चरण 9: निष्कर्ष और विशेष धन्यवाद
जैसा कि परिचय में कहा गया है, हालांकि यह परियोजना समाप्त होने से बहुत दूर है, मैं वास्तव में इसे दुनिया के साथ साझा करना चाहता था, उम्मीद है कि यह किसी और को प्रेरित कर सकता है।मैं इस विषय पर अपने शोध का दस्तावेजीकरण भी करना चाहता था, क्योंकि एआर और एचयूडी में वास्तव में बहुत अधिक शौक़ीन दिलचस्पी नहीं है, जो मुझे लगता है कि शर्म की बात है।
मैं Awall99 और Danel Quintana को बहुत-बहुत धन्यवाद देना चाहता हूं, जिनकी संबंधित संवर्धित वास्तविकता परियोजना ने मुझे इस मॉड्यूल को बनाने में बहुत प्रेरित किया।
आपके ध्यान के लिए आप सभी का धन्यवाद, निकट भविष्य में इस परियोजना में सुधार होने पर मैं एक अपडेट पोस्ट करना सुनिश्चित करूंगा। इस बीच, आप सभी को बाद में मिलते हैं!
सिफारिश की:
वीबीस्क्रिप्ट मूल बातें - अपनी स्क्रिप्ट शुरू करना, देरी और बहुत कुछ!: 5 कदम
वीबीस्क्रिप्ट मूल बातें - अपनी स्क्रिप्ट शुरू करना, देरी और अधिक !: नोटपैड के साथ वीबीस्क्रिप्ट बनाने के तरीके पर मेरे पहले ट्यूटोरियल में आपका स्वागत है। Vbs फ़ाइलों के साथ, आप कुछ मज़ेदार मज़ाक या घातक वायरस बना सकते हैं। इस ट्यूटोरियल में, मैं आपको बेसिक कमांड दिखाने वाला हूँ जैसे कि आपकी स्क्रिप्ट शुरू करना, फाइल्स खोलना और बहुत कुछ। टी पर
स्वचालित पानी, इंटरनेट कनेक्शन और बहुत कुछ के साथ बहुत बढ़िया ग्रीनहाउस: 7 कदम (चित्रों के साथ)
स्वचालित पानी, इंटरनेट कनेक्शन और बहुत कुछ के साथ बहुत बढ़िया ग्रीनहाउस: इस निर्देश में आपका स्वागत है। मार्च की शुरुआत में, मैं एक बगीचे की दुकान में था और कुछ ग्रीनहाउस देखे। और चूंकि मैं लंबे समय से पौधों और इलेक्ट्रॉनिक्स के साथ एक प्रोजेक्ट बनाना चाहता था, इसलिए मैंने आगे बढ़कर एक खरीदा: https://www.instagram.com/p
नोटपैड में गेम बनाना और भी बहुत कुछ: 10 कदम
नोटपैड में गेम बनाना और बहुत कुछ: यह मेरा पहला निर्देश है। तो अगर आपके पास कोई सुझाव है तो कृपया कमेंट करें। चलिए शुरू करते हैं! जब हम सभी नोटपैड शब्द सुनते हैं तो हम सामान को नोट करने के लिए कुछ उबाऊ बेकार अनुप्रयोगों के बारे में सोचते हैं। वैसे नोटपैड इससे कहीं अधिक है। हम अपने पी को नियंत्रित कर सकते हैं
एनएफसी लॉक - जब एक पीसीबी बटन, एंटीना और भी बहुत कुछ होता है: 7 कदम (चित्रों के साथ)
एनएफसी लॉक - जब एक पीसीबी बटन, एंटीना और भी बहुत कुछ होता है …: आप इस निर्देश से दो चीजों में से एक ले सकते हैं। आप साथ चल सकते हैं और एक संख्यात्मक कीपैड और एक एनएफसी रीडर का अपना संयोजन बना सकते हैं। योजनाबद्ध यहाँ है। पीसीबी लेआउट यहाँ है। आपको पी ऑर्डर करने के लिए सामग्री का बिल मिलेगा
बहुत ही सरल फिर भी बहुत प्रभावी शरारत (कंप्यूटर शरारत): ३ कदम
बहुत ही सरल … फिर भी बहुत प्रभावी शरारत (कंप्यूटर शरारत): यह निर्देश बहुत सरल है, फिर भी बहुत प्रभावी है! क्या होगा: आप पीड़ित के डेस्कटॉप पर सभी आइकन छुपाते हैं। आपके द्वारा शरारत करने के बाद जब वे कंप्यूटर देखेंगे तो पीड़ित घबरा जाएगा। यह कंप्यूटर को किसी भी तरह से नुकसान नहीं पहुंचा सकता