جدول المحتويات:

نموذج HUD للدراجات النارية الذكية (التنقل خطوة بخطوة وأكثر من ذلك بكثير): 9 خطوات
نموذج HUD للدراجات النارية الذكية (التنقل خطوة بخطوة وأكثر من ذلك بكثير): 9 خطوات

فيديو: نموذج HUD للدراجات النارية الذكية (التنقل خطوة بخطوة وأكثر من ذلك بكثير): 9 خطوات

فيديو: نموذج HUD للدراجات النارية الذكية (التنقل خطوة بخطوة وأكثر من ذلك بكثير): 9 خطوات
فيديو: لعبة Days Gone Walkthrough الكاملة (PS5) 4K 60FPS HDR 2024, يوليو
Anonim
نموذج HUD للدراجات النارية الذكية (التنقل خطوة بخطوة وغير ذلك الكثير)
نموذج HUD للدراجات النارية الذكية (التنقل خطوة بخطوة وغير ذلك الكثير)
نموذج HUD للدراجات النارية الذكية (التنقل خطوة بخطوة وغير ذلك الكثير)
نموذج HUD للدراجات النارية الذكية (التنقل خطوة بخطوة وغير ذلك الكثير)
نموذج HUD للدراجات النارية الذكية (التنقل خطوة بخطوة وغير ذلك الكثير)
نموذج HUD للدراجات النارية الذكية (التنقل خطوة بخطوة وغير ذلك الكثير)
نموذج HUD للدراجات النارية الذكية (التنقل خطوة بخطوة وغير ذلك الكثير)
نموذج HUD للدراجات النارية الذكية (التنقل خطوة بخطوة وغير ذلك الكثير)

أهلا !

هذه Instructables هي قصة كيف صممت وصنعت منصة HUD (شاشة عرض رأسية) مصممة ليتم تثبيتها على خوذات الدراجات النارية. وقد كتب في سياق مسابقة "الخرائط". للأسف ، لم أتمكن من إنهاء هذا المشروع تمامًا في الوقت المناسب للموعد النهائي للمسابقة ، لكنني ما زلت أرغب في مشاركة تقدمي فيه ، بالإضافة إلى توثيق كل التجارب والخطأ التي مررت بها.

خطرت لي فكرة هذا المشروع لأول مرة منذ بضع سنوات ، عندما دخلت الدراجات النارية ، وبدأت في النظر في المعدات التي سأحتاج إلى شرائها لجعل رحلاتي أكثر متعة. في ذلك الوقت ، شعرت بالحيرة لأن أفضل طريقة للحصول على بعض التنقلات الأساسية عبر نظام تحديد المواقع العالمي (GPS) أثناء الركوب هي توصيل هاتفك الذكي بشكل أساسي بمقود دراجتك. اعتقدت لنفسي أنه بالتأكيد ، يمكن أن تكون هناك طريقة أفضل للحصول على هذا النوع من المعلومات بسرعة.

عندها وصل الأمر إلي: يمكن أن تكون شاشة العرض الرأسية هي الطريقة للحصول على التنقل أثناء الركوب ، دون إفراغ بطارية هاتفك وتعريضها للعوامل الجوية.

بمرور الوقت ، نضجت هذه الفكرة في ذهني ، وأعتقد أن وجود HUD أمامي في جميع الأوقات سيسمح بالعديد من الاستخدامات أكثر من التنقل البسيط. هذا هو السبب في أن خطتي هي جعل النظام الأساسي عامًا وقياسيًا ، بحيث يمكن لأي شخص إنشاء وحدة تعرض المعلومات التي يحتاجون إليها على شاشة عرض المعلومات الخاصة بهم

على الرغم من وجود منتجات متوفرة تجاريًا تفي بهذه المهمة ، إلا أنه لا توجد أي منتجات معيارية مثل النظام الأساسي الخاص بي ، كما أنها تميل إلى أن تكون باهظة الثمن أيضًا. على أي حال ، مرحبا بكم في هذا المشروع.

ما يعمل حتى الآن

كما ذُكر ، لا يزال هذا المشروع في حالة تنموية إلى حد كبير ، وهذا ما يعمل حاليًا.

