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

جهاز تحكم عن بعد I2C InfraRed مع Arduino: 8 خطوات (بالصور)
جهاز تحكم عن بعد I2C InfraRed مع Arduino: 8 خطوات (بالصور)

فيديو: جهاز تحكم عن بعد I2C InfraRed مع Arduino: 8 خطوات (بالصور)

فيديو: جهاز تحكم عن بعد I2C InfraRed مع Arduino: 8 خطوات (بالصور)
فيديو: How to use Arduino as TV Remote Controller with Infrared 2024, شهر نوفمبر
Anonim
I2C جهاز تحكم عن بعد بالأشعة تحت الحمراء مع Arduino
I2C جهاز تحكم عن بعد بالأشعة تحت الحمراء مع Arduino
I2C جهاز تحكم عن بعد بالأشعة تحت الحمراء مع Arduino
I2C جهاز تحكم عن بعد بالأشعة تحت الحمراء مع Arduino

يشرح هذا Instructable كيفية إنشاء وحدة تحكم عن بعد عالمية باستخدام I2C للواجهة.

ما هو الغريب الذي تقوله ، باستخدام جهاز تابع لـ I2C؟

نعم ، جهاز تابع لـ I2C.

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

مقدمة

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

يختتم بمثال تصميم يحول Arduino إلى وحدة تحكم عن بعد تابعة لـ I2C (صورة 1 أعلاه) مع نموذج أولي لدائرة اختبار (صورة 2 أعلاه) ويستمر في شرح كيفية تقليص التصميم الخاص بك إلى الحد الأدنى من المكونات الضرورية حتى يمكن أن يكون مضمن في تصميم آخر. في حالتي ، أستخدم هذا الجهاز المضمن في جهاز تحكم عن بعد عالمي لـ IoT يعتمد على ESP8266-12E.

ما الأجزاء التي أحتاجها؟

لبناء الدائرة الموضحة في الخطوة 1 (مرسل الأشعة تحت الحمراء) ، ستحتاج إلى الأجزاء التالية ؛

  • 2 من 10 كيلو مقاومات
  • 1 من 390R المقاوم
  • 1 قبالة 33R المقاوم
  • 1 من 3K8 المقاوم
  • 1 إيقاف أحمر LED
  • 1 قبالة IR Led TSAL6400
  • 1 قبالة الترانزستور BC337
  • 1 قبالة 220 فائق التوهج مكثف
  • 1 قبالة Arduino Uno

لبناء الدائرة الموضحة في الخطوة 4 (مستقبل الأشعة تحت الحمراء) ، ستحتاج إلى الأجزاء التالية ؛

  • 1 من 10 كيلو المقاوم
  • 1 قبالة TSOP38328
  • 1 قبالة 220 فائق التوهج مكثف
  • 1 قبالة Arduino Uno

لبناء الدائرة الموضحة في الخطوة 5 (دائرة اختبار الرقيق) ، ستحتاج إلى الأجزاء التالية ؛

  • 4 من 10 كيلو مقاومات
  • 2 من 390R المقاوم
  • 1 قبالة 33R المقاوم
  • 1 من 3K8 المقاوم
  • 2 إيقاف الصمام الأحمر
  • 1 قبالة IR Led TSAL6400
  • 1 قبالة الترانزستور BC337
  • 1 قبالة 220 فائق التوهج مكثف
  • 2 من أزرار SPST
  • 2 قبالة Arduino Unos

لبناء الدائرة الموضحة في الخطوة 6 (تصميم منكمش) ستحتاج إلى الأجزاء التالية ؛

  • 3 من 10 كيلو مقاومات
  • 1 قبالة 270R المقاوم
  • 1 قبالة 15R المقاوم
  • 4 من 1 كيلو مقاومات
  • 1 إيقاف أحمر LED
  • 1 إيقاف IR Led TSAL6400 أو TSAL5300
  • 1 قبالة الترانزستور BC337
  • 1 قبالة 220 فائق التوهج مكثف كهربائيا @ 6.3v
  • 1 قبالة 1000 فائق التوهج مكثف كهربائيا @ 6.3v
  • 2 قبالة المكثفات 0.1 فائق التوهج
  • 2 قبالة 22pF المكثفات
  • 1 قبالة 16 ميجا هرتز Xtal
  • 1 قبالة ATMega328P-PU

