هل اردت يوماً ان تتحكم باشياء اخرى باستخدام الحاكوم مثل فتح واغلاق انوار المنزل او أي اجهزة أخرى؟ إذن، دعنا نتعلم اسهل طرق التحكم بدون الخوض في القوانين والتعقيدات المختلفة خلف التحكم عن بعد.
|
جميعنا يعلم أهمية التحكم عن بعد بالاجهزة المختلفة ويتمنى ان يضيف تلك الخاصية لاجهزته المفضلة حتى يتحكم فيها عن بعد ولكن يجهل طريقة تنفيذها. حيث نلاحظ تطبيقات مختلفة موجودة حالياً بيننا ومستخدمة بكثرة في حياتنا اليومية مثل فتح واغلاق السيارة باستخدام ريموت، التحكم بجهاز الريسيفر في البيت، التحكم بالاستريو والمسرح المنزلي...
| |
تم الاستعانه بهذه الصورة لغرض الشرح من موقع 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
|
للتأكد من إضافة المكتبة بنجاح، يمكنك مشاهدة المكتبة المضافة في برنامج الاردوينو كما هو موضح في الصورة 2.
| |
إذا لم تجد المكتبة مضافة في برنامج الاردوينو ، يجب إضافة المكتبة أيضا في ملف الاردوينو الرئيسي (نفس الملف الذي بداخله برنامج الاردوينو) اتبع ما في الصورة 3.
| |
بعد ذلك تأكد مره أخرى من وجود المكتبة عن طريق عرض المكتبات المستخدمة في برنامج اردوينو كما فعلنا في الصورة رقم 2. يحب أن تكون المكتبة موجودة قبل مواصلة الدرس. إن لم تكن موجودة فراجع الخطوات السابقة وأعد تشغيل برنامج الاردوينو حتى تظهر صورة المكتبة في برنامج الاردوينو.
|
بعد الانتهاء من إضافة المكتبة نقوم بتوصيل الاردوينو بمستقبل الأشعة تحت الحمراء كما هو موضح في الصورة التالية:
| |
صورة رقم 4: طريقة مفصلة للتوصيل و ربطها بالاردوينو.
|
صورة رقم 5: طريقة مبسطة للتوصيل.
|
#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(); // استمر في استقبال الاوامر المرسلة
}
}
|