- الاتصال بين الهاتف الذكي واللوحة المستندة إلى ESP32 (الهاتف مستيقظًا)

- تم تصميم البصريات (قد يحتاج إلى تعديلات صغيرة على المدى الطويل)

- تطبيق ملاحة Android باستخدام Mapbox navigation SDK:

- قادرة على حساب وعرض موقع المستخدم على الخريطة ، وكذلك الطريق من ذلك إلى الوجهة

- قادر على الاتصال بجهاز Bluetooth (عنوان MAC الخاص بالجهاز مشفر بشكل ثابت حتى الآن)

- قادر على التنقل في الوقت الفعلي ، بما في ذلك استخراج معلومات المناورة القادمة وإرسالها عبر البلوتوث التسلسلي (يدعم المنعطفات فقط في الوقت الحالي)

ما يحتاج العمل

تحتوي هذه القائمة على عناصر ضرورية للغاية للاستخدام المقصود لـ HUD ، ولكنها ليست جاهزة للتنفيذ بعد.

- التصميم العام (ملحق الخوذة ، آلية ضبط زاوية العاكس ،..)

- الروبوت التطبيق:

- تنفيذ عمليات الكشف والتصحيح خارج المسار

- قدرة المستخدم على إدخال عنوان الوجهة

- نقاط الطريق؟

- بيئة العمل / الجماليات

اللوازم:

الضروريات

- مجلس تطوير قائم على esp32

- أي هاتف ذكي يعمل بنظام Android حديثًا إلى حد ما (مزود بتقنية Bluetooth)

- شاشة SSD1306 أو شاشة OLED ممكّنة أخرى مقاس 96 بوصة (كانت شاشة 128x64 بكسل ، انظر جزء "العقول: وحدة التحكم الدقيقة والشاشة")

- عاكس (أي قطعة من الأكريليك / الزجاج / زجاج شبكي ستفي بالغرض)

- عدسة فرينل (كان طول لي حوالي 13 سم ، انظر جزء "اختيار العدسة")

أدوات

- لحام حديد

- اللوح

- عدد قليل من كابلات العبور

- طابعة ثلاثية الأبعاد / خدمة طباعة ثلاثية الأبعاد

الخطوة 1: كيف يعمل كل شيء: شرح خيارات التصميم

كيف يعمل كل شيء: شرح خيارات التصميم
كيف يعمل كل شيء: شرح خيارات التصميم
كيف يعمل كل شيء: شرح خيارات التصميم
كيف يعمل كل شيء: شرح خيارات التصميم
كيف يعمل كل شيء: شرح خيارات التصميم
كيف يعمل كل شيء: شرح خيارات التصميم

تتمثل الفكرة الأساسية لشاشة Heads Up في عرض صورة أمام رؤية شخص ما ، حتى لا يضطروا إلى النظر بعيدًا عما يفعلونه (سواء كان ذلك قيادة طائرة أو قيادة دراجة نارية ، والتي ستكون لدينا مثال حالة).

بصريات

من الناحية الفنية ، يمكن تحقيق ذلك من خلال وضع شاشة مباشرة أمام أعين المستخدم. ومع ذلك ، فإن الشاشة غير شفافة ، وبالتالي ستعيق رؤية المستخدم. يمكنك بعد ذلك وضع الشاشة أمام سطح عاكس ، والذي من شأنه أن يعكس محتوى الشاشة بينما يكون أيضًا مرئيًا بما يكفي بحيث يمكن للمستخدم رؤية ما هو أمامه.

ومع ذلك ، فإن هذا النهج به عيب كبير: فالشاشة الفعلية عادة ما تكون أقرب إلى أعين المستخدم مما يجب على المستخدم التركيز عليه بالفعل (على سبيل المثال ، الطريق أمامه). هذا يعني أنه من أجل قراءة ما هو موجود على السطح العاكس ، ستحتاج عيون المستخدم إلى التكيف مع مسافة الشاشة من عينيه (لنقل 20 سم) ، ثم تحتاج بعد ذلك إلى التكيف مرة أخرى من أجل التركيز على الطريق أمامك. (~ 2/5 أمتار). الوقت الذي تستغرقه هذه العملية برمتها هو وقت ثمين يجب قضاءه في النظر إلى الطريق ، وقد يكون التكيف بشكل متكرر غير مريح للمستخدم بعد بضع دقائق فقط.