ملاحظة: سوف تحتاج أيضًا إلى جهاز FTDI لبرمجة ATMega328P

ما المهارات التي احتاجها؟

  • الحد الأدنى من الإلمام بالإلكترونيات ،
  • معرفة اردوينو و IDE ،
  • القليل من الصبر،
  • قد يكون فهم I2C مفيدًا (انظر هنا للحصول على بعض التفاصيل العامة لمكتبة I2C / Wire).

المواضيع التي تمت تغطيتها

  • لمحة موجزة عن الدائرة ،
  • نظرة عامة موجزة عن البرنامج ،
  • محتوى حزمة I2C ،
  • الحصول على رموز جهاز التحكم عن بعد (ui32Data) ،
  • كيفية اختبار جهاز I2C Slave الخاص بك ،
  • تقليص التصميم الخاص بك ،
  • استنتاج،
  • المراجع المستخدمة.

تنصل

كما هو الحال دائمًا ، فإنك تستخدم هذه التعليمات على مسؤوليتك الخاصة ولا يتم دعمها.

الخطوة 1: نظرة عامة موجزة عن الدائرة

نظرة عامة موجزة عن الدائرة
نظرة عامة موجزة عن الدائرة

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

عندما يتم تشغيل الترانزستور Q1 a BC337 NPN عبر منطق واحد من Arduino PWM O / P D3 إلى المقاوم R5 ، يمر التيار عبر LEDs 1 و 2. مقيد فقط بمقاومات الصابورة R3 و R4 على التوالي. يستخدم Q1 لتعزيز التيار المار عبر الصمام الثنائي IR (IF Max = 100mA) إلى ما يزيد عن قدرة Arduino O / P على العرض ~ 40mA @ + 5v.

يوفر Capacitor C1 a 220uF Electrolytic بعض الاستقرار الذي يمنع انخفاض سكة الإمداد عن طريق الطاقة المستمدة من المصابيح 1 و 2.

المقاومات R1 و R2 هي عمليات سحب I2C.

الخطوة 2: نظرة عامة موجزة عن البرنامج

نظرة عامة موجزة عن البرنامج
نظرة عامة موجزة عن البرنامج
نظرة عامة موجزة عن البرنامج
نظرة عامة موجزة عن البرنامج
نظرة عامة موجزة عن البرنامج
نظرة عامة موجزة عن البرنامج

الديباجة

لتجميع شفرة المصدر هذه بنجاح ، ستحتاج إلى المكتبة الإضافية التالية ؛

IRremote.h

  • بواسطة: z3t0
  • الغرض: مكتبة Arduino عن بعد بالأشعة تحت الحمراء: إرسال واستقبال إشارات الأشعة تحت الحمراء ببروتوكولات متعددة
  • من:

نظرة عامة على التعليمات البرمجية

كما هو موضح في الصورة 1 أعلاه ، عند بدء التشغيل ، يقوم الكود بتكوين وحدة التحكم الدقيقة I / O ثم يستقصي حالة علامة البرنامج الداخلية "bFreshDataFlag". عند تعيين هذه العلامة ، تؤكد وحدة التحكم أنها خط "مشغول" (إرسال دبوس البيانات D4 منخفض) وتنتقل إلى حالة "eBUSY" للقراءة المتسلسلة للزر ، اضغط على الأوامر الموجودة في uDataArray وإرسال بيانات IR المعدلة إلى IR LED في تسلسل الإرسال.

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

استقبال بيانات ضغط زر الأشعة تحت الحمراء

عندما يتم إرسال البيانات إلى وحدة التحكم عن بعد InfraRed عبر I2C ، فإنها تقوم بتشغيل مقاطعة ويتم تشغيل استدعاء وظيفة ReceiveEvent () بشكل غير متزامن.

