مشروعات تطبيقية · الدرس 4.8

تشغيل مفتاح الإضاءة بجهاز التحكم عن بُعد (Infrared Remote Control)

العودة إلى الدروس

فكرة المشروع

يستخدم المحرك المؤازر (Servo) ومستقبل الأشعة تحت الحمراء (Infrared Receiving Module) وجهاز تحكم عن بُعد (Infrared Remote Control) لتحريك مفتاح مادي عن بعد دون تغيير أسلاك الجهاز.

المكونات المطلوبة

توصيل مستقبل الأشعة تحت الحمراء (Infrared Receiving Module) والمحرك المؤازر (Servo) بلوحة التوسعة
توصيل مستقبل الأشعة تحت الحمراء (Infrared Receiving Module) والمحرك المؤازر (Servo) بلوحة التوسعة

ربط أزرار جهاز التحكم عن بُعد (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 )-- */

ملفات الدرس والمكتبات

المكتبات المرفقة

ملفات الدرس

100%

عرض الصورة

استخدم + و− للتكبير والتصغير، أو اضغط Esc للإغلاق.