لهذا السبب قررت إضافة عدسة بين الشاشة والعاكس. يجب أن تسمح هذه العدسة ، إذا تم اختيارها بعناية ، بإنشاء صورة افتراضية للشاشة (انظر المخطط أعلاه) ، والتي ستبدو بعد ذلك بعيدة عن أعين المستخدم كما هي بالفعل ، وبالتالي تتطلب تعديلات أقل مفاجأة (أو لا شيء على الإطلاق ، في سيناريو مثالي). يسمح هذا التصميم للمستخدم بإلقاء نظرة سريعة على العاكس ، والحصول على المعلومات التي يحتاجها ، وإلقاء نظرة على الطريق على الفور.

دور الهاتف الذكي

نظرًا لأنه لم يكن من الواقعي محاولة تنفيذ تطبيق تنقل كامل على ESP32 وحده ، فقد قررت إنشاء تطبيق android يعتني بهذا الأمر. سيحتاج التطبيق بعد ذلك فقط إلى إخبار ESP32 بما يجب على المستخدم فعله للوصول إلى وجهته ، ويقوم ESP32 بنقل هذه المعلومات من خلال HUD (انظر الشكل "كيف تعمل الوحدة").

الخطوة 2: الأجزاء - العقول: متحكم وشاشة

الأجزاء - العقول: متحكم وشاشة
الأجزاء - العقول: متحكم وشاشة
الأجزاء - العقول: متحكم وشاشة
الأجزاء - العقول: متحكم وشاشة

كما هو مذكور أعلاه ، فقد خططت لعرض معلومات التنقل الخاصة بالوحدة النمطية الخاصة بي ، بينما لم أقم بحساب الموقع الفعلي والتتبع والتنقل في الوقت الفعلي. بدلاً من ذلك ، سيتواصل هاتف المستخدم مع الوحدة ، ويرسل إليها المعلومات ليتم عرضها بعد ذلك على شاشة HUD.

لتسهيل الاتصال بين هاتف المستخدم والوحدة النمطية ، اخترت استخدام لوحة قائمة على ESP32 لهذا المشروع. كان هذا الاختيار بسبب هذه الوحدة المحددة التي تتمتع بقدرات Bluetooth مدمجة ، بالإضافة إلى بعض المواصفات الأخرى المثيرة للاهتمام (سهولة استخدام التخزين غير المتطاير ، وحدة المعالجة المركزية ثنائية النواة ، ذاكرة الوصول العشوائي الكافية لتشغيل شاشة OLED عبر I2C ، …). من السهل نسبيًا تصميم مركبات ثنائي الفينيل متعدد الكلور استنادًا إلى ESP32 ، والذي أخذته في الاعتبار. لدي أيضًا خبرة مهنية في استخدام وتصميم الدوائر باستخدام ESP32 ، مما أثر بالتأكيد على اختياري.

جاء اختيار الشاشة أساسًا إلى أي شيء يمكن أن أجده على الرغم من أنه سيكون ساطعًا بدرجة كافية لاستخدامه ، مع كونه صغيرًا قدر الإمكان. لم أكن قلقًا جدًا بشأن عدد وحدات البكسل على الشاشة ، حيث كان هدفي هو الحصول على واجهة مستخدم بسيطة للغاية.

وتجدر الإشارة إلى أن برنامج تشغيل الشاشة يجب أن يكون مدعومًا بمكتبة تسمح بالنسخ المتطابق للصور. وذلك لأن الصورة المعروضة تنقلب عندما تدخل العدسة وتظهر على العاكس ، وعدم الاضطرار إلى عكس ما يتم عرضه يدويًا يمثل عبئًا ثقيلًا على أكتافنا كبناة.

الخطوة 3: الأجزاء - البصريات: إيجاد حل وسط

قطع غيار - بصريات: إيجاد حل وسط
قطع غيار - بصريات: إيجاد حل وسط
قطع غيار - بصريات: إيجاد حل وسط
قطع غيار - بصريات: إيجاد حل وسط
قطع غيار - بصريات: إيجاد حل وسط
قطع غيار - بصريات: إيجاد حل وسط