بمجرد بدء التشغيل ، تتم كتابة بيانات I2C المستلمة بالتسلسل في المخزن المؤقت "uDataArray ".

أثناء استقبال البيانات ، إذا أشار السيد إلى نهاية التسلسل (bFreshData! = 0x00) ، يتم تعيين "bFreshDataFlag" ، مما يشير إلى بدء تسلسل الإرسال.

الصور 2 … 3 تعطي مثالاً لتسلسل حزم نموذجي.

ملاحظة: كود المصدر الكامل متاح هنا

الخطوة 3: محتوى حزمة I2C

محتوى حزمة I2C
محتوى حزمة I2C

يتم إعطاء تنسيق حزمة التحكم المرسلة إلى العبد عبر I2C أعلاه في الصورة 1 ، ويرد معنى كل حقل أدناه

معنى حقول حزمة التحكم

ترميز البايت ؛

  • ترميز جهاز التحكم عن بعد بالأشعة تحت الحمراء ،

    • RC6 (السماء) = 0 ،
    • سوني = 1 ،
    • سامسونج = 2 ،
    • NEC = 3 ،
    • LG = 4

uint32_t ui32 البيانات ؛

التمثيل السداسي لتيار بيانات الأشعة تحت الحمراء الثنائي 4 بايت بيانات (بدون إشارة طويلة) ، LSByte … MSByte

البايت bNumberOfBitsInTheData ؛

عدد البتات في البيانات (32 كحد أقصى). النطاق = 1 … 32

بايت bPulseTrainRepeats ؛

كم عدد مرات تكرار هذا القطار النبضي. النطاق = 1 … 255. عادة 2… 4 يتكرر. قد ترغب في تمديد هذا لأوامر التشغيل / الإيقاف لأن جهاز الاستقبال يتطلب أحيانًا عددًا قليلاً من تكرار قطار النبض الإضافي لتلقي إشارة تشغيل

بايت bDelayBetweenPulseTrainRepeats ؛

تأخير بين تكرار هذا القطار النبضي. النطاق = 1 … 255 مللي ثانية. عادة 22 مللي ثانية … 124 مللي ثانية

بايت bButtonRepeats ؛

يحاكي الضغط المتكرر على نفس الزر (لكنه لا يدعم الرمز المعدل مثل جهاز التحكم عن بُعد من Apple ، إنه يكرر رمز الزر فقط). النطاق = 1 … 256. الافتراضي = 1

uint16_t ui16DelayBetweenButton يتكرر ؛

التأخير بين تكرار الزر (عدد صحيح بدون إشارة). إجمالي 2 بايت LSByte… MSByte. النطاق = 1 … 65535 مللي ثانية. الافتراضي = 0 مللي ثانية

بايت bFreshData ؛

  • بيانات حديثة. قيمة غير صفرية. أخيرًا ، يؤدي كتابة تسلسل IR TX. النطاق 0x00 … 0xFF

    • المزيد من حزم التحكم القادمة = 0
    • هذه هي حزمة التحكم النهائية = قيمة غير صفرية 1 ، 2 ، … 255

لاحظ استخدام توجيه المترجم "_packed_". هذا للتأكد من أن البيانات عبارة عن حزمة بايت للبايت في الذاكرة بغض النظر عن النظام الهدف المستخدم (Uno و Due و ESP8266 وما إلى ذلك). هذا يعني أن الاتحاد بين registerAllocationType و dataArrayType لا يحتاج إلا بشكل تسلسلي على مدار الساعة بالبايت من حزمة التحكم ، مما يجعل برنامج TX / RX بسيطًا.

الخطوة 4: الحصول على أكواد التحكم عن بعد (ui32Data)

الحصول على رموز جهاز التحكم عن بعد (ui32Data)
الحصول على رموز جهاز التحكم عن بعد (ui32Data)
الحصول على رموز جهاز التحكم عن بعد (ui32Data)
الحصول على رموز جهاز التحكم عن بعد (ui32Data)
الحصول على رموز جهاز التحكم عن بعد (ui32Data)
الحصول على رموز جهاز التحكم عن بعد (ui32Data)
الحصول على رموز جهاز التحكم عن بعد (ui32Data)
الحصول على رموز جهاز التحكم عن بعد (ui32Data)

