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

ريموت تليفزيون يونيفرسال - Ardiuino ، الأشعة تحت الحمراء: 5 خطوات
ريموت تليفزيون يونيفرسال - Ardiuino ، الأشعة تحت الحمراء: 5 خطوات

فيديو: ريموت تليفزيون يونيفرسال - Ardiuino ، الأشعة تحت الحمراء: 5 خطوات

فيديو: ريموت تليفزيون يونيفرسال - Ardiuino ، الأشعة تحت الحمراء: 5 خطوات
فيديو: ابسط شرح لدائرة حساس الاشعة تحت الحمراء How to Build an Infrared IR Phototransistor circuit 2024, يوليو
Anonim
ريموت تليفزيون يونيفرسال - Ardiuino ، الأشعة تحت الحمراء
ريموت تليفزيون يونيفرسال - Ardiuino ، الأشعة تحت الحمراء

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

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

اللوازم

الأشياء التي ستحتاجها: -Arduino UNO أو Nano - قد تختلف الأميال مع اللوحات الأخرى

- لوح توصيل غير ملحوم (أو لوح شريطي قابل للحام إذا كنت ترغب في جعله أكثر ديمومة)

-أسلاك العبور بألوان وأطوال مختلفة

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

-10 كيلو أوم المقاوم (5) (إذا كنت ترغب في المزيد من أزرار الضغط ، فستحتاج إلى المزيد من هذه)

-470 أوم المقاوم (2)

- LED بالأشعة تحت الحمراء

-أحمر LED

-مستشعر الأشعة تحت الحمراء (لقد استخدمت رقم الجزء VS1838B ، يمكنك استخدام آخر ، فقط تحقق من دبوس الخروج)

(اختياري) لحام الحديد ، اللحيم ، تدفق اللحام.

الخطوة الأولى: بناء الدائرة:

بناء الدائرة
بناء الدائرة

1). أحب دائمًا أن أبدأ بوضع مكوناتي ، لأن هذا دائمًا ما يقود التخطيط على اللوح.

-الضغط على الأزرار

-LEDS: المصباح الأحمر LED و IR LED سلكيان جنبًا إلى جنب ، حتى تتمكن من رؤية ما يفعله IR LED.

-المستشعر

2). المقاومات

- تسمى المقاومات الخمسة 10K التي قمنا بتوصيلها بأزرار الضغط مقاومات "pull down". تتأكد المقاومات المنسدلة من أنه عند عدم الضغط على زر الضغط ، يحصل دبوس Arduino المقابل على 0 فولت (أو على الأقل قريبًا منه). لمزيد من المعلومات حول المقاومات المنسدلة (أو المسحوبة لأعلى) ، يوجد هنا دليل تفصيلي:

www.electronics-tutorials.ws/logic/pull-up…

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

3). أسلاك الدائرة

4). 5V والأسلاك الأرضية

استخدم الصورة المقدمة كمرجع! لا تخف من تغييره حسب احتياجاتك!

الخطوة الثانية: الكود:

# تضمين const int RECV_PIN = 7 ؛ // مستشعر الأشعة تحت الحمراء يقرأ pin int Button1 = A4 ؛ // أقصى اليسار int Button2 = A3 ؛ // الثاني من اليسار int Button3 = A2 ؛ // Middle int Button4 = A1 ؛ // الثاني إلى اليمين int Button5 = A0 ؛ // الأبعد إلى اليمين int LED = 3 ؛ // IR LED & Red LED int val = 0 ؛ // تغيير القيمة IRsend irsend ؛ IRrecv irrecv (RECV_PIN) ؛ نتائج decode_results ؛

إعداد باطل () {pinMode (Button1، INPUT) ؛ pinMode (Button2 ، الإدخال) ؛ pinMode (Button3 ، الإدخال) ؛ pinMode (Button4 ، الإدخال) ؛ pinMode (Button5 ، الإدخال) ؛ pinMode (LED ، الإخراج) ؛ Serial.begin (9600) ؛ irrecv.enableIRIn () ، irrecv.blink13 (صحيح) ؛} حلقة باطلة () {{{if (analogRead (Button1)> 900) irsend.sendNEC (0xFF02FD، 32) ؛ // استخدام القراءة التناظرية بدلاً من القراءة الرقمية لتجنب مشكلات السعة الأسيرة. أيضا ، يساعد على تخفيض الأزرار. // تتيح القراءة التناظرية عند 900 مساحة كبيرة للمناورة في القيم ، مما يعني أنه سيتم إرسال إشارة الأشعة تحت الحمراء حتى إذا لم يتم تطبيق 5 فولت كامل على الدبوس. // ولكن 900 مرتفع بما يكفي لعدم قراءته بشكل خاطئ بسبب تأخير الاقتران السعوي (100) ؛} // RGB Strip On & off {if (analogRead (Button5)> 900) {for (int i = 0؛ i <3؛ i ++) // تغيير القيمة في "i <3" سيغير عدد مرات تكرار الإشارة على الفور. لذا فإن "i <2" سيكرر الإشارة مرتين. // قد تحتاج إلى التلاعب بهذا الرقم إذا كان تلفزيونك لا يستجيب ، بشكل عام ، 1 أو 3 يعمل أكثر ، إذا لم يكن هؤلاء ، جرّب الأرقام الفردية. // قد تحتاج أيضًا إلى اللعب بقيم توقيت تأخير الإشارة الداخلية ، على سبيل المثال ، لأعمال التلفزيون 10 الخاص بي ، لكن 30 لا تفعل ذلك. {irsend.sendSony (0xa90، 12) ، // رمز طاقة تلفزيون Sony ، بالنسبة لجهاز التلفزيون الخاص بي ، يجب إرسال الرمز 3x3 ، لذلك 3 نبضات ، تأخير ثلاث مرات منفصلة (10) ؛ // "intra signal delay" لـ (int i = 0 ؛ i <3 ؛ i ++) {irsend.sendSony (0xa90، 12) ؛ // "12" هو رقم البت ، وتستدعي البروتوكولات المختلفة أرقام بت مختلفة. NEC هو 32 ، سوني 12 ، يمكنك البحث عن تأخير الآخرين (10) ؛ لـ (int i = 0؛ i 900) {for (int i = 0؛ i 900) {for (int i = 0؛ i 900) {for (int i = 0؛ i <3؛ i ++) {irsend.sendSony (0xc90 ، 12) ؛ // تأخير خفض مستوى صوت تلفزيون Sony (100) ؛}}} تأخير (100) ؛} إذا (irrecv.decode (والنتائج)) // يتيح لك الجزء أدناه من الكود تفسير إشارات الأشعة تحت الحمراء من أجهزة التحكم عن بُعد المختلفة. {Serial.println (results.value، HEX) ، // سينشئ الإجراء "NEC، Sony، Etc.." ورمز تلفزيون "c90، a90، FF02FD" ستحتاج إلى إضافة 0x إلى مقدمة مفتاح رمز التلفزيون (results.decode_type) {case DENON: Serial.println ("DENON") ؛ استراحة ؛ الحالة NEC: Serial.println ("NEC") ؛ استراحة ؛ حالة باناسونيك: Serial.println ("باناسونيك") ؛ استراحة ؛ الحقيبة SONY: Serial.println ("SONY") ؛ استراحة ؛ الحالة RC5: Serial.println ("RC5") ؛ استراحة ؛ الحالة JVC: Serial.println ("JVC") ؛ استراحة ؛ الحالة سانيو: Serial.println ("سانيو") ؛ استراحة ؛ حالة MITSUBISHI: Serial.println ("MITSUBISHI") ؛ استراحة ؛ الحالة SAMSUNG: Serial.println ("SAMSUNG") ؛ استراحة ؛ الحالة LG: Serial.println ("LG") ؛ استراحة ؛ الحالة RC6: Serial.println ("RC6") ؛ استراحة ؛ حالة DISH: Serial.println ("DISH") ؛ استراحة ؛ الحالة SHARP: Serial.println ("SHARP") ؛ استراحة ؛ الحالة WHYNTER: Serial.println ("WHYNTER") ؛ استراحة ؛ الحالة AIWA_RC_T501: Serial.println ("AIWA_RC_T501") ؛ استراحة ؛ الافتراضي: حالة غير معروفة: Serial.println ("غير معروف") ؛ استراحة؛} irrecv.resume () ؛}}

الخطوة 3: الكود في العمق: إرسال إشارات الأشعة تحت الحمراء

سأشير إلى سطور التعليمات البرمجية برقم السطر - للمتابعة ، استخدم هذا الرابط:

pastebin.com/AQr0fBLg

أولاً ، نحتاج إلى تضمين مكتبة IR Remote Library بواسطة z3t0.

هذا رابط للمكتبة:

github.com/z3t0/Arduino-IRremote

إذا كنت بحاجة إلى دليل حول كيفية تنزيل مكتبة بشكل صحيح وتثبيتها في IDE:

www.arduino.cc/en/guide/libraries

يتضمن الخط 1 المكتبة.

بعد ذلك ، علينا أن نعلن عن بعض المتغيرات ، الأسطر 2-12 تفعل ذلك.

نحن نستخدم "cost int" لتحديد المتغيرات التي لن تتغير ، وكلها ماعدا واحدة تقع في هذه الفئة.

نستخدم "int" لتحديد المتغيرات التي ستتغير.

يجب أن نستخدم دبوسًا به نبضة مع تعديل (PWM) لمسمار LED الخاص بنا - أي دبوس يحتوي على "~" بجواره سيكون كافياً ، في الكود الخاص بي - نستخدم الرقم الرقمي 3.

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

لاحظ أننا نحدد مدخلاتنا ومخرجاتنا (15-20) ، ونشغل الشاشة التسلسلية (21) ، وتمكين مستشعر الأشعة تحت الحمراء (22) ، ونطلب من Arduino وميض مؤشر LED الموجود على اللوحة في أي وقت نحصل فيه على إشارة في المستشعر (23).

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

في السطر 25 ، نستخدم عبارة if ، وهذا يخبر Arduino "ابحث عن هذه المعايير المحددة ، إذا تم استيفاء هذه المعايير ، فافعل هذا الشيء المحدد". في هذه الحالة ، تكون المعايير هي analogRead (Button1)> 900 ، أو بعبارة أخرى - "Arduino ، انظر إلى الزر 1 ، الذي حددناه كـ pin A4 سابقًا ، إذا كانت الإشارة التناظرية المستلمة أكبر من 900 ، فيرجى المتابعة إلى إرشاداتنا التالية ، إذا لم يكن كذلك ، يرجى الانتقال ". هناك القليل لتفريغه هنا ، لذا دعنا نتعمق: الإشارة التناظرية على Arduino هي قيمة تساوي أو تقل عن 5V ، مع 5V تساوي 1023 ، و 0 V تساوي 0. أي جهد معين بين 0 و 5 V يمكن تعريفه بواسطة عدد ، ومع القليل من الرياضيات ، يمكننا معرفة هذا الرقم ، أو العكس بالعكس ، الجهد. قسّم 1024 (نضمّن الصفر كوحدة) على 5 ، ما يعطينا 204.8. على سبيل المثال ، نستخدم الرقم 900 ، لترجمة ذلك إلى جهد ، نقسم ببساطة 900 على 204.8 ، مما يعطينا 4.4 فولت. نحن نطلب من Arduino البحث عن جهد أكبر من ~ 4.4 فولت ، وإذا كان كذلك ، فقم بإرشاداتنا التالية.

بالحديث عن التعليمات التالية (السطر 25) ، نرى irsend.sendNEC (0xFF02FD، 32). يقول هذا "Arduino ، أرسل نبضًا معدلًا يتبع بروتوكول NEC ، وتحديداً إشارة FF02FD ، وتأكد من طوله 32 بت". سيؤدي ذلك إلى وميض IR LED الخاص بنا بطريقة يمكن للأجهزة الأخرى فهمها. فكر في الأمر قليلاً مثل مورس ، لكن فقط بضوء غير مرئي! هناك الكثير من البروتوكولات المختلفة ، كل منها يحتوي على مئات إن لم يكن الآلاف من الإشارات الفردية ، ولكل منها رقم بت محدد - سيكون جهازنا قادرًا على التعرف على قدر كبير من هذه الإشارات ، لكننا سنغوص في ذلك لاحقًا!

في السطر 28 ، لدينا التأخير الأول - هذا هنا لمنع تكرار الإشارات غير المقصودة ، بمجرد الضغط على الزر وإرسال إشارة الأشعة تحت الحمراء ، لدينا 100 مللي ثانية لإبعاد إصبعنا عن الزر. لا يبدو هذا كثيرًا من الوقت ، ولكن من الناحية العملية ، يبدو أنه يعمل بشكل جيد. تخبر وظيفة التأخير Arduino "بعدم القيام بأي شيء لمدة X مللي ثانية" وللرجوع إليها ، تبلغ 1000 مللي ثانية في الثانية.

بالانتقال إلى الزر التالي في السطر 29 ، الزر 5 (كان لدي في الأصل 4 أزرار على جهاز التحكم عن بُعد هذا ، أضفت زرًا خامسًا ، ولهذا السبب نحن خارج الترتيب). هذا ، من حيث الروح ، هو نفس الشيء مثل الزر 1 ، ولكن مع بعض الاختلافات الرئيسية. الاختلاف الأول الذي ستراه هو عبارة for - وهي في الأساس حلقة أخرى - حلقة بها حلقة أخرى أكبر ، وهي الحلقة الحلقية. على وجه التحديد لدينا "for (int i = 0؛ i <3؛ i ++)" ، اقرأ هذا كـ "Arduino ، لنبدأ من 0 ، كرر التعليمات التالية حتى نصل إلى 3 مرات". تُستخدم وظيفة for لأن الكثير من الأجهزة مبرمجة للبحث عن إشارة متكررة ، وفي حالتنا هنا ، 3 مرات. يمكنك ببساطة تغيير الرقم 3 إلى رقم مختلف إذا كان جهازك يتصل بجدول تكرار مختلف. الفرق الرئيسي الآخر مع button5 هو أنه يتكرر مرة أخرى ، 3 مرات ، أو 3x3. بمعنى آخر ، نرسل الإشارة 3 مرات ، ننتظر 10 مللي ثانية ، نرسلها مرة أخرى 3 مرات ، انتظر 10 مللي ثانية أخرى ، ثم نرسلها 3 مرات مرة أخرى. هذا النوع من الاتصال شائع لتشغيل الأجهزة وإيقاف تشغيلها وقد يكون فقط ما يطلبه التلفزيون أو الجهاز - ومفتاح ذلك هو التلاعب بجميع المتغيرات حتى تحصل على النتيجة المرجوة. قم بتغيير قيمة التأخير القصير ، وتغيير قيمة التكرار ، وإرسال 6 دفعات بدلاً من 3 ، وما إلى ذلك. الأجهزة مبرمجة بقواعد إشارة عشوائية عن قصد ، تخيل ما إذا كان جهاز التحكم عن بُعد في التلفزيون لديك يرسل نفس نوع الإشارة مثل مكبر الصوت الخاص بك ؛ في كل مرة تقوم فيها بتغيير القناة على التلفزيون الخاص بك ، يتم إيقاف تشغيل مكبر الصوت الخاص بك - وهذا هو سبب وجود قواعد إشارة مختلفة.

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

الخطوة 4: الكود في العمق: استقبال إشارات الأشعة تحت الحمراء

كود في العمق: استقبال إشارات الأشعة تحت الحمراء
كود في العمق: استقبال إشارات الأشعة تحت الحمراء

في السطر 55 ، بدأنا في برمجة Arduino لتفسير إشارات الأشعة تحت الحمراء المرسلة من أجهزة التحكم عن بعد الأخرى - وهذا ضروري حتى تتمكن من معرفة البروتوكولات والإشارات التي تستخدمها أجهزة التحكم عن بُعد الخاصة بك. السطر الأول من الكود في السطر 55 هو إذا (irrecv.decode (& results) اقرأ هذا كـ "Arduino ، ابحث عن رمز IR ، إذا وجدت واحدًا ، فقم بإرجاع قيمة حقيقية ، إذا لم يتم العثور على شيء ، فقم بإرجاع القيمة false. عندما تكون صحيحة ، سجل المعلومات في "نتائج" ".

بالانتقال إلى السطر 56 ، لدينا Serial.println (results.value، HEX) هذا يقول "Ardunio ، اطبع النتائج في الشاشة التسلسلية بتنسيق HEX". Hex ، أي ست عشري ، هي طريقة يمكننا من خلالها تقصير سلسلة ثنائية (فقط 0 و 1) إلى شيء أسهل قليلاً في الكتابة. على سبيل المثال ، 101010010000 هي "a90" ، الرمز المستخدم لإيقاف تشغيل التلفزيون وتشغيله ، و 111111110000001011111101 هو 0xFF02FD ، والذي يتحكم في شريط RGB الخاص بي. يمكنك استخدام الرسم البياني أعلاه لتحويل الثنائي إلى سداسي عشري والعكس صحيح ، أو يمكنك استخدام الرابط التالي:

www.rapidtables.com/convert/number/hex-to-…

وصولاً إلى السطر 57 ، لدينا وظيفة جديدة تسمى حالة التبديل.

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

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

الخطوة 5: الخاتمة

إذا كان لديك سؤال - فلا تتردد في التواصل معي هنا! يسعدني أن أحاول مساعدتك بأفضل ما أستطيع.

أتمنى أن تكون قد تعلمت شيئًا يمكنك استخدامه لتحسين حياتك قليلاً!

-RB

موصى به: