Search Code

Beheer 'n WS-gloeilamp met enige infrarooi-afstandbeheer deur 'n Arduino en relais te gebruik

Beheer 'n WS-gloeilamp met enige infrarooi-afstandbeheer deur 'n Arduino en relais te gebruik

In hierdie tutoriaal gaan ons leer hoe om 'n infrarooi afstandbeheer te gebruik om 'n WS-gloeilamp te bedryf deur middel van 'n Arduino en 'n relêmodule. Hierdie projek behels die dekodering van die seine van die afstandbeheer en die gebruik daarvan om die relê te beheer, wat op sy beurt die WS-gloeilamp aan- en afskakel. Teen die einde van hierdie tutoriaal sal jy enige infrarooi afstandbeheer kan gebruik om jou ligtoebehore te beheer.

Ons gaan 'n infrarooi ontvanger gebruik om die seine van die afstandbeheer vas te vang, en die Arduino sal hierdie seine interpreteer om spesifieke aksies uit te voer. Die verskafde kode sal jou toelaat om die tipe afstandbeheer (swart of wit) te kies en of jy 'n PCB- of kaalmodule vir die ontvanger gebruik. Maak seker dat jy die gepaardgaande video kyk vir bykomende besonderhede en verduidelikings (in video by 0:00).

Hardeware Verduidelik

Vir hierdie projek sluit die hoofkomponente die Arduino-bord, 'n infrarooi ontvangermodule en 'n relêmodule in. Die infrarooi ontvanger is verantwoordelik om die seine van die afstandbeheer vas te vang en dit na die Arduino te stuur. Die relêmodule dien as 'n skakelaar om die WS-gloeilamp te beheer, wat dit toelaat om aan en af te skakel op grond van die ontvangde seine.

5V HOË-vlak sneller relêmodule
5V HOË-vlak sneller relêmodule

Die infrarooi ontvanger werk tipies teen 'n frekwensie van 38 kHz en kan seine opspoor vanaf 'n afstand van ongeveer 10 tot 15 meter. Sodra die Arduino die sein ontvang, dekodeer dit dit en gebruik die relê om die krag na die gloeilamp te beheer.

Bedradingsinstruksies

IR_remote_AC_relay_wiring

Begin met bedrading deur die infrarooi ontvangermodule aan die Arduino te koppel. Die VCC-pen van die ontvanger koppel aan die 5V-pen op die Arduino, en die grondpen koppel aan 'n GND-pen. Die seinpen van die infrarooi ontvanger moet aan digitale pen 11 op die Arduino gekoppel word.

Volgende, koppel die relêmodule. Die beheerpen van die relê moet aan digitale pen 2 op die Arduino bedraad word. Koppel ook die relê se VCC- en GND-penne aan die Arduino se 5V en GND, onderskeidelik. Laastens, bedraad die WS-gloeilamp aan die relê volgens die relê se spesifikasies om veilige werking te verseker.

Kode Voorbeelde & Deurloop

In die opstellingsfase van die program initialiseer ons die serieë kommunikasie en stel die relêpen op. Die identifiseerder RECV_PIN is gestel op 11, wat is waar die infrarooi ontvanger se seinpen gekoppel is. Dit stel ons in staat om data van die afstandbeheer te ontvang.

void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); // Begin die ontvanger
  pinMode(RELAY_PIN, OUTPUT); // definieer 'n pen vir relê as OUTPUT
  digitalWrite(RELAY_PIN, HIGH); // stel relê na AF aan die begin
}

In die lusfunksie kontroleer ons voortdurend vir inkomende seine van die afstandbeheer. Wanneer 'n sein opgespoor word, word die waarde gedekodeer, en die ooreenstemmende aksie word geneem op grond van die sleutel wat gedruk is.

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX); // Druk die ontvangde waarde
    robojaxValidateCode(results.value); // Valideer die kode
    irrecv.resume(); // Ontvang die volgende waarde
  }
  delay(100);
}

Die robojaxValidateCode-funksie kontroleer die ontvangde kode teen bekende waardes vir die afstandbeheer. Afhangende van watter sleutel gedruk is, sal dit die ooreenstemmende aksie uitvoer deur die relê te gebruik.

void robojaxValidateCode(int cd) {
  if (type == 'W' && !PCB) {
    // Kontroleer Wit afstandbeheer kodes
    for (int i = 0; i < sizeof(whiteRemote) / sizeof(int); i++) {
      if (whiteRemote[i] == cd) {
        Serial.print("Sleutel gedruk: ");
        Serial.println(whiteRemoteKey[i]);
        relayAction(whiteRemoteKey[i]); // Neem aksie
      }
    }
  }
}

In hierdie funksie kontroleer die kode of die gedrukte sleutel ooreenstem met die gedefinieerde skikkingswaardes. As 'n ooreenstemming gevind word, roep dit die relayAction-funksie aan om die relê aan of af te skakel, afhangende van die sleutel wat gedruk is.

Demonstrasie / Wat om te VerwAg

Na die voltooiing van die bedrading en die oplaai van die kode, kan jy jou infrarooi afstandbeheer gebruik om die WS-gloeilamp te beheer. Druk die aangewese sleutels op die afstandbeheer, en die relê moet die gloeilamp dienooreenkomstig aktiveer of deaktiveer. Maak seker dat jy elke sleutel toets om sy reaksie te sien (in video by 5:00).

Video Tydstempels

  • 00:00 Begin
  • 00:49 Inleiding
  • 02:00 Bedrading en verbinding
  • 05:27 Arduino-kode verduidelik
  • 09:51 Demonstrasie van die beheer van WS-gloeilamp met verskillende afstandbeheer
  • 13:13 Gebruik jou TV-afstandbeheer om WS-gloeilamp te beheer

Beelde

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
Taal: 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

Goedere wat jy dalk nodig het

Hulpbronne en verwysings

Geen hulpbronne nog.

Lêers📁

Fritzing-lêer