هناك ثلاث طرق يمكنك من خلالها الحصول على رمز مفتاح التحكم عن بعد ؛

  1. عن طريق العد بت مع الذبذبات ،
  2. ابحث عنه على موقع ويب ،
  3. فك تشفيرها مباشرة من دفق البيانات في البرنامج.

عن طريق العد مع النطاق

هذه ليست طريقة فعالة لأنها تستغرق بعض الوقت وربما تتطلب أكثر من محاولة واحدة ، ومع ذلك يمكن أن تكون دقيقة للغاية. كما أنه مفيد في التحقق البصري من الرموز التي تم الحصول عليها باستخدام الطريقتين 2 و 3 ، وكذلك في تحديد أي خصائص لجهاز التحكم عن بعد. على سبيل المثال عند الضغط باستمرار على زر في جهاز التحكم عن بعد الخاص بـ Apple IR. سيصدر جهاز التحكم عن بعد في البداية تسلسل أوامر ثم يتبع ذلك بتسلسل مضغوط متكرر من 0xF….

ابحث عنها في موقع على شبكة الإنترنت

تعد قاعدة بيانات رموز جهاز التحكم عن بعد على موقع ويب Linux Infrared Remote Control مصدرًا جيدًا.

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

فك تشفيرها مباشرة من دفق البيانات

باستخدام الدائرة في الصورة 1 أعلاه بالاقتران مع مثال مكتبة IRremote 'IRrecvDumpV2.ino' ، من الممكن فك تشفير دفق البيانات مباشرة من جهاز التحكم عن بُعد. تُظهر الصورة 2 جهاز التحكم عن بُعد الخاص بتلفزيون Samsung الذي تم فك تشفيره لزر تشغيل / إيقاف ، اضغط في نافذة Arduino IDE الطرفية.

جهاز استقبال / جهاز إرسال مشترك

توضح الصورتان 3 و 4 أعلاه حلاً يسمح باستقبال وإرسال أمر الأشعة تحت الحمراء للسماح بالنماذج الأولية بسهولة.

لفك تشفير ضغطات زر التحكم عن بعد بالأشعة تحت الحمراء ، ستحتاج إلى وميض Arduino بمثال "IRrecvDumpV2.ino" الذي يأتي مع مكتبة IRremote.

كما أنه يعمل بشكل جيد للإرسال إذا كانت أوامر الأشعة تحت الحمراء. يتم تضمين مؤشر ضوئي أحمر كمؤشر مرئي على أن الجهاز يعمل.

الخطوة 5: كيفية اختبار جهاز I2C التابع

كيفية اختبار جهاز I2C التابع الخاص بك
كيفية اختبار جهاز I2C التابع الخاص بك
كيفية اختبار جهاز I2C التابع الخاص بك
كيفية اختبار جهاز I2C التابع الخاص بك

باستخدام كود المصدر هنا ، والدائرة الموضحة أعلاه في الصورة 1 ، قم ببرمجة 'Master' Arduino مع 'IR_Remote_Sim_Test.ino' و 'Slave' Arduino مع 'IR_Remote_Sim.ino'.

بافتراض أن لديك تلفزيون Sony Bravia وصندوق Sky HD و Sony BT SoundBar ، اضغط على الزر 1 وسيتحول التلفزيون إلى BBC1 (القناة 101). اضغط على الزر 2 وسيتم كتم صوت السماعة الشريطية. اضغط مرة أخرى وسيتم إلغاء كتم الصوت.

أثناء تنفيذ تسلسل إرسال الأشعة تحت الحمراء ، سيضيء مؤشر LED3 مشيرًا إلى أن العبد مشغول وسيومض مؤشر LED1 بالتوافق مع عملية نقل الأشعة تحت الحمراء.

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

