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

اردوينو مخصص للحفاظ على أزرار عجلة القيادة مع ستيريو سيارة جديد: 9 خطوات (مع صور)
اردوينو مخصص للحفاظ على أزرار عجلة القيادة مع ستيريو سيارة جديد: 9 خطوات (مع صور)

فيديو: اردوينو مخصص للحفاظ على أزرار عجلة القيادة مع ستيريو سيارة جديد: 9 خطوات (مع صور)

فيديو: اردوينو مخصص للحفاظ على أزرار عجلة القيادة مع ستيريو سيارة جديد: 9 خطوات (مع صور)
فيديو: شاهد شخص يفقد عقله من كثرة لعب لعبة فري فاير-Free Fire Funne/فري فاير شورتي!Shorts😱فري فاير 2023😯😮😰😱 2024, يوليو
Anonim
اردوينو مخصص للحفاظ على أزرار عجلة القيادة مع ستيريو سيارة جديد
اردوينو مخصص للحفاظ على أزرار عجلة القيادة مع ستيريو سيارة جديد
اردوينو مخصص للحفاظ على أزرار عجلة القيادة مع ستيريو سيارة جديد
اردوينو مخصص للحفاظ على أزرار عجلة القيادة مع ستيريو سيارة جديد
اردوينو مخصص للحفاظ على أزرار عجلة القيادة مع ستيريو سيارة جديد
اردوينو مخصص للحفاظ على أزرار عجلة القيادة مع ستيريو سيارة جديد

قررت استبدال استريو السيارة الأصلي في سيارتي فولفو V70 -02 بجهاز استريو جديد حتى أتمكن من الاستمتاع بأشياء مثل mp3 والبلوتوث والتكلم الحر.

تحتوي سيارتي على بعض أدوات التحكم في عجلة القيادة للستيريو التي أرغب في الاستمرار في استخدامها. لم أتوقع أن تكون هذه مشكلة لأن هناك العديد من المحولات في السوق من المفترض أن تكون متوافقة مع سيارتي. لكن سرعان ما اكتشفت أنهم ليسوا كذلك! (يبدو أن محولات V70 قد تواجه مشاكل مع -02 سيارة بسبب بروتوكول CAN مختلف قليلاً.)

حسنا ماذا سنفعل إذن؟ احتفظ بالستيريو القديم؟ عيش حياة بأزرار لا تعمل؟ بالطبع لا! إذا لم يكن هناك محول عامل في السوق ، فسنضطر إلى بناء واحد!

يمكن تطبيق هذا التوجيه (مع بعض التعديلات) على السيارات حيث تتصل أزرار عجلة القيادة عبر ناقل CAN.

الخطوة 1: اكتشف كيفية إرسال أوامر إلى الستيريو

اكتشف كيفية إرسال أوامر إلى الستيريو
اكتشف كيفية إرسال أوامر إلى الستيريو
اكتشف كيفية إرسال أوامر إلى الستيريو
اكتشف كيفية إرسال أوامر إلى الستيريو

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

يتكون جهاز التحكم عن بعد الخاص بجهاز الاستريو الجديد (Kenwood) من سلك واحد ولم أتمكن من العثور على أي معلومات حول كيفية عمله. ومع ذلك ، فإنه يحتوي أيضًا على مقبس مقاس 3.5 ملم للإدخال عن بُعد. لم أتمكن من معرفة أي شيء عن ذلك أيضًا. ولكن هناك بعض المعلومات حول مقبس مقاس 3.5 مم للعلامات التجارية الأخرى تشير إلى أنه يتم تحديد أوامر مختلفة من خلال تطبيق مقاومة محددة بين الطرف والكم (واختيارياً بين الحلقة والكم). على سبيل المثال https://forum.arduino.cc/index.php؟topic=230068.0. لذلك قررت أن أجرب ذلك ، مزودًا بلوحة توصيل ومجموعة من المقاومات وقابس 3.5 ملم متصل بجهاز الاستريو ومتصل بلوحة التجارب. لم يتم التعرف على أي شيء في البداية ، ولكن جهاز الاستريو يحتوي على قائمة "وضع التعلم" وهناك يمكن إعداد الأوامر بنجاح أثناء تطبيق المقاومة المختلفة. النجاح!

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