كان من الصعب جدًا التعامل مع البصريات لهذا المشروع ، حيث لم يكن لدي أي فكرة عما كنت أبحث عنه عندما بدأت هذا المشروع لأول مرة. بعد بعض البحث ، فهمت أن ما أردت القيام به هو إنشاء "صورة افتراضية" لشاشة OLED الخاصة بي ، والتي تبدو بعيدة عن العين أكثر مما هي عليه في الواقع. ستكون المسافة المثالية لتشكيل هذه الصورة الافتراضية حوالي 2-5 أمتار أمام السائق ، ويبدو أن هذه هي المسافة إلى الأشياء التي نركز عليها عند القيادة (سيارات أخرى ، مطبات على الطريق ، إلخ …).

لتحقيق هذا الهدف ، اخترت استخدام عدسة Fresnel ، نظرًا لأنها كبيرة جدًا ورخيصة ، ويبدو أنها توفر مسافة بؤرية جيدة بما يكفي لمشروعي ، ويمكن قصها بمقص بسيط (وهذا ليس هو الحال بالنسبة لـ عدسات زجاجية مستديرة أكثر دقة). يمكن العثور على عدسات فرينل بأسماء مثل "مكبر الجيب" أو "مكبر بطاقة القراءة" ، حيث إنها مناسبة جدًا لمساعدة الأشخاص الذين يعانون من ضعف البصر على القراءة.

في الأساس ، كانت الحيلة هنا تدور حول إيجاد الحل الوسط المناسب بين:

- الحصول على مسافة معقولة للصورة الافتراضية (أي إلى أي مدى سيبدو HUD للمستخدم ، أو إلى أي مدى سيضطر المستخدم إلى ضبط عينيه لمعرفة ما هو موجود على شاشة HUD)

- عدم تكبير النص على الشاشة كثيرًا بواسطة العدسة (وهو في الأساس مكبر)

- وجود مسافة معقولة بين شاشة OLED والعدسة ، مما قد يؤدي إلى وحدة ضخمة جدًا

لقد طلبت شخصيًا عددًا قليلاً من العدسات المختلفة على أمازون ، وحددت الأطوال البؤرية الخاصة بكل منها ، قبل اختيار واحدة بطول واو يبلغ حوالي 13 سم. لقد وجدت أن هذا الطول F. ، بمسافة OLED-Lens تبلغ 9 سم ، أعطاني صورة مرضية على عاكس (انظر الصور القليلة الأخيرة أعلاه).

كما سترى في الرسوم التوضيحية الخاصة بي ، من أجل التركيز بشكل صحيح على النص المعروض ، يجب على الكاميرا المستخدمة في التقاط هذه الصور أن تعدل كما لو كانت تركز على كائن بعيد ، مما يجعل كل شيء على نفس المستوى مثل العاكس يبدو ضبابيًا. هذا هو بالضبط ما نريده لـ HUD.

يمكنك العثور على الملفات ثلاثية الأبعاد لحامل العدسة هنا.

الخطوة 4: الأجزاء - حاوية لحملها جميعًا

الأجزاء - حاوية لإمساكهم جميعًا
الأجزاء - حاوية لإمساكهم جميعًا
قطع غيار - حاوية لإمساكهم جميعًا
قطع غيار - حاوية لإمساكهم جميعًا

أثناء كتابة Instructables هذه ، لم يتم تصميم الحاوية الفعلية التي ستحتفظ بكل قطعة من شاشة العرض الرأسية تمامًا. ومع ذلك ، لدي بعض الأفكار حول شكله العام وكيفية التعامل مع مشاكل معينة (مثل كيفية الاحتفاظ بعاكس ثابت ، وجعله يتحمل رياح تزيد عن 100 كم / ساعة). لا يزال هذا الكثير من العمل قيد التنفيذ.

الخطوة 5: إنشاء بروتوكول لوحدتنا

