Code de recherche

Contrôlez une ampoule AC avec n'importe quelle télécommande infrarouge à l'aide d'un Arduino et d'un relais.

Contrôlez une ampoule AC avec n'importe quelle télécommande infrarouge à l'aide d'un Arduino et d'un relais.

Dans ce tutoriel, nous allons apprendre à utiliser une télécommande infrarouge pour faire fonctionner une ampoule à courant alternatif via un Arduino et un module de relais. Ce projet implique le décodage des signaux de la télécommande et leur utilisation pour contrôler le relais, qui à son tour allumera et éteindra l'ampoule à courant alternatif. À la fin de ce tutoriel, vous serez capable d'utiliser n'importe quelle télécommande infrarouge pour contrôler votre luminaire.

Nous utiliserons un récepteur infrarouge pour capturer les signaux de la télécommande, et l'Arduino interprétera ces signaux pour effectuer des actions spécifiques. Le code fourni vous permettra de choisir le type de télécommande (noire ou blanche) et si vous utilisez un PCB ou un module nu pour le récepteur. Assurez-vous de regarder la vidéo associée pour des détails et des clarifications supplémentaires (dans la vidéo à 0:00).

Matériel expliqué

Pour ce projet, les principaux composants incluent la carte Arduino, un module récepteur infrarouge et un module relais. Le récepteur infrarouge est responsable de la capture des signaux de la télécommande et de leur envoi à l'Arduino. Le module relais agit comme un interrupteur pour contrôler l'ampoule AC, permettant de l'allumer et de l'éteindre en fonction des signaux reçus.

Module de relais à déclenchement haut niveau 5V
Module de relais à déclenchement par niveau haut 5V

Le récepteur infrarouge fonctionne généralement à une fréquence de 38 kHz et peut détecter des signaux à une distance d'environ 10 à 15 mètres. Une fois que l'Arduino reçoit le signal, il le décode et utilise le relais pour contrôler l'alimentation de l'ampoule.

Instructions de câblage

IR_remote_AC_relay_wiring

Commencez le câblage en connectant le module récepteur infrarouge à l'Arduino. La broche VCC du récepteur se connecte à la broche 5V de l'Arduino, et la broche de masse se connecte à une broche GND. La broche de signal du récepteur infrarouge doit être connectée à une broche numérique.11sur l'Arduino.

Ensuite, connectez le module de relais. La broche de contrôle du relais doit être câblée à la broche numérique.2sur l'Arduino. Connectez également les broches VCC et GND du relais aux 5V et GND de l'Arduino, respectivement. Enfin, raccordez l'ampoule AC au relais selon les spécifications du relais pour assurer un fonctionnement en toute sécurité.

Exemples de code et guide étape par étape

Dans la phase de configuration du programme, nous initialisons la communication série et configurons la broche de relais. L'identifiantRECV_PINest réglé à11, c'est là où la broche de signal du récepteur infrarouge est connectée. Cela nous permet de recevoir des données de la télécommande.

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
}

Dans la fonction loop, nous vérifions en continu les signaux entrants provenant de la télécommande. Lorsqu'un signal est détecté, la valeur est décodée, et l'action correspondante est effectuée en fonction de la touche pressée.

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);
}

LerobojaxValidateCodeLa fonction vérifie le code reçu par rapport aux valeurs connues pour la télécommande. En fonction de la touche pressée, elle exécutera l'action correspondante en utilisant le relais.

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
      }
    }
  }
}

Dans cette fonction, le code vérifie si la touche pressée correspond aux valeurs définies dans le tableau. Si une correspondance est trouvée, il appelle lerelayActionfonction pour activer ou désactiver le relais, en fonction de la touche pressée.

Démonstration / À quoi s'attendre

Après avoir terminé le câblage et téléchargé le code, vous pouvez utiliser votre télécommande infrarouge pour contrôler l'ampoule AC. Appuyez sur les touches désignées de la télécommande, et le relais devrait activer ou désactiver l'ampoule en conséquence. Assurez-vous de tester chaque touche pour voir sa réponse (dans la vidéo à 5:00).

Horodatages vidéo

  • 00:00 Début
  • 00:49 Introduction
  • 02:00 Câblage et connexion
  • 05:27 Explication du code Arduino
  • 09:51 Démonstration de la commande d'ampoule AC avec différentes télécommandes
  • 13:13 Utiliser la télécommande de votre télévision pour contrôler l'ampoule de climatisation

Images

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

Ce dont vous pourriez avoir besoin

Ressources et références

Aucune ressource pour le moment.

Fichiers📁

Aucun fichier disponible.