Infrarouge IR: Module de relais électronique sans fil multicanaux (8 canaux) avec Arduino

Objectifs

  • Savoir utiliser une carte relais
  • Savoir exploiter plusieurs touches d’une télécommande IR
  • Savoir utiliser un récepteur/émetteur IR avec Arduino
  • Savoir commander plusieurs appareils sans fil indépendants
  • Etc.

Fonctionnement

Le mini-projet dédié au contrôle  d’une carte relais 8 canaux en utilisant une télécommande infrarouge (IR). L’émetteur (la télécommande) permet de contrôler d’une façon indépendante la mise en marche ou en arrêt de l’un ou l’ensemble des relais. Nous utiliserons des LED alimentées à 5V afin d’observer l’état des relais. On peut également utiliser une charge AC/DC (Exemples : Monteur AC/DC, lampe, ventilateur, chauffage électrique, etc.) à la place d’une LED.

Émetteur IR ou télécommande

Nous avons utilisé une télécommande constituée de 21 boutons (7×3). Uniquement 8 boutons (« 1 » à « 8 ») seront effectivement utilisés pour le contrôle des relais. Ci-dessous le tableau des codes de la télécommande :

code télécommande IR 21 touches

Tableau commande des relais

Relais Touche Code
Canal 1 « 1 » 0xFF30CF
Canal 2 « 2 » 0xFF18E7
Canal 3 « 3 » 0xFF7A85
Canal 4 « 4 » 0xFF10EF
Canal 5 « 5 » 0xFF38C7
Canal 6 « 6 » 0xFF5A5
Canal 7 « 7 » 0xFF42BD
Canal 7 « 8 » 0xFF4AB5

Récepteur IR

Carte relais

La carte relais est composée de 8 relais de puissance avec l’électronique de commande. Consulter le projet ci-dessous pour plus de détails.

Mode de commande des relais

Chaque touche de la télécommande permet la mise en marche ou l’arrêt du canal correspondant. L’appui sur la touche inverse l’état du relais, puis garde en mémoire l’état actuel. Ci-dessous un exemple et l’extrait du code Arduino consacré à la touche « 1 ».

  • Si l’état précédent est égal à« 0 », le relais il passe à « 1 » puis il maintient la valeur « 1 »
  • Si l’état précédent est égal à« 1 », le relais il passe à « 0 » puis il maintient la valeur « 0 »
...
case 0xFF30CF: // Canal 1

if (Chan_1_etat==0)
{
// Mise en arrêt du relais (canal 1)
digitalWrite(Chan_1, LOW);

// Initialisation de l'état
Chan_1_etat=1;
}
else
{
// Mise en marche du relais (canal 1)
digitalWrite(Chan_1, HIGH);

// Initialisation de l'état
Chan_1_etat=0;
}
break;

case 0xFF18E7: // Canal 2
...

Programme Arduino

#include "IRremote.h"


// Numéro du pin sortie du récepteur
long int res_val;
const int receiver = 11;

// Indicateurs des états des cannaux (logique négative)
int Chan_1_etat=1;
int Chan_2_etat=1;
int Chan_3_etat=1;
int Chan_4_etat=1;
int Chan_5_etat=1;
int Chan_6_etat=1;
int Chan_7_etat=1;
int Chan_8_etat=1;

// Liaison Arduino-Relais des 8 cannaux
const int Chan_1 = 2;
const int Chan_2 = 3;
const int Chan_3 = 4;
const int Chan_4 = 5;
const int Chan_5 = 6;
const int Chan_6 = 7;
const int Chan_7 = 8;
const int Chan_8 = 9;

// Déclaration d'un objet IRrecv
IRrecv irrecv(receiver);
decode_results results;

void setup()
{
// Délaration des canaux en sorties
pinMode(Chan_1, OUTPUT);
pinMode(Chan_2, OUTPUT);
pinMode(Chan_3, OUTPUT);
pinMode(Chan_4, OUTPUT);
pinMode(Chan_5, OUTPUT);
pinMode(Chan_6, OUTPUT);
pinMode(Chan_7, OUTPUT);
pinMode(Chan_8, OUTPUT);

// Init du récepteur
irrecv.enableIRIn();

// Initialisation des canaux
digitalWrite(Chan_1, HIGH);
digitalWrite(Chan_2, HIGH);
digitalWrite(Chan_3, HIGH);
digitalWrite(Chan_4, HIGH);
digitalWrite(Chan_5, HIGH);
digitalWrite(Chan_6, HIGH);
digitalWrite(Chan_7, HIGH);
digitalWrite(Chan_8, HIGH);
}

void loop()
{
// Lecture de la télécommande
if (irrecv.decode(&results))
{
// Récupération du code
res_val = results.value;

// Commmande des cannaux
ChanCmd(res_val);

// Réception de la nouvelle valeur
irrecv.resume();
}
}

void ChanCmd(long Chan_code)
{
switch(res_val)
{
case 0xFF30CF: // Canal 1

if (Chan_1_etat==0)
{
// Mise en arrêt du relais (canal 1)
digitalWrite(Chan_1, LOW);

// Initialisation de l'état
Chan_1_etat=1;
}
else
{
// Mise en marche du relais (canal 1)
digitalWrite(Chan_1, HIGH);

// Initialisation de l'état
Chan_1_etat=0;
}
break;

case 0xFF18E7: // Canal 2

if (Chan_2_etat==0)
{
digitalWrite(Chan_2, LOW);
Chan_2_etat=1;
}
else
{
digitalWrite(Chan_2, HIGH);
Chan_2_etat=0;
}
break;

case 0xFF7A85: // Canal 3

if (Chan_3_etat==0)
{
digitalWrite(Chan_3, LOW);
Chan_3_etat=1;
}
else
{
digitalWrite(Chan_3, HIGH);
Chan_3_etat=0;
}
break;

case 0xFF10EF: // Canal 4

if (Chan_4_etat==0)
{
digitalWrite(Chan_4, LOW);
Chan_4_etat=1;
}
else
{
digitalWrite(Chan_4, HIGH);
Chan_4_etat=0;
}
break;

case 0xFF38C7: // Canal 5

if (Chan_5_etat==0)
{
digitalWrite(Chan_5, LOW);
Chan_5_etat=1;
}
else
{
digitalWrite(Chan_5, HIGH);
Chan_5_etat=0;
}
break;

case 0xFF5AA5: // Canal 6

if (Chan_6_etat==0)
{
digitalWrite(Chan_6, LOW);
Chan_6_etat=1;
}
else
{
digitalWrite(Chan_6, HIGH);
Chan_6_etat=0;
}
break;

case 0xFF42BD: // Canal 7

if (Chan_7_etat==0)
{
digitalWrite(Chan_7, LOW);
Chan_7_etat=1;
}
else
{
digitalWrite(Chan_7, HIGH);
Chan_7_etat=0;
}
break;

case 0xFF4AB5: // Canal 8

if (Chan_8_etat==0)
{
digitalWrite(Chan_8, LOW);
Chan_8_etat=1;
}
else
{
digitalWrite(Chan_8, HIGH);
Chan_8_etat=0;
}
break;
}
}

Téléchargement du programme

Photos du projet

Module de relais électronique sans fil multicanaux avec Arduino (1)

Module de relais électronique sans fil multicanaux avec Arduino (3)

Module de relais électronique sans fil multicanaux avec Arduino (2)

Vidéo de démonstration

Tout les projets microcontrôleur