من أجل إرسال تعليمات التنقل من الهاتف إلى لوحة التطوير ، كان عليّ التوصل إلى بروتوكول اتصال خاص بي يسمح لي بإرسال البيانات المطلوبة بسهولة من الهاتف ، مع تسهيل معالجتها بمجرد استلامها.

في وقت كتابة هذه التعليمات ، كانت المعلومات التي يجب إرسالها من الهاتف للتنقل باستخدام الوحدة هي:

- نوع المناورة القادمة (انعطاف بسيط ، دوار ، اندماج في طريق آخر ، …)

- التعليمات الدقيقة للمناورة القادمة (تعتمد على نوع المناورة: يمين / يسار للانعطاف ؛ أي مخرج يتجه للدوار ، …)

- المسافة المتبقية قبل المناورة القادمة (بالأمتار في الوقت الحالي)

قررت تنظيم هذه البيانات باستخدام بنية الإطار التالية:

: type.instructions، المسافة؛

على الرغم من أن هذا ليس حلاً جميلًا ، إلا أنه يسمح لنا بفصل وتمييز كل مجال من مجالات بروتوكولنا بسهولة ، مما سهل الترميز على جانب ESP32.

من المهم أن تضع في اعتبارك أنه بالنسبة للميزات المستقبلية ، قد يلزم إضافة معلومات أخرى إلى هذا البروتوكول (مثل اليوم والوقت بالتحديد ، أو الموسيقى التي يتم تشغيلها على هاتف المستخدم) ، والتي يمكن أن تكون مجدية بسهولة باستخدام نفس بناء المنطق كما هو الحال الآن.

الخطوة 6: الكود: جانب ESP32

الكود: جانب ESP32
الكود: جانب ESP32
الكود: جانب ESP32
الكود: جانب ESP32

رمز ESP32 حاليًا بسيط للغاية. تستخدم مكتبة U8g2lib ، والتي تتيح التحكم السهل في شاشة OLED (مع تمكين انعكاس الصورة المعروضة).

بشكل أساسي ، كل ما يفعله ESP32 هو تلقي البيانات التسلسلية عبر البلوتوث عندما يرسلها التطبيق ، ويحللها ، ويعرض هذه البيانات أو الصور بناءً على هذه البيانات (أي عرض سهم بدلاً من الجملة "انعطف يسارًا / يمينًا"). ها هو الكود:

/ * برنامج للتحكم في HUD من تطبيق android عبر البلوتوث التسلسلي * / # تتضمن "BluetoothSerial.h" // Header File for Serial Bluetooth ، ستتم إضافته افتراضيًا إلى Arduino # include #include #ifdef U8X8_HAVE_HW_SPI # include # endif # ifdef U8X8_HAVE_HW_I2C # تتضمن # endif // مُنشئ مكتبة OLED ، يجب تغييرها وفقًا لشاشتك U8G2_SSD1306_128X64_ALT0_F_HW_I2C u8g2 (U8G2_MIRROR، / * reset = * / U8X8_PIN_NONE) // الحالة المكتشفة_الحقل القيم + متغير # تعريف maneuverField 1 # تحديد الإرشادات الحقل 2 # حدد مسافة المجال 3 # حدد endOfFrame 4int discovery_field = endOfFrame ؛ BluetoothSerial serialBT ؛ // كائن لـ Bluetoothchar incoming_char ؛ مناورة شار [10] ؛ تعليمات شار [10] ؛ مسافة char [10] ؛ char tempManeuver [10] ؛ تعليمات char temp [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)؛ // بدء تشغيل جهاز العرض التسلسلي في 9600 باود u8g2.begin () ؛ // Init OLED control serialBT.begin ("ESP32_BT") ؛ // اسم تأخير إشارة البلوتوث (20) ؛ Serial.println ("جهاز Bluetooth جاهز للإقران") ؛} حلقة باطلة () {if (serialBT.available () &&! fullsentence) // يتم استلام الأحرف عبر تسلسل Bluetooth {incoming_char = serialBT.read ()؛ Serial.print ("مُستلم:") ؛ Serial.println (incoming_char) ؛ } switch (detect_field) {case maneuverField: Serial.println ("الحقل المكتشف: maneuver") ؛ إذا (incoming_char == '.') // تم اكتشاف الحقل التالي {اكتشاف_الحقل = تعليمات الحقل ؛ } else {// املأ مناورة مصفوفة معلومات نوع المناورة [nbr_char_maneuver] = incoming_char؛ nbr_char_maneuver ++ ؛ } استراحة؛ تعليمات الحالة الحقل: Serial.println ("الحقل المكتشف: التعليمات") ؛ إذا (incoming_char == '،') // تم اكتشاف الحقل التالي {اكتشاف_الحقل = مسافة المجال ؛ } else {// املأ التعليمات تعليمات مصفوفة المعلومات [nbr_char_instructions] = incoming_char؛ nbr_char_instructions ++ ؛ } استراحة؛ حالة المسافةField: Serial.println ("الحقل المكتشف: المسافة") ؛ if (incoming_char == '؛') // تم اكتشاف نهاية الإطار {discovery_field = endOfFrame ؛ Serial.print ("مناورة:") ؛ Serial.println (مناورة) ؛ Serial.print ("تعليمات:") ؛ Serial.println (تعليمات) ؛ Serial.print ("مسافة:") ؛ Serial.println (مسافة) ؛ الامتلاء = صحيح ؛ update_Display () ، // تم استلام الإطار الكامل وتحليله وعرض بيانات المستلم} else {// Fill the مسافة صفيف معلومات المسافة [nbr_char_distance] = incoming_char؛ nbr_char_distance ++ ؛ } استراحة؛ حالة endOfFrame: if (incoming_char == ':') discovery_field = maneuverField ؛ // إطار جديد تم اكتشاف كسر ؛ الافتراضي: // لا تكسر شيئًا ؛ } delay (20)؛} void update_Display () {// التخزين المؤقت لكل مصفوفة char لتجنب التعارضات المحتملة memcpy (tempManeuver، maneuver، nbr_char_maneuver)؛ memcpy (تعليمات ، تعليمات ، nbr_char_instructions) ؛ memcpy (المسافة ، المسافة ، nbr_char_distance) ؛ parseCache () ، // تحليل وعملية char arrays fullsentence = false ؛ // تمت معالجة الجملة ، جاهزة للخطاب التالي} parseCache () {u8g2.clearBuffer ()؛ // امسح الذاكرة الداخلية u8g2.setFont (u8g2_font_ncenB10_tr) ؛ // اختر خطًا مناسبًا // char arrays -> سلسلة إلزامية لاستخدام الدالة substring () String maneuverString = tempManeuver؛ تعليمات السلسلة String = tempInstructions ؛ // تنفيذ البروتوكول هنا. يدعم فقط المنعطفات في الوقت الحالي. if (maneuverString.substring (0، 4) == "turn") {// تحقق من نوع المناورة Serial.print ("TURN DETECTED") ؛ if (تعليمات String.substring (0، 5) == "right") {// تحقق من تعليمات محددة واعرض وفقًا لذلك u8g2.drawStr (5، 15، "-")؛ } else if (تعليمات String.substring (0، 4) == "left") {// تحقق من إرشادات محددة واعرض وفقًا لذلك u8g2.drawStr (5، 15، "<---")؛ } else u8g2.drawStr (5، 15، "Err.")؛ // حقل تعليمات غير صالح} / * تنفيذ أنواع مناورة أخرى (دوار ، إلخ..) * else if (tempManeuver == "rdbt") {* *] * / u8g2.drawStr (5، 30، tempDistance)؛ // عرض المسافة المتبقية u8g2.sendBuffer () ؛ // نقل الذاكرة الداخلية إلى الشاشة // إعادة تعيين جميع مصفوفات الأحرف قبل ذاكرة القراءة التالية (مناورة ، 0 ، 10) ؛ memset (تعليمات ، 0 ، 10) ؛ memset (مسافة ، 0 ، 10) ؛ memset (tempManeuver ، 0 ، 10) ؛ memset (تعليمات درجة الحرارة ، 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