لذا أوصيك باستخدام لوح التجارب مع مقاومات وأزرار تبديل لجميع الأوامر البعيدة التي تريد التعامل معها واختبار مدى نجاحها جميعًا.

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

الخطوة 2: اكتشف مكان الاتصال بحافلة CAN

اكتشف مكان الاتصال بحافلة CAN
اكتشف مكان الاتصال بحافلة CAN

تحتاج إلى تحديد مكان جيد للاتصال بحافلة CAN. نظرًا لأنك تقوم باستبدال جهاز استريو قديم يتصل عبر CAN ، يجب أن تكون قادرًا على العثور عليه خلف جهاز الاستريو. يتكون ناقل CAN من زوج من الأسلاك الملتوية (CAN-L و CAN_H). استشر مخطط الأسلاك لسيارتك للتأكد.

الخطوة 3: عكس هندسة رسائل CAN

الهندسة العكسية لرسائل CAN
الهندسة العكسية لرسائل CAN

ما لم تتمكن Google من إخبارك بالرسائل التي يمكنك الاستماع إليها ، فستحتاج إلى الاتصال بحافلة CAN والقيام ببعض الهندسة العكسية. لقد استخدمت Arduino Uno ودرع CAN. (لا تحتاج حقًا إلى درع CAN ، كما سترى لاحقًا يمكنك استخدام بعض المكونات الرخيصة على لوح التجارب بدلاً من ذلك.)

استشر Google لمعرفة معدل الباود الذي يجب أن تستخدمه عند الاتصال بسيارتك. (عادة ستجد أن هناك سرعة عالية وشبكة CAN منخفضة السرعة. أنت تتصل بشبكة السرعة المنخفضة.)

ستحتاج أيضًا إلى برمجة Arduino لتسجيل جميع رسائل CAN عبر الواجهة التسلسلية حتى تتمكن من حفظها في ملف سجل على جهاز الكمبيوتر الخاص بك. لن يقوم Arduino IDE القياسي بحفظ البيانات في ملف السجل ولكن يمكنك استخدام على سبيل المثال بدلا من ذلك المعجون.

قبل أن تبدأ في كتابة برنامجك ، تحتاج إلى تثبيت مكتبة CAN_BUS_Shield.

إليك بعض التعليمات البرمجية الزائفة لمساعدتك في البدء في برنامجك:

اقامة()

حلقة {init serial connection CAN library} () {إذا تم تلقي رسالة CAN {قراءة CAN message format إدخال السجل كتابة إدخال السجل إلى serial}}

تلميحات:

ستستخدم مثيلاً من الفئة MCP_CAN للوصول إلى وظائف مكتبة CAN:

MCP_CAN m_can ؛

يمكن التهيئة:

بينما (m_can.begin ()! = CAN_OK)

{تأخير (1000) ؛ }

تحقق من وجود رسائل CAN واقرأها:

بينما (m_can.checkReceive () == CAN_MSGAVAIL)

