Suchcode

Steuern Sie eine AC-Glühbirne mit einer beliebigen Infrarotfernbedienung, einem Arduino und einem Relais.

Steuern Sie eine AC-Glühbirne mit einer beliebigen Infrarotfernbedienung, einem Arduino und einem Relais.

In diesem Tutorial werden wir lernen, wie man eine Infrarot-Fernbedienung verwendet, um eine AC-Lampe über ein Arduino und ein Relaismodul zu steuern. Dieses Projekt beinhaltet das Dekodieren der Signale von der Fernbedienung und deren Verwendung zur Steuerung des Relais, das wiederum die AC-Lampe ein- und ausschaltet. Am Ende dieses Tutorials wirst du in der Lage sein, jede Infrarot-Fernbedienung zu verwenden, um deine Lichtquelle zu steuern.

Wir werden einen Infrarotempfänger verwenden, um die Signale von der Fernbedienung zu erfassen, und das Arduino wird diese Signale interpretieren, um spezifische Aktionen auszuführen. Der bereitgestellte Code ermöglicht es Ihnen, den Typ der Fernbedienung (schwarz oder weiß) auszuwählen und ob Sie ein PCB oder ein nacktes Modul für den Empfänger verwenden. Stellen Sie sicher, dass Sie das zugehörige Video für zusätzliche Details und Klarstellungen (im Video bei 0:00) ansehen.

Hardware erklärt

Für dieses Projekt umfassen die Hauptkomponenten das Arduino-Board, ein Infrarot-Empfängermodul und ein Relaismodul. Der Infrarotempfänger ist dafür verantwortlich, die Signale der Fernbedienung zu empfangen und an das Arduino zu senden. Das Relaismodul fungiert als Schalter, um die AC-Glühbirne zu steuern, sodass sie je nach empfangenen Signalen ein- und ausgeschaltet werden kann.

5V HIGH-Level Trigger-Relaismodul
5V HIGH-Level-Trigger-Relaismodul

Der Infrarotempfänger arbeitet typischerweise bei einer Frequenz von 38 kHz und kann Signale aus einer Entfernung von etwa 10 bis 15 Metern empfangen. Sobald der Arduino das Signal empfängt, dekodiert er es und verwendet das Relais, um die Leistung der Lampe zu steuern.

Verdrahtungsanweisungen

IR_remote_AC_relay_wiring

Beginnen Sie mit der Verkabelung, indem Sie das Infrarotempfängermodul mit dem Arduino verbinden. Der VCC-Pin des Empfängers wird mit dem 5V-Pin des Arduinos verbunden, und der Massepin wird mit einem GND-Pin verbunden. Der Signalausgang des Infrarotempfängers sollte mit einem digitalen Pin verbunden werden.11auf dem Arduino.

Als nächstes verbinden Sie das Relaismodul. Der Steuerpin des Relais sollte mit dem digitalen Pin verbunden werden.2am Arduino. Verbinden Sie außerdem die VCC- und GND-Pins des Relais mit den 5V und GND des Arduinos. Schließlich schließen Sie die AC-Glühbirne gemäß den Spezifikationen des Relais an, um einen sicheren Betrieb zu gewährleisten.

Codebeispiele & Anleitung

Im Einrichtungsprozess des Programms initialisieren wir die serielle Kommunikation und richten den Relais-Pin ein. Der IdentifikatorRECV_PINist eingestellt auf11, wo der Signalausgang des Infrarotempfängers angeschlossen ist. Dies ermöglicht es uns, Daten von der Fernbedienung zu empfangen.

void setup() {
  Serial.begin(9600);
  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 beginning
}

In der Schleifenfunktion überprüfen wir kontinuierlich eingehende Signale von der Fernbedienung. Wenn ein Signal erkannt wird, wird der Wert decodiert und die entsprechende Aktion basierend auf der gedrückten Taste ausgeführt.

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX); // Print the received value
    robojaxValidateCode(results.value); // Validate the code
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

DierobojaxValidateCodeDie Funktion überprüft den empfangenen Code mit bekannten Werten für die Fernbedienung. Je nachdem, welche Taste gedrückt wird, führt sie die entsprechende Aktion über das Relais aus.

void robojaxValidateCode(int cd) {
  if (type == 'W' && !PCB) {
    // Check White remote codes
    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
      }
    }
  }
}

In dieser Funktion prüft der Code, ob die gedrückte Taste den definierten Array-Werten entspricht. Wenn eine Übereinstimmung gefunden wird, ruft er dierelayActionFunktion, um das Relais ein- oder auszuschalten, abhängig von der gedrückten Taste.

Demonstration / Was zu erwarten ist

Nachdem Sie die Verkabelung abgeschlossen und den Code hochgeladen haben, können Sie Ihre Infrarotfernbedienung verwenden, um die AC-Birne zu steuern. Drücken Sie die vorgesehenen Tasten auf der Fernbedienung, und das Relais sollte die Birne entsprechend aktivieren oder deaktivieren. Stellen Sie sicher, dass Sie jede Taste testen, um ihre Reaktion zu sehen (im Video um 5:00).

Videoinhaltsverzeichnisse

  • 00:00 Start
  • 00:49 Einführung
  • 02:00 Verdrahtung und Anschluss
  • 05:27 Arduino-Code erklärt
  • 09:51 Demonstration zur Steuerung einer AC-Glühbirne mit verschiedenen Fernbedienungen
  • 13:13 Verwenden Sie Ihre TV-Fernbedienung, um die AC-Glühbirne zu steuern.

Bilder

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

Dinge, die Sie vielleicht brauchen

Ressourcen & Referenzen

Noch keine Ressourcen vorhanden.

Dateien📁

Keine Dateien verfügbar.