التحكم عن بعد باستخدام الحاكوم
هل اردت يوماً ان تتحكم باشياء اخرى باستخدام الحاكوم مثل فتح واغلاق انوار المنزل او أي اجهزة أخرى؟ إذن، دعنا نتعلم اسهل طرق التحكم بدون الخوض في القوانين والتعقيدات المختلفة خلف التحكم عن بعد.
|
مقدمة
جميعنا يعلم أهمية التحكم عن بعد بالاجهزة المختلفة ويتمنى ان يضيف تلك الخاصية لاجهزته المفضلة حتى يتحكم فيها عن بعد ولكن يجهل طريقة تنفيذها. حيث نلاحظ تطبيقات مختلفة موجودة حالياً بيننا ومستخدمة بكثرة في حياتنا اليومية مثل فتح واغلاق السيارة باستخدام ريموت، التحكم بجهاز الريسيفر في البيت، التحكم بالاستريو والمسرح المنزلي...
| |
تم الاستعانه بهذه الصورة لغرض الشرح من موقع ladyada.net.
|
إذا أردت شرحا مفصلا عن فكرة التحكم عن بعد فعليك بالموضوع التالي على الموقع اصنعها:
ولكن بإختصار بسيط، التحكم عن بعد باستخدام الريموت هو عملية ارسال نبضات (أو قل ذبذبات) متغيرة وسريعة والتي تستقبل من طرف المستقبل الذي من خلاله يمكن تحليل هذه النبضات وتفسيرها. فمثلا، عند الضغط على زر التشغيل فإن الريموت يرسل النبضة التالية:
|
نلاحظ في الجزء الاول (1) من الموجة يمثل الموجة المرسلة من الريموت عند ضغظ زر التشغيل في الريموت. حيث نلاحظ ان الموجة تتغير بين الصفر و الثلاثة او (فتح وتقفيل) بسرعة عالية. بينما نلاحظ عند رقم 2 وجود موجة ثابتة وهذه الموجة الناتجة عند عدم ضغط أي زر في الريموت. الجهاز المستقبل يقرا قيمة الصعود والهبوط السريعة ويميز أي زر تم ضغطه. حسناً مايهمنا هنا هو اننا نريد برمجة وتفسير الاوامر المستقبلة وتنفيذ مهام مختلفة.
|
القطع المستخدمة
العربية
الإنجليزية
الفرنسية
|
الكمية
|
الصورة
|
بطاقة اردوينواونو
Arduino uno
|
1
| |
مستقبل الأشعة تحت الحمراء
IR Receiver Diode
Diode Détecteur infrarouge
|
1
| |
مقاومة بين (200 الى 400 اوم)
Resistor (200- 400)
Resistance (200-400)
|
1
| |
صمام ثنائ ضوئي
LED
|
1
|
تحضير مكتبة الحاكوم
أولا نريد أن نضيف مكتبة جاهزة تقوم بفك شفرة الأوامر المرسلة من الحاكوم وتحويلها إلى أرقام يسهل الاستفادة منها دون الخوض في تفاصيل معقدة، حيث أن المكتبة الأصلية يمكن الوصول إليها من خلال هذا الرابط:
ولكن ستحتاج إلى إضافة بعض التعديلات في المكتبة حتى تعمل مع نسخة اردوينو 1.0. لذلك قمت بتلك التعديلات ويمكن تحميلها من هنا:
ملاحظة: من الافضل تحميل المكتبة بعد التعديل، لان التعديل لن يتم شرحه في هذا الدرس. المكتبة غير المعدلة لا تعمل مع نسخة Arduino 1.0 بينما تعمل مع النسخ القديمة بنجاح.
بعد تحميل المكتبة، ننشي مجلد جديد تحت مجلد "”Arduino الموجود في المستندات "documents"، و نسميه libraries . يجب الملاحظة أن في مجلد اردوينو سوف نضع الشيفرة التي سوف نعملها ولذلك لابد من وجود المكتبة بداخل نفس المجلد الذي سوف نحفظ بداخله الشيفرة. بعد ذلك نفك ضغط المكتبة التي حملناها ونضعها داخل مجلد libraries كما هو موضح في الصورة التالية:
ملاحظة: مجلد اردوينو عادة يتم انشاءه عند تثبيت الاردوينو، ولكن ان لم يكن موجود لديك فيجب انشاءه.
للتأكد من إضافة المكتبة بنجاح، يمكنك مشاهدة المكتبة المضافة في برنامج الاردوينو كما هو موضح في الصورة 2.
| |
إذا لم تجد المكتبة مضافة في برنامج الاردوينو ، يجب إضافة المكتبة أيضا في ملف الاردوينو الرئيسي (نفس الملف الذي بداخله برنامج الاردوينو) اتبع ما في الصورة 3.
| |
بعد ذلك تأكد مره أخرى من وجود المكتبة عن طريق عرض المكتبات المستخدمة في برنامج اردوينو كما فعلنا في الصورة رقم 2. يحب أن تكون المكتبة موجودة قبل مواصلة الدرس. إن لم تكن موجودة فراجع الخطوات السابقة وأعد تشغيل برنامج الاردوينو حتى تظهر صورة المكتبة في برنامج الاردوينو.
|
الدارة الكهربائية
بعد الانتهاء من إضافة المكتبة نقوم بتوصيل الاردوينو بمستقبل الأشعة تحت الحمراء كما هو موضح في الصورة التالية:
| |
صورة رقم 4: طريقة مفصلة للتوصيل و ربطها بالاردوينو.
|
صورة رقم 5: طريقة مبسطة للتوصيل.
|
البرمجة
نأتي الآن إلى الخطوة الثالثة وهي برمجة الاردوينو لقراءة القيم المرسلة من الحاكوم. حيث إن كل حاكوم يرسل قيمة مختلفة لكل زر وهذه القيم تختلف من حاكوم إلى أخر. لذلك، لا بد أولا من قراءة القيم المرسلة لحاكومك المستخدم. في هذه التجربة تم استخدام جهازين للتحكم عن بعد: الحاكوم الاول حاكوم تلفاز من شركة صوني "Sony"، والحاكوم الثاني هو حاكوم تلفاز إنسينيا (Insignia).
#include // استدعاء مكتبة الحاكوم
int RECV_PIN = 2; //مدخل الانفراريد دايود الى رجل رقم 2 في الاردوينو
IRrecv irrecv(RECV_PIN); // ضع القراءة القادمة من رجل رقم 2 وارسالها الى دالة داخل المكتبة
decode_results results; // resultضع نتائج فك التشفير داخل متغير
void setup()
{
Serial.begin(9600); //تفعيل التواصل بين الكمبيوتر والاردوينو لقراءة القيم المستقبلة
irrecv.enableIRIn(); // ابدا في استقبال الاوامر المرسلة من الريموت
}
void loop()
{
if (irrecv.decode(&results)) { //اذا تم استقبال اوامر من الريموت وتم تفسير الاوامر
Serial.println(results.value، DEC); // serial monitorاطبع القراءت داخل
delay(50); // تاخير الدالة المستقبله، سوف يتم شرحها اكثر
irrecv.resume(); // استمر في استقبال الاوامر المرسلة
}
}
|
السبب في إضافة أمر التأخير "delay" في الشيفرة، حتى نقلل من القيم المرسلة عند ضغط الزر في الحاكوم. حيث حاولت تجربة الشيفرة بدون استخدام أمر التأخير، ولاحظت وصول قراءت متتالية عند ضغط زر التشغيل مره واحد فقط. للتوضيح أكثر، سوف نحول الشيفرة إلى الاردوينو ونجربها بدون وضع أمر التأخير لمشاهدة في “serial monitor” ماذا يحدث عند ضغط زر التشغيل مره واحدة.
| |
نلاحظ تم حذف امر التاخيرمن الشيفرة. (delay)
| |
نلاحظ من الصورة السابقة أن ريموت سوني يرسل نفس الرقم عدة مرات عند ضغط زر التشغيل مرة واحدة فقط. بينما حاكوم انسينيا يرسل أمر التشغيل مع أمر أخر وهو أن أمر التشغيل أتكرر الضغط علية مع العلم أن الضغط كان ضغطة واحدة فقط. السبب في ذلك أن القراءة جداً سريعة لذلك نضيف أمر التأخير حتى تأتي القراءة مرة واحدة فقط. حاول زيادة أو نقص التأخير على حسب الحاكوم المستخدم. فمثلاً حاكوم انسينيا يعمل جيداُ مع تأخيرdelay(50) بينما حاكوم صوني احتجت إلى تأخير أكثر delay(100). لذلك ليس هناك قيمة معينة، بل يعتمد على الحاكوم المستخدم.
| |
نلاحظ استقبال رقم واحد عند الضغط على زر التشغيل مرة واحدة فقط، وهذا ما نريده حتى نفسر كل أمر على حدا .
|
تجربة أخرى "إضاءة صمام ضوئي"
الخطوة الثانية من المشروع هي إضاءة LED عند ضغط زر التشغيل في حاكوم صوني. نبدأ بتوصيل الصمام الضوئي مع الاردوينو كما هو موضح في الصورة التالية:
|
صورة 11: توصيل الدايود الضوئي مع الاردوينو.
|
الآن يأتي دور البرمجة. لاحظنا في صورة رقم 10، عند ضغط زر التشغيل في حاكوم صوني تظهر قيمة 2704. وبالتالي، نبرمج الاردوينو بحيث إذا كانت القيمة المستقبلة تساوي 2704، نضيء الصمام الضوئي. وعند ضغط زر التشغيل مرة أخرى، نطفئ الصمام الضوئي. مهمة سهلة وبسيطة إن شاء الله. نقوم بكتابة هذه الشيفرة وتحويلها إلى بطاقة اردوينو.
|
#include
int val=LOW //valاضافة متغير اسمه
int ledPin = 8; // مخرج الصمام الضوئي في رجل رقم 8
int RECV_PIN = 2; //مدخل الانفراريد دايود الى رجل رقم 2 في الاردوينو
IRrecv irrecv(RECV_PIN); // ضع القراءة القادمة من رجل رقم 2 وارسالها الى دالة داخل المكتبة
decode_results results; // resultضع نتائج فك التشفير داخل متغير
void setup()
{
Serial.begin(9600); // تفعيل التواصل بين الحاسوب والاردوينو لقراءة القيم المستقبلة
pinMode(ledPin، OUTPUT); // اجعل رجل رقم 8 مخرج
irrecv.enableIRIn(); // ابدا في استقبال الاوامر المرسلة من الريموت
}
void loop() {
if (irrecv.decode(&results)) { // اذا تم استقبال اوامر من الحاكوم وتم تفسير الاوامر
Serial.println(results.value، DEC); // على شكل عشري serial monitorاطبع القراءت داخل
/*اذا كانت القيمة المتسقبله هي 2704*/
if(results.value == 2704) {
digitalWrite(ledPin،~val); // (high or low) اجعل مخرج الصمام الضوئي عكس قيمته الحالية
val=~val; // (val) اجعل قيمة مخرج الدايود الجديدة مساوية لقيمة
}
delay(120);
irrecv.resume(); // استمر في استقبال الاوامر المرسلة
}
}
|
نصائح
- جميع ما تم شرحه هنا تم تجربته وتطبيقه، حيث انه يعمل بدون أي مشاكل.
- يمكن استخدام الترنزيستور(Transistor) او المرحل (Relay) او العازل الكهروضوئي (photocoupleur, optocoupler) للتحكم بأجهزة كبيرة تتعامل مع تيار عالي وجهد عالي باستخدام الحاكوم.
- الفكرة المطبقة هنا، فقط لمساعدتكم في التفكير في مشاريع مختلفة يمكن تشغيلها وتنفيذ مهام مختلفة باستخدام الحاكوم. ليس لتشغيل وإقفال الأجهزة فقط ولكن يمكن استخدام جميع الازرار الموجودة على الحاكوم لتطبيق مهام مختلفة.