کوڈ تلاش کریں

آرڈوینو کے ساتھ بلیک یا وائٹ ریموٹس کو ڈی کوڈ کرنا

آرڈوینو کے ساتھ بلیک یا وائٹ ریموٹس کو ڈی کوڈ کرنا

اس ٹیوٹوریل میں، ہم سیکھیں گے کہ Arduino اور IR ریسیور کا استعمال کرتے ہوئے سیاہ اور سفید انفراریڈ ریموٹ کنٹرولز کی کلیدوں کو کیسے ڈی کوڈ کیا جائے۔ اس پروجیکٹ کے اختتام تک، آپ یہ تعین کر سکیں گے کہ ریموٹ پر کون سی کلید دبائی گئی ہے اور اس معلومات کو سیریل مانیٹر پر ظاہر کر سکیں گے۔ یہ آپ کے پاس موجود کسی بھی ریموٹ، جیسے ٹی وی یا دیگر آلات (ویڈیو میں 01:00 پر) کے ساتھ آلات کو کنٹرول کرنے کے لیے مفید ہو سکتا ہے۔

Deconding-IR-remote-main

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

Deconding-IR-remote-main-2

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

اس پروجیکٹ کے بنیادی اجزاء میں Arduino بورڈ اور ایک IR ریسیور ماجیول شامل ہیں، جسے عام طور پر VS1838B کہا جاتا ہے۔ Arduino مرکزی کنٹرولر کے طور پر کام کرے گا، ریموٹ سے موصول ہونے والے سگنلز پر کارروائی کرنے والے کوڈ کو چلائے گا۔ IR ریسیور ریموٹ کنٹرول سے خارج ہونے والے انفراریڈ سگنلز کو پکڑتا ہے اور انہیں ایک ایسی شکل میں تبدیل کرتا ہے جسے Arduino سمجھ سکتا ہے۔

IR remote receiver VS1838B pins
IR remote receiver VS1838B pins

VS1838B 2.7V سے 5.5V کی وولٹیج رینج پر کام کرتا ہے، جو اسے زیادہ تر Arduino بورڈز کے ساتھ مطابقت رکھتا ہے۔ یہ حالات کے لحاظ سے 10 سے 15 میٹر کے فاصلے سے سگنلز کا پتہ لگا سکتا ہے۔ انفراریڈ ریسیور ایک ڈیجیٹل سگنل آؤٹ پٹ کرتا ہے جو اس بات کی نشاندہی کرتا ہے کہ ریموٹ پر کون سا بٹن دبایا گیا ہے، جس سے Arduino اس کے مطابق جواب دے سکتا ہے۔

ڈیٹاشیٹ کی تفصیلات

مینوفیکچرر VS1838B
پارٹ نمبر VS1838B
لاجک/آئی او وولٹیج 2.7–5.5 V
سپلائی وولٹیج 5 V
آؤٹ پٹ کرنٹ (فی چینل) 1.5 mA
وصول کرنے کا فاصلہ 10–15 m
ان پٹ فریکوئنسی 38 kHz
کوئیسنٹ کرنٹ 0.8 mA (typ.)
آپریشن کا زاویہ 70 ڈگری
پیکیج TO-220

 

  • IR ریسیور کو نقصان پہنچانے سے بچنے کے لیے مناسب وولٹیج سپلائی کو یقینی بنائیں۔
  • ریسیور ماجیول کو براہ راست سورج کی روشنی یا مضبوط انفراریڈ ذرائع سے دور رکھیں۔
  • سگنل ریڈنگز کو مستحکم کرنے کے لیے اگر ضروری ہو تو پل اپ ریزسٹرز استعمال کریں۔
  • وقفے وقفے سے سگنلز کو روکنے کے لیے وائرنگ کنکشن محفوظ ہونے چاہئیں۔
  • یہ دیکھنے کے لیے مختلف ریموٹ آزمائیں کہ وہ سیٹ اپ کے ساتھ کتنی اچھی طرح کام کرتے ہیں۔
  • Deconding-IR-remote-main-1

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

IR ریسیور کو Arduino سے جوڑنے کے لیے، پہلے IR ریسیور کے VCC پن کو Arduino کے 5V پن سے جوڑیں۔ اگلا، ریسیور کے GND پن کو Arduino کے کسی ایک GND پن سے جوڑیں۔ آخر میں، IR ریسیور کے سگنل پن (جسے اکثر SIG یا OUT کہا جاتا ہے) کو Arduino کے ڈیجیٹل پن 11 سے جوڑیں۔

یقینی بنائیں کہ کنکشن محفوظ ہیں، کیونکہ ڈھیلے کنکشن غیر مستقل ریڈنگز کا باعث بن سکتے ہیں۔ اگر آپ IR ریسیور کا PCB ورژن یا بئیر ماجیول استعمال کر رہے ہیں، تو وائرنگ وہی رہتی ہے؛ بس ماجیول کے لیبلنگ کے مطابق پنوں کی درست شناخت کریں (ویڈیو میں 03:15 پر)۔

IRremote لائبریری انسٹال کریں

Arduino IDE لانچ کریں۔ (آپ اسے Arduino.cc سے مفت حاصل کر سکتے ہیں) بائیں جانب لائبریری آئیکن پر کلک کریں اور IRremote تلاش کریں اور اسے انسٹال کرنے کے لیے "Install" پر کلک کریں۔

#include <IRremote.h>

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

int RECV_PIN = 11;
const char type ='W'; // W سفید کے لیے، B سیاہ کے لیے
const boolean PCB = 0; // 1 PCB کے لیے، 0 بئیر ماجیول کے لیے
IRrecv irrecv(RECV_PIN);

اس اقتباس میں، ہم IR ریسیور کے لیے پن نمبر کی وضاحت کرتے ہیں جس میں RECV_PIN کو 11 پر سیٹ کیا گیا ہے۔ ہم استعمال ہونے والے ریموٹ کی قسم بھی type متغیر کے ساتھ متعین کرتے ہیں، جہاں 'W' سفید ریموٹ اور 'B' سیاہ ریموٹ کی نشاندہی کرتا ہے۔ PCB متغیر ریسیور کے PCB ورژن یا بئیر ماجیول کے استعمال میں فرق کرتا ہے۔

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // ریسیور شروع کریں
}

setup() فنکشن میں، ہم سیریل کمیونیکیشن کو 9600 باؤڈ پر شروع کرتے ہیں اور IR ریسیور کو چالو کرتے ہیں۔ یہ سیریل مانیٹر پر آؤٹ پٹ کی نگرانی کے لیے اہم ہے، جس سے ہمیں یہ دیکھنے کی اجازت ملتی ہے کہ کون سی کلید دبائی گئی ہے۔

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

مرکزی loop() چیک کرتا ہے کہ آیا IR ریسیور نے سگنل ڈی کوڈ کیا ہے۔ اگر اس نے کیا ہے، تو یہ robojaxValidateCode فنکشن کو کال کرتا ہے تاکہ موصول شدہ ویلیو پر کارروائی کرے اور پھر اگلے سگنل کے لیے سننا دوبارہ شروع کرتا ہے۔ delay(100) اس بات کو یقینی بناتا ہے کہ لوپ بہت تیزی سے نہ چلے، جو سگنل پروسیسنگ میں مدد کر سکتا ہے۔

ڈیموسٹریشن / کیا توقع کریں

ایک بار جب سب کچھ سیٹ اپ ہو جائے اور کوڈ اپ لوڈ ہو جائے، تو آؤٹ پٹ دیکھنے کے لیے سیریل مانیٹر کھولیں۔ جب آپ ریموٹ پر کوئی کلید دبائیں گے، تو آپ کو مانیٹر پر متعلقہ کلید کا نام ظاہر ہوتا دیکھنا چاہیے۔ اگر کلید پہچانی نہ جائے، تو یہ "Key unknown" ظاہر کرے گا۔ اس بات کو یقینی بنائیں کہ کلیدوں کو مضبوطی سے دبائیں، کیونکہ ڈھیلے کنکشن غلط ریڈنگز کا سبب بن سکتے ہیں (ویڈیو میں 05:40 پر)۔

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

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

  • 00:00 شروع
  • 00:56 ہارڈویئر کی وضاحت کی گئی ہے
  • 04:26 وائرنگ کی وضاحت کی گئی ہے
  • 05:20 کوڈ کی وضاحت کی گئی ہے
  • 12:27 کوڈ ڈی کوڈنگ کا ڈیموسٹریشن

تصاویر

Decoding any black remote or white remote with Arduino
Decoding Any Black remote or White remote with Arduino
IR remote receiver VS1838B pins
IR remote receiver VS1838B pins
Deconding-IR-remote-main
Deconding-IR-remote-main
Deconding-IR-remote-main-1
Deconding-IR-remote-main-1
Deconding-IR-remote-main-2
Deconding-IR-remote-main-2
137-Source code for decoding infrared remote controllers using Arduino
زبان: C++
/*
 * Original code and library from - http://arcfn.com
 * 
 * This code decodes keys of Black IR remote and White IR remote
 * 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 either as PCB or bare module. See video for details
 * 
 * Modified/Written by Ahmad Shamshiri
 * on July 28, 2018 at 22:48 in Ajax, Ontario, Canada
 * for Robojax.com
 * Watch video instruction for this code:https://youtu.be/muAkBQb24NI
 * 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 = 0;// if receiver is PCB set to 1, if not set to 0. See video for details

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 labels 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 Remote Decoder");
  irrecv.enableIRIn(); // Start the receiver

}

void loop() {

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

/*
 * function: robojaxValidateCode
 * validates the remote code and prints 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 Black remote code
      for(int i=0; i< sizeof(whiteRemote)/sizeof(int); i++)
      {
        if(whiteRemote[i] ==cd)
        {
          
          Serial.print("Key pressed:");
          Serial.println(whiteRemoteKey[i]);
    
          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 Black remote code
      for(int i=0; i< sizeof(whiteRemotePCB)/sizeof(int); i++)
      {
        if(whiteRemotePCB[i] ==cd)
        {
          
          Serial.print("Key pressed:");
          Serial.println(whiteRemoteKey[i]);
    
          found=1;
        }// if matched
      }// for  
 }else if(type =='B' && PCB){
    // Robojax IR White 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]);
    
          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)
        {
          if(blackRemoteKey[i] == "OK"){
            digitalWrite(9,HIGH);
          }
          Serial.print("Key pressed:");
          Serial.println(blackRemoteKey[i]);
    
          found=1;
        }// if matched
      }// for  
 }// else
  if(!found){
    if(cd !=0xFFFFFFFF)
      {
    Serial.println("Key unknown");
      }
  }// found
}

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

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

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

فائلیں📁

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