مشروعات تطبيقية · الدرس 4.8
تشغيل مفتاح الإضاءة بجهاز التحكم عن بُعد (Infrared Remote Control)
العودة إلى الدروسفكرة المشروع
يستخدم المحرك المؤازر (Servo) ومستقبل الأشعة تحت الحمراء (Infrared Receiving Module) وجهاز تحكم عن بُعد (Infrared Remote Control) لتحريك مفتاح مادي عن بعد دون تغيير أسلاك الجهاز.
المكونات المطلوبة
- لوحة أردوينو (ELEGOO UNO R3) ولوحة الحساسات (ALL IN ONE Sensor Shield).
- مستقبل الأشعة تحت الحمراء (Infrared Receiving Module) والمحرك المؤازر (Servo) وجهاز تحكم عن بُعد (Infrared Remote Control).

ربط أزرار جهاز التحكم عن بُعد (Infrared Remote Control) بزوايا مختلفة للمحرك يتيح تحريك مفاتيح مصباح أو باب أو مروحة شفط أو أجهزة أخرى ذات مفاتيح فعلية.
تهيئة الوحدات ودمج الكود
الخطوة الأولى
أدرج IRremote.h و Servo.h. بعد إدراج المكتبة يمكن استخدام أصنافها، مثل Servo، بإنشاء كائن myservo ثم الوصول لدواله وأعضائه بالنقطة.
يعرف المثال receiver = 12، وينشئ IRrecv irrecv(receiver) وكائن decode_results results.
الخطوة الثانية
ادمج برنامج المستقبل مع Servo. استبدل فعل زر VOL- باستدعاء myservo.write(30) لتحريك المحرك إلى 30 درجة، ثم انتظر 1000ms وأنهِ الحالة بـ break.
case 0xFF629D:
myservo.write(30);
delay(1000);
break;تأكد من توفر مكتبتَي IRremote و Servo في بيئة Arduino IDE قبل تشغيل المثال. إذا كانت إحدى المكتبتين غير مثبتة، فاتبع خطوات التثبيت في قسم «ما هي المكتبات؟» وطرق تثبيتها في الدرس 1.5 «وميض LED وإضافة المكتبات».
افتح ملف البرنامج ir__servo.ino من ملفات الدرس في بيئة Arduino IDE. بعد إتمام التوصيلات، وصّل لوحة أردوينو (UNO R3 Board) بالحاسوب بكابل توصيل (USB Cable)، ثم اضغط زر Upload (رفع) لنقل البرنامج إلى اللوحة وتشغيله عليها.
الكود
ir__servo/ir__servo.ino
//www.elegoo.com
//2016.12.9
#include "IRremote.h"
#include <Servo.h>
/* After including the corresponding libraries,
we can use the "class" like "Servo" created by the developer for us.
We can use the functions and variables created in the libraries by creating
objects like the following "myservo" to refer to the members in ".".*/
Servo myservo;
int receiver = 12; // Signal Pin of IR receiver to Arduino Digital Pin 12
/*-----( Declare objects )-----*/
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results; // create instance of 'decode_results'
/*-----( Function )-----*/
void translateIR() // takes action based on IR code received
// describing Remote IR codes
{
switch(results.value)
{
//the "VOL-" button
case 0xFF629D: myservo.write(30);// move servos to center position -> 30°
delay(1000);
break;
//the "VOL+" button
case 0xFFA857: myservo.write(150);// move servos to center position -> 150°
delay(1000);
break;
default:
Serial.println(" other button ");
}// End Case
delay(500); // Do not get immediate repeat
} //END translateIR
void setup() /*----( SETUP: RUNS ONCE )----*/
{
Serial.begin(9600);
Serial.println("IR Receiver Button Decode");
irrecv.enableIRIn(); // Start the receiver
myservo.attach(11);//connect pin 11 with the control line(the middle line of Servo)
}/*--(end setup )---*/
void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
if (irrecv.decode(&results)) // have we received an IR signal?
{
translateIR();
irrecv.resume(); // receive the next value
}
}/* --(end main loop )-- */