تُظهر الصورة 2 نظرة عامة على برنامج اختبار مستوى النظام بين Master و Slave.

الخطوة السادسة: تقليص التصميم الخاص بك

تقليص التصميم الخاص بك
تقليص التصميم الخاص بك

حسنًا ، إن افتراض أنك اتبعت هذه التعليمات بالاعتماد على اثنين من Arduinos للتحكم في أجهزتك المنزلية ليس هو الاستخدام الأكثر كفاءة لمخزون Arduino. وبالتالي ، إذا قمت بإنشاء الدائرة الموضحة في الصورة أعلاه واتبعت الإرشادات هنا لبرمجة ATMega328P باستخدام "IR_Remote_Sim.ino" ، فستتمكن من تقليل النظام بأكمله إلى الحد الأدنى من المكونات. سيسمح لك ذلك بتضمين تصميمك في نظام آخر.

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

استنتاج
استنتاج
استنتاج
استنتاج

الحل مستقر ويعمل بشكل جيد ، وقد تم تضمينه في نظام آخر لبضعة أسابيع حتى الآن دون أي مشاكل.

اخترت Arduino Uno R3 لأنني أردت جهازًا به ذاكرة وصول عشوائي كافية بحيث يمكنني الحصول على مخزن مؤقت للزر بعمق معقول. استقرت على حجم مخزن مؤقت يبلغ 20 حزمة (MAX_SEQUENCES).

كان درع Hybrid TX / RX الذي صنعته مفيدًا جدًا أيضًا عند فك تشفير أجهزة التحكم عن بُعد من Sony و Sky. على الرغم من أنني يجب أن أعترف باستخدام النطاق الرقمي الخاص بي من وقت لآخر للتحقق من أن أمر IR الذي تم فك تشفيره للبرنامج كان هو نفسه الذي يأتي من IR المستلم (TSOP38328).

الشيء الوحيد الذي كنت سأفعله بشكل مختلف هو استخدام دائرة محرك التيار المستمر للأشعة تحت الحمراء كما هو موضح أعلاه في الموافقة المسبقة عن علم 2.

هناك نقطة أخرى يجب ملاحظتها وهي ، ليست كل أجهزة إرسال الأشعة تحت الحمراء مُعدَّلة بـ 38 كيلو هرتز ، فقد تم تحسين TSOP38328 لـ 38 كيلو هرتز.

الخطوة 8: المراجع المستخدمة

IRRemote.h

  • بواسطة: z3t0
  • الغرض: مكتبة Arduino عن بعد بالأشعة تحت الحمراء: إرسال واستقبال إشارات الأشعة تحت الحمراء ببروتوكولات متعددة
  • من:

مكتبة IR Remote

  • z3t0.github.io/Arduino-IRremote/
  • https://arcfn.com/2009/08/multi-protocol-infrared-remote-library.html

مستشعر استقبال الأشعة تحت الحمراء (الأشعة تحت الحمراء) - TSOP38238 (ما يعادله)

https://cdn-shop.adafruit.com/datasheets/tsop382.pdf

لتجنب حشو بنية البيانات لحدود الكلمات

  • https://github.com/esp8266/Arduino/issues/1825
  • https://github.com/tuanpmt/esp_bridge/blob/master/modules/include/cmd.h#L15
  • https://stackoverflow.com/questions/11770451/what-is-the-meaning-of-attribute-packed-aligned4

مصدر جيد لتفاصيل جهاز التحكم عن بعد بالأشعة تحت الحمراء

https://www.sbprojects.com/knowledge/ir/index.php

I2C

  • https://playground.arduino.cc/Main/WireLibraryDetailedReference
  • https://www.arduino.cc/en/Reference/WireSend

قاعدة بيانات IR عن بعد

  • https://www.lirc.org/
  • https://lirc-remotes.sourceforge.net/remotes-table.html

ورقة بيانات BC337

https://www.onsemi.com/pub/Collateral/BC337-D. PDF

1N4148 ورقة البيانات

https://www.vishay.com/docs/81857/1n4148.pdf

موصى به: