Search Code

கருப்பு அல்லது வெள்ளை ரிமோட்களை Arduino மூலம் டிகோட் செய்தல்

கருப்பு அல்லது வெள்ளை ரிமோட்களை Arduino மூலம் டிகோட் செய்தல்

இந்த டுடோரியலில், 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
லாஜிக்/IO மின்னழுத்தம் 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);

இந்த பகுதியில், RECV_PIN ஐ 11 ஆக அமைப்பதன் மூலம் IR ரிசீவருக்கான பின் எண்ணை வரையறுக்கிறோம். பயன்படுத்தப்படும் ரிமோட்டின் வகையையும் 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) லூப் மிக வேகமாக இயங்காமல் இருப்பதை உறுதி செய்கிறது, இது சிக்னல் செயலாக்கத்திற்கு உதவும்.

நிரூபணம் / என்ன எதிர்பார்க்கலாம்

எல்லாம் அமைக்கப்பட்டு குறியீடு பதிவேற்றப்பட்டவுடன், வெளியீட்டைப் பார்க்க serial monitor-ஐ திறக்கவும். ரிமோட்டில் ஒரு விசையை அழுத்தும்போது, அந்த விசையின் பெயர் மானிட்டரில் காட்டப்படுவதை நீங்கள் காண வேண்டும். விசை அடையாளம் காணப்படவில்லை என்றால், "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
}

நீங்கள் தேவைப்படும் எண்ணங்கள்

வளங்கள் மற்றும் மேற்கோள்கள்

இன்னும் எந்த வளங்களும் இல்லை.

கோப்புகள்📁

கோப்புகள் கிடைக்கவில்லை.