بالنسبة لتطبيق الهاتف الذكي ، قررت استخدام SDK للملاحة من Mapbox ، حيث يوفر الكثير من الميزات المفيدة عندما يتعلق الأمر بإنشاء خريطة تنقل من البداية. كما أنه يسمح باستخدام العديد من المستمعين المفيدين ، مما يساعد بالتأكيد في جعل هذه الوحدة تعمل. لقد استخدمت أيضًا مكتبة harry1453's android-bluetooth-serial للأندرويد ، حيث جعلت الاتصال التسلسلي عبر البلوتوث أسهل كثيرًا في التجميع.

إذا كنت ترغب في إنشاء هذا التطبيق في المنزل ، فستحتاج إلى الحصول على رمز الوصول إلى Mapbox ، والذي يكون مجانيًا لعدد معين من الطلبات شهريًا. سيتعين عليك وضع هذا الرمز المميز في الكود ، وبناء التطبيق على جانبك. ستحتاج أيضًا إلى رمز في عنوان MAC الخاص بـ Bluetooth الخاص بـ ESP32.

كما هو الحال ، يمكن للتطبيق إرشادك من موقعك الحالي إلى أي مكان يمكنك النقر فوقه على الخريطة. ومع ذلك ، كما هو مذكور في المقدمة ، فإنه لا يدعم أي مناورة أخرى غير المنعطفات ، ولا يتعامل مع الطرق الخارجية حتى الآن.

يمكنك العثور على شفرة المصدر بالكامل على جيثب الخاص بي.

الخطوة 8: ماذا بعد؟

الآن بعد أن أصبح التطبيق وظيفيًا بدرجة كافية لتوجيه مستخدمه فعليًا على مسار محدد (إذا لم تكن هناك انحرافات عن المسار المحدد) ، فإن تركيزي الرئيسي سيكون على تحسين تطبيق الهاتف الذكي ، وتنفيذ القدرات القليلة التي من شأنها أن تجعل الوحدة جهاز ملاحة قابل للحياة. يتضمن ذلك تمكين اتصال Bluetooth من الهاتف حتى عندما تكون الشاشة مغلقة ، بالإضافة إلى دعم أنواع أخرى من المناورات (الدوارات ، والدمج ، …). سأقوم أيضًا بتنفيذ ميزة إعادة التوجيه إذا انحرف المستخدم عن المسار الأصلي.

عند الانتهاء من كل هذا ، سأعمل على تحسين الحاوية وآلية إرفاقها ، وطباعتها ثلاثية الأبعاد ، ومحاولة أخذ الوحدة للتشغيل لأول مرة.

إذا سارت الأمور على ما يرام ، فإن هدفي طويل المدى هو تصميم ثنائي الفينيل متعدد الكلور مخصص للإلكترونيات المدمجة في هذا المشروع ، مما سيوفر مساحة كبيرة على المنتج النهائي.

قد أضيف أيضًا بعض الميزات الأخرى إلى هذه الوحدة في المستقبل ، بما في ذلك عرض الوقت ، بالإضافة إلى إنذار إشعار الهاتف ، مما قد يجعل رمزًا يظهر عندما يتلقى المستخدم رسالة نصية أو مكالمة. أخيرًا ، أود إضافة إمكانات Spotify إلى هذه الوحدة ، بصفتي معجبًا كبيرًا بالموسيقى. ومع ذلك ، في هذا الوقت ، من الجيد أن يكون لديك هذا.

الخطوة 9: خاتمة وشكر خاص

خاتمة وشكر خاص!
خاتمة وشكر خاص!

كما هو مذكور في المقدمة ، على الرغم من أن هذا المشروع لم ينته بعد ، إلا أنني أردت حقًا مشاركته مع العالم ، على أمل أن يلهم شخصًا آخر.أردت أيضًا توثيق بحثي حول هذا الموضوع ، حيث لا يوجد الكثير من اهتمام الهواة بالواقع المعزز و HUD ، وهو ما أعتقد أنه عار.

أود أن أتقدم بالشكر الجزيل إلى Awall99 و Danel Quintana ، اللذين ألهمني مشروع الواقع المعزز الخاص بهما كثيرًا في صنع هذه الوحدة.

شكرًا لكم جميعًا على اهتمامكم ، وسأحرص على نشر تحديث عندما يتم تحسين هذا المشروع في المستقبل القريب. في هذه الأثناء ، أراكم جميعًا لاحقًا!

موصى به: