کوڈ تلاش کریں

کسی بھی انفراریڈ ریموٹ سے Arduino اور ریلے کے ذریعے AC بلب کو کنٹرول کریں

کسی بھی انفراریڈ ریموٹ سے Arduino اور ریلے کے ذریعے AC بلب کو کنٹرول کریں

اس ٹیوٹوریل میں، ہم سیکھیں گے کہ انفراریڈ ریموٹ کنٹرول کا استعمال کرتے ہوئے ایک AC بلب کو Arduino اور ریلے ماجیول کے ذریعے کیسے چلایا جائے۔ اس پروجیکٹ میں ریموٹ سے سگنلز کو ڈی کوڈ کرنا اور انہیں ریلے کو کنٹرول کرنے کے لیے استعمال کرنا شامل ہے، جو بدلے میں AC بلب کو آن اور آف کرے گا۔ اس ٹیوٹوریل کے اختتام تک، آپ اپنی لائٹ فکسچر کو کنٹرول کرنے کے لیے کسی بھی انفراریڈ ریموٹ کو استعمال کر سکیں گے۔

ہم ریموٹ سے سگنلز حاصل کرنے کے لیے ایک انفراریڈ ریسیور استعمال کریں گے، اور Arduino ان سگنلز کی تشریح کر کے مخصوص اقدامات انجام دے گا۔ فراہم کردہ کوڈ آپ کو ریموٹ کی قسم (سیاہ یا سفید) اور یہ منتخب کرنے کی اجازت دے گا کہ آیا آپ ریسیور کے لیے PCB یا بئر ماجیول استعمال کر رہے ہیں۔ اضافی تفصیلات اور وضاحت کے لیے متعلقہ ویڈیو ضرور دیکھیں (ویڈیو میں 0:00 پر)۔

ہارڈویئر کی وضاحت

اس پروجیکٹ کے لیے، اہم اجزاء میں Arduino بورڈ، ایک انفراریڈ ریسیور ماجیول، اور ایک ریلے ماجیول شامل ہیں۔ انفراریڈ ریسیور ریموٹ کنٹرول سے سگنلز حاصل کرنے اور انہیں Arduino کو بھیجنے کا ذمہ دار ہے۔ ریلے ماجیول AC بلب کو کنٹرول کرنے کے لیے ایک سوئچ کے طور پر کام کرتا ہے، جس سے وصول شدہ سگنلز کی بنیاد پر اسے آن اور آف کیا جا سکتا ہے۔

5V HIGH-level trigger relay module
5V HIGH-لیول ٹرگر ریلے ماجیول

انفراریڈ ریسیور عام طور پر 38 kHz کی فریکوئنسی پر کام کرتا ہے اور تقریباً 10 سے 15 میٹر کے فاصلے سے سگنلز کا پتہ لگا سکتا ہے۔ ایک بار جب Arduino سگنل وصول کر لیتا ہے، تو وہ اسے ڈی کوڈ کرتا ہے اور بلب کی بجلی کو کنٹرول کرنے کے لیے ریلے کا استعمال کرتا ہے۔

وائرنگ ہدایات

IR_remote_AC_relay_wiring

وائرنگ کا آغاز انفراریڈ ریسیور ماجیول کو Arduino سے جوڑ کر کریں۔ ریسیور کا VCC پن Arduino کے 5V پن سے جڑتا ہے، اور گراؤنڈ پن GND پن سے جڑتا ہے۔ انفراریڈ ریسیور کا سگنل پن Arduino کے ڈیجیٹل پن 11 سے منسلک ہونا چاہیے۔

اگلا، ریلے ماجیول کو جوڑیں۔ ریلے کا کنٹرول پن Arduino کے ڈیجیٹل پن 2 سے منسلک ہونا چاہیے۔ نیز، ریلے کے VCC اور GND پنوں کو بالترتیب Arduino کے 5V اور GND سے جوڑیں۔ آخر میں، محفوظ آپریشن کو یقینی بنانے کے لیے AC بلب کو ریلے کی وضاحتوں کے مطابق ریلے سے جوڑیں۔

کوڈ مثالیں اور واک تھرو

پروگرام کے سیٹ اپ مرحلے میں، ہم سیریل کمیونیکیشن کو ابتدائی شکل دیتے ہیں اور ریلے پن کو ترتیب دیتے ہیں۔ شناخت کنندہ RECV_PIN کو 11 پر سیٹ کیا گیا ہے، جہاں انفراریڈ ریسیور کا سگنل پن منسلک ہے۔ یہ ہمیں ریموٹ کنٹرول سے ڈیٹا حاصل کرنے کی اجازت دیتا ہے۔

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // ریسیور شروع کریں
  pinMode(RELAY_PIN, OUTPUT); // ریلے کے لیے ایک پن کو OUTPUT کے طور پر متعین کریں
  digitalWrite(RELAY_PIN, HIGH); // شروع میں ریلے کو OFF پر سیٹ کریں
}

لوپ فنکشن میں، ہم ریموٹ سے آنے والے سگنلز کے لیے مسلسل جانچ کرتے ہیں۔ جب سگنل کا پتہ چلتا ہے، تو قدر کو ڈی کوڈ کیا جاتا ہے، اور دبائے گئے کلید کی بنیاد پر متعلقہ اقدام کیا جاتا ہے۔

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX); // وصول شدہ قدر پرنٹ کریں
    robojaxValidateCode(results.value); // کوڈ کی تصدیق کریں
    irrecv.resume(); // اگلی قدر حاصل کریں
  }
  delay(100);
}

robojaxValidateCode فنکشن وصول شدہ کوڈ کو ریموٹ کے معلوم اقدار کے خلاف جانچتا ہے۔ اس بات پر منحصر ہے کہ کون سی کلید دبائی گئی ہے، یہ ریلے کا استعمال کرتے ہوئے متعلقہ اقدام انجام دے گا۔

void robojaxValidateCode(int cd) {
  if (type == 'W' && !PCB) {
    // سفید ریموٹ کوڈز چیک کریں
    for (int i = 0; i < sizeof(whiteRemote) / sizeof(int); i++) {
      if (whiteRemote[i] == cd) {
        Serial.print("دبائی گئی کلید: ");
        Serial.println(whiteRemoteKey[i]);
        relayAction(whiteRemoteKey[i]); // اقدام کریں
      }
    }
  }
}

اس فنکشن میں، کوڈ چیک کرتا ہے کہ آیا دبائی گئی کلید متعین کردہ اری اقدار سے مطابقت رکھتی ہے۔ اگر مماثلت ملتی ہے، تو یہ relayAction فنکشن کو کال کرتا ہے تاکہ دبائی گئی کلید کے لحاظ سے ریلے کو آن یا آف کیا جا سکے۔

مظاہرہ / کیا توقع کریں

وائرنگ مکمل کرنے اور کوڈ اپ لوڈ کرنے کے بعد، آپ AC بلب کو کنٹرول کرنے کے لیے اپنا انفراریڈ ریموٹ استعمال کر سکتے ہیں۔ ریموٹ پر مخصوص کلیدوں کو دبائیں، اور ریلے اس کے مطابق بلب کو فعال یا غیر فعال کر دے گا۔ ہر کلید کو اس کا ردعمل دیکھنے کے لیے ضرور آزمائیں (ویڈیو میں 5:00 پر)۔

ویڈیو ٹائم اسٹیمپس

  • 00:00 شروع
  • 00:49 تعارف
  • 02:00 وائرنگ اور کنکشن
  • 05:27 Arduino کوڈ کی وضاحت
  • 09:51 مختلف ریموٹ کے ساتھ AC بلب کو کنٹرول کرنے کا مظاہرہ
  • 13:13 اپنے TV ریموٹ سے AC بلب کو کنٹرول کرنا

تصاویر

5V LOW-LEVEL trigger relay
5V LOW-LEVEL trigger relay
5V HIGH-level trigger relay module
5V HIGH-level trigger relay module
remote
remote
IR_remote_AC_relay_wiring
IR_remote_AC_relay_wiring
138-Source for controlling an AC load using an Arduino
زبان: C++
/*
 * Original library from - http://arcfn.com
 * 
 * This Arduino code decodes any remote code and then you can control an AC load using a relay
 * sold on eBay for Arduino. 
 * You have to select the type of your remote as Black or White in the code below
 * and also select your receiver 1838 as either a PCB or bare module. See video for details
 * 
 * You have to watch this video: https://youtu.be/muAkBQb24NI
 * before proceeding with this code. 
 * 
 * Modified/Written by Ahmad Shamshiri
 * on July 31, 2018 at 20:33 in Ajax, Ontario, Canada
 * for Robojax.com
 * Watch video instructions for this code: https://youtu.be/j5kb0WBpD30
 * Get other Arduino codes from Robojax.com
 * 
 */

#include <IRremote.h>

int RECV_PIN = 11;
const char type ='W';// W for white, B for black. Must keep single quotes like 'B' or 'W'
const boolean PCB = 1;// if receiver is PCB set to 1, if not set to 0. See video for details
boolean displayCode = true;// to display remote code. if not, set to false

//***** Relay settings begins
const int RELAY_PIN = 2;// 
const String ON="3";// turn relay ON with + key on remote
const String OFF="1";// turn relay OFF with - key on remote
//**** Relay settings ends

IRrecv irrecv(RECV_PIN);


// this is array holding codes for White Remote when used with PCB version of receiver
unsigned int whiteRemotePCB[] ={
            0xE318261B, // CH-
            0x511DBB,   // CH
            0xEE886D7F,  // CH+

            0x52A3D41F, // |<<
            0xD7E84B1B, // >>|
            0x20FE4DBB, // >||          

            0xF076C13B, // -
            0xA3C8EDDB, // +
            0x12CEA6E6, // EQ

            0xC101E57B, // 0
            0x97483BFB, // 100+
            0xF0C41643, // 200+

            0x9716BE3F, // 1
            0x3D9AE3F7, // 2
            0x6182021B, // 3           

            0x8C22657B, // 4 
            0x488F3CBB, // 5
            0x449E79F,  // 6

            0x32C6FDF7, // 7
            0x1BC0157B, // 8
            0x3EC3FC1B  // 9                          
            };

// this is array holding codes for White Remote when used with non-PCB version of receiver            
unsigned int whiteRemote[] ={
            0xFFA25D, // CH-
            0xFF629D,   // CH
            0xFFE21D,  // CH+

            0xFF22DD, // |<<
            0xFF02FD, // >>|
            0xFFC23D, // >||          

            0xFFE01F, // -
            0xFFA857, // +
            0xFF906F, // EQ

            0xFF6897, // 0
            0xFF9867, // 100+
            0xFFB04F, // 200+

            0xFF30CF, // 1
            0xFF18E7, // 2
            0xFF7A85, // 3           

            0xFF10EF, // 4 
            0xFF38C7, // 5
            0xFF5AA5,  // 6

            0xFF42BD, // 7
            0xFF4AB5, // 8
            0xFF52AD  // 9                          
            };
// key lables of white remote
 String whiteRemoteKey[] ={
            "CH-",
            "CH",
            "CH+",

            "|<<",
            ">>|",
            ">||",

            "-",
            "+",
            "EQ",

            "0",
            "100+",
            "200+",

            "1",
            "2",
            "3",

            "4",
            "5",
            "6",

            "7",
            "8",
            "9"
            };

// this is array holding codes for Black Remote when used with non-PCB version of receiver
 unsigned int blackRemote[] ={
            0xFF629D, // ^
            0xFF22DD,   // <
            0xFF02FD,  // OK
            0xFFC23D, // >
            0xFFA857, // v

            0xFF6897, // 1
            0xFF9867, // 2
            0xF0C41643, // 3           

            0xFF30CF, // 4 
            0xFF18E7, // 5
            0xFF7A85,  // 6

            0xFF10EF, // 7
            0xFF38C7, // 8
            0xFF5AA5,  // 9 

            0xFF42BD, // *
            0xFF4AB5, // 0
            0xFF52AD  // #                                      
            };

// this is array holding codes for Black Remote when used with PCB version of receiver
 unsigned int blackRemotePCB[] ={
            0x511DBB, // ^
            0x52A3D41F,   // <
            0xD7E84B1B,  // OK
            0x20FE4DBB, // >
            0xA3C8EDDB, // v


            0xC101E57B, // 1
            0x97483BFB, // 2
            0xF0C41643, // 3           

            0x9716BE3F, // 4 
            0x3D9AE3F7, // 5
            0x6182021B,  // 6

            0x8C22657B, // 7
            0x488F3CBB, // 8
            0x449E79F,  // 9 

            0x32C6FDF7, // *
            0x1BC0157B, // 0
            0x3EC3FC1B  // #                                      
            };

// Black remote key names
 String blackRemoteKey[] ={
            "^",
            "<",
            "OK",
            ">",
            "v",

            "1",
            "2",
            "3",

            "4",
            "5",
            "6",

            "7",
            "8",
            "9",
            
            "*",
            "0",
            "#"
            };

decode_results results;


void setup()
{
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Robojax IR Decode");
  Serial.println("Control Relay with Remote");
  irrecv.enableIRIn(); // Start the receiver

  pinMode(RELAY_PIN,OUTPUT);// define a pin for relay as OUTPUT
  digitalWrite(RELAY_PIN, HIGH);// set relay to OFF at the begining
}

void loop() {

  if (irrecv.decode(&results)) {
    if(displayCode)Serial.println(results.value, HEX);
    robojaxValidateCode(results.value);// used the "robojaxValidateCode" bellow
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

/*
 * function: robojaxValidateCode
 * validates the remote code and prints the correct key name
 * cd is code passed from the loop
 * Written by A. S. for Robojax
 */
void robojaxValidateCode(int cd)
{

  // Robojax IR Remote decoder
  int found=0;

 if(type =='W' && !PCB)
 {
    // Robojax IR White Remote decoder
    // if type is set to 'W' (white remote) and PCB=0 then check White remote code
      for(int i=0; i< sizeof(whiteRemote)/sizeof(int); i++)
      {
        if(whiteRemote[i] ==cd)
        {
          
          Serial.print("Key pressed:");
          Serial.println(whiteRemoteKey[i]);
          relayAction(whiteRemoteKey[i]);// take action
          found=1;
        }// if matched
      }// for
 }else if(type =='W' && PCB){
    // Robojax IR White Remote decoder
    // if type is set to 'W' (white remote) and PCB=1 then check White remote code
      for(int i=0; i< sizeof(whiteRemotePCB)/sizeof(int); i++)
      {
        if(whiteRemotePCB[i] ==cd)
        {
          
          Serial.print("Key pressed:");
          Serial.println(whiteRemoteKey[i]);
          relayAction(whiteRemoteKey[i]);// take action 
          found=1;
        }// if matched
      }// for  
 }else if(type =='B' && PCB){
    // Robojax IR Black Remote decoder
       // if type is set to 'B' (black remote) and PCB=1 then check Black remote code
       for(int i=0; i< sizeof(blackRemotePCB)/sizeof(int); i++)
      {
        // Robojax IR black Remote decoder
        if(blackRemotePCB[i] ==cd)
        {

          Serial.print("Key pressed:");
          Serial.println(blackRemoteKey[i]);
         relayAction(blackRemoteKey[i]);// take action     
          found=1;
        }// if matched
      }// for   
 }else{

      // if type is set to 'B' (black remote) and PCB =0 then check Black remote code
       for(int i=0; i< sizeof(blackRemote)/sizeof(int); i++)
      {
        // Robojax IR black Remote decoder
        if(blackRemote[i] ==cd)
        {

          Serial.print("Key pressed:");
          Serial.println(blackRemoteKey[i]);
          relayAction(blackRemoteKey[i]);// take action          
    
          found=1;
        }// if matched
      }// for  
 }// else
  if(!found){
    if(cd !=0xFFFFFFFF)
      {
    Serial.println("Key unknown");
      }
  }// found
}// robojaxValidateCode end

/*
 * 
 * relayAction()
 * receives string "value" as input and based on the settings, 
 * turns relay pin HIGH or LOW
 */
void relayAction(String value)
{
  // Robojax IR Relay control
   if(value == ON)
   {
    digitalWrite(RELAY_PIN, LOW);// Turn relay ON
    Serial.println("Relay Turned ON");
   }

   if(value == OFF)
   {
    digitalWrite(RELAY_PIN, HIGH);// Turn relay OFF
    Serial.println("Relay Turned OFF");
   }
}//relayAction end

آپ کو جن چیزوں کی ضرورت ہو سکتی ہے

وسائل اور حوالہ جات

ابھی تک کوئی وسائل نہیں۔

فائلیں📁

فریٹزنگ فائل