{// احصل على معرف CAN وطول الرسالة وبيانات الرسالة m_can.readMsgBufID (& m_canId، & m_msgLen، m_msgBuf) ؛ // افعل شيئًا مع بيانات الرسالة هنا}

إذا كنت بحاجة إلى مزيد من المساعدة ، فيمكنك العثور على رابط لبرنامجي في خطوة لاحقة. تتضمن مكتبة الدرع CAN أيضًا مثالاً. أو تحقق من تعليمات mviljoen2 التي تتضمن خطوة مماثلة.

ستحتاج أولاً إلى ملف مرجعي لمساعدتك في تصفية البيانات. قم بتبديل الإشعال إلى وضع الراديو وقم بتسجيل كل شيء لبضع دقائق دون لمس أي أزرار.

ثم لكل زر من الأزرار ، ابدأ التسجيل ، واضغط على الزر وأوقف التسجيل.

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

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

كلمة تحذير: لا يمكنك التأكد من أن الزر سينتج دائمًا رسالة متطابقة. قد تحتوي بعض وحدات البت على عدادات متزايدة وما إلى ذلك (يمكنك استثناء معرّف الرسالة ليكون هو نفسه.)

إذا كان لديك فولفو V70 -02 ، فهذا ما تبحث عنه:

  • معرف الرسالة: 0x0400066Byte0: 0x00 أو 0x40 أو 0x80 أو 0xc0 (لا تهتم)
  • بايت 1: 0x00 (لا تهتم)
  • بايت 2: 0x00 (لا تهتم)
  • بايت 3: 0x00-0x07 (لا تهتم)
  • بايت 4: 0x1f (لا تهتم)
  • بايت 5: 0x40 (لا تهتم)
  • بايت 6: 0x40 (لا تهتم)
  • بايت 7: معرف الزر: 0x77 = رفع مستوى الصوت ، 0x7b = خفض مستوى الصوت ، 0x7d = المسار التالي ، 0x7e = المسار السابق.

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

الخطوة 4: النموذج الأولي للجهاز

النموذج الأولي للجهاز
النموذج الأولي للجهاز

يجب أن يكون جهازك قادرًا على:

  1. تحديد الأوامر المستلمة على ناقل CAN
  2. أرسل الأوامر بتنسيق آخر إلى جهاز الستيريو

إذا كان لديك مساحة كافية ، فيمكنك استخدام Arduino ودرع CAN للجزء الأول وإرفاق بعض الأجهزة الإضافية للجزء الثاني. ومع ذلك، هناك بعض السلبيات:

  • تكلفة درع CAN
  • مقاس
  • لن يكون مصدر طاقة Arduino سعيدًا إذا كان متصلاً مباشرةً بسيارتك بجهد 12 فولت (من المحتمل أن يعمل ولكن من المحتمل أن يتم تقصير عمره).

لذلك استخدمت ما يلي بدلاً من ذلك:

  • Atmega 328 ، "عقل اردوينو". (هناك بعض المتغيرات ، احصل على المتغير الذي يساوي المتغير الموجود على Arduino Uno. يمكنك شرائه مع أو بدون محمل التمهيد Arduino.)
  • مكثفات الكريستال + 16 ميجا هرتز لإشارة الساعة.
  • يمكن MCP2551 جهاز الإرسال والاستقبال.
  • يمكن تحكم MCP2515.
  • TSR1-2450 ، يحول 6.5-36 فولت إلى 5 فولت. (غير مستخدم في النموذج الأولي لأن البرنامج لن يهتم بمصدر الطاقة.)
  • مفتاح CD4066B الذي سيتم استخدامه عند إرسال أوامر إلى جهاز الاستريو.
  • زوجان من المقاومات. (يمكن العثور على القيم في مخططات Eagle في خطوة لاحقة.)

الشيء الجيد في هذا التكوين هو أنه متوافق تمامًا مع مكتبة درع Arduino و CAN.

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

لأغراض الاختبار ، صنعت أيضًا جهاز محاكاة "سيارة وستيريو" بسيطًا للاتصال بنموذجي الأولي. إنه يجعل تصحيح الأخطاء أسهل وما لم تستمتع بالجلوس في سيارتك والبرنامج يمكنني أن أوصي بذلك.

يتم توضيح النموذج الأولي من خلال اللوح السفلي في الصورة. لإمداد الطاقة والبرمجة والتسجيل التسلسلي ، يتم توصيله بـ Arduino Uno حيث تمت إزالة شريحة Atmega.

اللوح العلوي هو جهاز محاكاة السيارة + الاستريو الذي سيتم استخدامه للاختبار الأولي للنموذج الأولي.

يهدف النموذج الأولي + المحاكي إلى العمل على النحو التالي:

  • اضغط على أحد أزرار التبديل على لوحة المحاكاة. (هذه هي أزرار عجلة القيادة الخاصة بك.)
  • عندما يكتشف برنامج المحاكاة زرًا اضغط عليه ، سيرسل رسالة CAN المقابلة كل 70 مللي ثانية طالما تم الضغط على الزر. (لأن السجلات التي أخذتها سابقًا تشير إلى كيفية عملها في سيارتي.) كما سترسل الكثير من رسائل CAN "غير المرغوب فيها" لمحاكاة حركة المرور الأخرى في الحافلة.
  • يتم إرسال رسائل CAN على ناقل CAN.
  • يتم استلام رسائل CAN بواسطة النموذج الأولي.
  • يلقي MCP2515 جميع الرسائل غير ذات الصلة بناءً على معرف الرسالة.
  • عندما يتلقى MCP2515 رسالة يجب التعامل معها ، فإنها ستشير إلى أنها تحتوي على رسالة في قائمة الانتظار.
  • سيقرأ Atmega الرسالة ويقرر الزر الذي يجب اعتباره نشطًا.
  • سوف يتابع Atmega أيضًا وقت استلام الرسالة الأخيرة ، بعد فترة زمنية معينة ، سيتم اعتبار الزر محرورًا. (تشير رسائل CAN فقط إلى أن زرًا ما معطلاً ، وليس أنه قد تم دفعه أو تحريره.)
  • إذا تم اعتبار الزر نشطًا ، فسيتم تنشيط مفتاح واحد أو أكثر في CD4066B.
  • سيكتشف جهاز المحاكاة (الذي يعمل الآن كجهاز استريو خاص بك) أن هناك مقاومة مطبقة بين الطرف والغطاء. (يتم توصيل الطرف بـ 3.3 فولت ومن خلال المقاوم إلى طرف إدخال تناظري. عندما لا يكون هناك أمر نشط ، سيقرأ هذا الدبوس 3.3 فولت ، عندما يكون الأمر نشطًا ، ستصبح القيمة أقل ويحدد الأمر.
  • عندما يكون الأمر نشطًا ، سيتم أيضًا تنشيط مؤشر LED المقابل. (هناك ستة مؤشرات ضوئية لأنني خططت لاستخدام ضغطة طويلة / قصيرة مختلفة لاثنين من الأزرار الخاصة بي.)

لمزيد من التفاصيل حول النموذج الأولي للأجهزة ، راجع مخططات Eagle في خطوة لاحقة.

تفاصيل إضافية حول أجهزة لوحة المحاكاة:

  • 16 ميجا هرتز الكريستال
  • مكثفات 22 pF
  • يجب اختيار مقاومات LED بناءً على خصائص LED
  • المقاوم متصل بـ A7 و 3.3V ، حدد على سبيل المثال 2 كيلو أوم (غير حرج).
  • المقاومات المتصلة بـ MCP2551 و MCP2515 قابلة للسحب / المنسدلة. حدد على سبيل المثال 10 كيلو أوم.

(أو يمكنك استخدام درع CAN لـ "الجزء CAN" من جهاز المحاكاة إذا كنت تفضل ذلك.)

من المهم أن تعرف كيف يتم تعيين دبابيس Atmega على دبابيس Arduino عند تصميم الجهاز.

(لا تقم بتوصيل أي مصابيح LED مباشرة بالقرص المضغوط 4066B ، حيث يمكنها فقط التعامل مع تيار منخفض. لقد حاولت ذلك عندما اختبرت الإخراج لأول مرة وأصبحت الشريحة عديمة الفائدة. الشيء الجيد هو أنني اشتريت اثنين منهم فقط لأنهم رخيصة جدًا.)

الخطوة 5: برمجة الصمامات

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

(إذا كنت تفضل يمكنك تخطي هذه الخطوة وإضافة أجهزة الساعة الإضافية بدلاً من ذلك.)

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

ستحتاج أولاً إلى تحديد موقع ملف باسم "board.txt" يستخدمه Arduino IDE الخاص بك. ستحتاج إلى نسخ الإدخال الخاص بـ Arduino Uno ، ومنحه اسمًا جديدًا وتغيير قيمة low_fuses.

لوحتي الجديدة تبدو كالتالي:

################################################## ############ # استنادًا إلى Arduino Uno # التغييرات: تم تغيير # low_fuses من 0xff إلى 0xbf لتمكين الساعة 16 ميجا هرتز # out على Atmega PB0 / pin 14 = Arduino D8

clkuno.name = ساعة خارج (Arduino Uno)

clkuno..bootloader.file = optiboot_atmega328.hex clkuno.bootloader.unlock_bits = 0xff clkuno.bootloader.lock_bits = 0xcf clkuno.build.mcu = atmega328p clkuno.build.f_cpu = 16000000L

##############################################################

لاحظ أنه يتم تنشيط الساعة عن طريق ضبط بت التحكم الخاص بها على 0.

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

بعد القيام بذلك ، تذكر تحديد نوع اللوحة الجديدة وليس Arduino Uno عند تحميل برنامج إلى Atmega.

الخطوة 6: البرنامج

البرنامج
البرنامج

حان الوقت لجعل الأجهزة الغبية ذكية عن طريق إضافة بعض البرامج.

فيما يلي بعض الشفرات الزائفة للنموذج الأولي:

lastReceivedTime = 0

lastReceivedCmd = none cmdTimeout = 100 إعداد () {تمكين مراقب تكوين دبابيس D4-D7 مثل دبابيس الإخراج init CAN setup CAN filter} حلقة () {reset watchdog if (CAN message is Recedog) {لكل أمر زر {إذا كانت رسالة CAN تنتمي إلى أمر الزر {lastReceivedTime = now lastReceivedCmd = cmd}}} إذا كان الآن> lastReceivedTime + cmdTimeout {lastReceivedCmd = none} لكل أمر زر {إذا كان lastReceivedCmd هو أمر الزر {تعيين إخراج دبوس الأمر = على} وإلا {تعيين إخراج دبوس الأمر = إيقاف }}}

يقرر cmdTimeout المدة التي يجب أن ننتظرها قبل أن نفكر في آخر زر نشط تم إصداره. نظرًا لأنه يتم إرسال أوامر رسالة الزر CAN تقريبًا كل 70 مللي ثانية ، يجب أن تكون أكبر من ذلك مع بعض الهامش. ولكن إذا كانت كبيرة ، فستكون هناك تجربة تأخير. لذا فإن 100 مللي ثانية تبدو مرشحًا جيدًا.

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

الإعداد باطل()

{// السماح بحد أقصى 250 مللي ثانية للحلقة wdt_enable (WDTO_250MS) ؛ // other init stuff} void loop () {wdt_reset () ؛ // افعل اشياء }

هل يمكن التصفية؟ حسنًا ، يمكنك تكوين وحدة التحكم CAN لتجاهل جميع الرسائل التي لا تتطابق مع عامل التصفية حتى لا يضطر البرنامج إلى إضاعة الوقت في الرسائل التي لا نهتم بها.

قناع طويل بدون توقيع = 0x1fffffff ؛ // تضمين كل بتات الرأس الـ 29 في القناع

معرف مرشح طويل بدون توقيع = 0x0400066 ؛ // نحن نهتم فقط بمعرف رسالة CAN هذا m_can.init_Mask (0 ، CAN_EXTID ، قناع) ؛ / / قناع 0 ينطبق على مرشح 0-1 m_can.init_Mask (1 ، CAN_EXTID ، قناع) ؛ // قناع 1 ينطبق على عامل التصفية 2-5 m_can.init_Filt (0 ، CAN_EXTID ، filterId) ؛ m_can.init_Filt (1، CAN_EXTID، filterId) ؛ m_can.init_Filt (2، CAN_EXTID، filterId) ؛ m_can.init_Filt (3، CAN_EXTID، filterId) ؛ m_can.init_Filt (4، CAN_EXTID، filterId) ؛ m_can.init_Filt (5، CAN_EXTID، filterId) ؛

تحقق من كود مكتبة CAN ووثائق وحدة التحكم CAN للحصول على مزيد من التفاصيل حول كيفية إعداد مرشح + قناع.

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

لذلك كان هذا هو النموذج الأولي للبرنامج باختصار. لكننا نحتاج إلى بعض التعليمات البرمجية للوحة المحاكاة أيضًا:

lastSentTime = 0

minDelayTime = 70 setup () {قم بتكوين المسامير A0-A5 حيث تقوم دبابيس الإخراج بتكوين الدبابيس D4-D7 كدبابيس إدخال مع سحب داخلي. init CAN} حلقة () {إرسال "غير مرغوب فيه" يمكن تعيين msg activeButton = لا شيء لكل زر {إذا تم الضغط على الزر {set activeButton = button}} if activeButton! = none {if now> lastSentTime + minDelayTime {إرسال أمر الزر يمكنه إرسال رسالة } set lastSentTime = now} inval = قراءة pin A7 foreach (cmd) {if (min <inval <max) {led on} else {led off}} انتظر 1 مللي ثانية}

سيرسل هذا باستمرار رسائل CAN "غير المرغوب فيها" كل مللي ثانية تقريبًا وأثناء الضغط على الزر ، يكون الأمر المقابل كل 70 مللي ثانية.

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

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

إذا كنت تريد التحقق من برامجي فيمكن تنزيلها هنا:

  • برنامج تسجيل الرسائل CAN
  • برنامج لوحة محاكاة
  • برنامج النموذج الأولي / اللوحة النهائية

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

الخطوة 7: الجهاز النهائي

الأجهزة النهائية
الأجهزة النهائية
الأجهزة النهائية
الأجهزة النهائية
الأجهزة النهائية
الأجهزة النهائية

عندما تكون سعيدًا ببرنامجك (تذكر اختبار النموذج الأولي في السيارة بعد الاختبار النهائي باستخدام لوحة المحاكاة) ، فقد حان الوقت لإنشاء الجهاز الحقيقي.

لديك ثلاثة خيارات هنا:

  • سريع وقذر - قم بلحام الأشياء معًا على لوحة نموذج أولي لـ PCB.
  • Hardcore DIY - حفر ثنائي الفينيل متعدد الكلور الخاص بك.
  • الطريقة البطيئة - اطلب PCB احترافيًا لتلحيم المكونات.

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

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

كن حذرًا عند تصميمك. أنت لا تريد الانتظار أربعة أسابيع للتسليم فقط لتكتشف أنك فعلت شيئًا خاطئًا.

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

ثم اطلب على سبيل المثال https://www.seeedstudio.com/fusion_pcb.html. اتبع التعليمات الخاصة بكيفية إنشاء ملفات جربر من تصميمك. يمكنك أيضًا الحصول على معاينة للنتيجة للتأكد من أنها على ما يرام.

(في النهاية ، اضطررت إلى تحديد مقاومات أخرى لـ R4-R7 غير المدرجة في الصورة التخطيطية. بدلاً من ذلك ، استخدمت 2k و 4.7k و 6.8k و 14.7k.)

وتذكر - لا تخلط بين ترقيم Atmega وترقيم Arduino!

أوصي بعدم لحام شريحة Atmega مباشرة ولكن باستخدام مقبس. ثم يمكنك إزالته بسهولة إذا احتجت إلى إعادة برمجته.

الخطوة 8: تركيب السيارة

تركيب السيارة
تركيب السيارة
تركيب السيارة
تركيب السيارة

الآن إلى الجزء الأكثر متعة - قم بتثبيته في سيارتك وابدأ في استخدامه! (بعد أن تصنع / تشتري حافظة لها.)

إذا كنت قد اختبرت النموذج الأولي بالكامل في سيارتك بالفعل ، فيجب أن يعمل كل شيء بشكل مثالي.

(كما ذكرت سابقًا ، لم أفعل لذلك اضطررت إلى استبدال بعض المقاومات وإجراء بعض التغييرات في برنامجي.)

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

أخيرًا ، تعمل الأزرار الخاصة بي مرة أخرى! كيف يمكنني العيش لمدة شهرين بدونهم؟

الخطوة 9: التحسينات المستقبلية

كما ذكرنا ، إذا قمت بإجراء إصدار 2.0 من هذا ، فسوف أستبدل 4066B بشيء آخر (ربما يكون مقياس جهد رقمي) لمزيد من المرونة.

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

موصى به: