samedi 24 octobre 2020

Télécommande de Relais par Infra-Rouge

 

Télécommande de Relais par Infra-Rouge

 

Récemment j'ai répondu à une demande d'un HIFI-naute désirant déclencher l'allumage d'un ampli à l'aide d'une télécommande infrarouge.

Le but du projet est de regrouper dans le même boîtier :

  • un miniDSP (Digital Signal Processor)
  • son alimentation 12V
  • un amplificateur de puissance
  • son alimentation (24V ou plus)

La télécommande est celle du miniDSP. Le but est clair : allumer et éteindre l'amplificateur et le miniDSP en même temps, et ceci avec la même télécommande, celle du miniDSP.

L'idée est d'ajouter un deuxième récepteur infrarouge, avec bien entendu un ARDUINO pour recevoir les ordres de la télécommande et piloter un relais capable de commuter le 230V de l'alimentation de l'amplificateur.

L'alimentation du miniDSP est sous tension permanente. Il est donc possible d'alimenter l'ARDUINO et le relais à l'aide de cette tension 12V.

Comme j'ai un projet analogue, je vais expliquer la réalisation d'un tel récepteur, avec beaucoup de détails car les amateurs de HIFI ne sont pas forcément des spécialistes en électronique et en programmation.

Cet article sera également une bonne base de lecture pour qui désire télécommander un appareil quelconque à l'aide d'un télécommande infrarouge.

1. Le schéma

Le schéma est réalisé à l'aide de KICAD.

Pour récupérer le projet voir plus bas :  6. Téléchargements.

1.1. Le microcontrôleur

La carte microcontrôleur utilisée est une ARDUINO NANO : 

Cette carte est directement connectable sur le port USB d'un PC pour le chargement du programme. Le connecteur USB peut aussi servir à alimenter la carte dans le montage final, si ce mode d'alimentation est choisi.

On peut également utiliser une carte UNO :

Celle-ci est beaucoup plus encombrante mais elle est équipée un JACK 5.5/2.1 pour son alimentation. Elle possède également des trous de fixation, ce qui n'est pas le cas de la NANO.

1.2. Le module infrarouge

Le récepteur infrarouge est un TSOP4838 :

Il ne faut pas s'inquiéter du fait que le sens du brochage ne soit pas celui du schéma. Seule l'implantation physique du composant sur la carte est importante.

1.3. L'alimentation

Ce montage est alimenté via un connecteur P2 mais on peut aussi utiliser une alimentation USB. J'ai prévu trois sources d'alimentation possibles, car ce montage peut être utilisé dans différentes situations :

  • en 5V USB
  • en 5V
  • en 12V ou plus

1.3.1. Alimentation USB

C'est le mode d'alimentation le plus simple : l'ARDUINO est alimenté par son connecteur USB. Dans ce cas la partie basse du schéma disparaît (P2 et JP1). Le relais doit être un modèle 5V.  La broche 2 du module relais sera reliée directement à la broche 5V de l'ARDUINO.

L'alimentation par USB peut être faite à l'aide d'un petit bloc secteur. Les chargeurs de téléphone sont plutôt déconseillés, car peu fiables sur le long terme. Je conseille une MeanWell SGA12E05-USB :

On raccordera tout simplement le bloc secteur à l'ARDUINO à l'aide d'un cordon USB adapté (celui qui est livré avec l'ARDUINO convient très bien).

On peut aussi utiliser un bloc secteur JACK et remplacer le JACK par un connecteur miniUSB. La soudure est assez délicate et le sens de branchement doit être respecté.

1.3.2. Alimentation 5V ou 12V

Ce mode permet de se passer d'une alimentation supplémentaire et d'utiliser celle d'un appareil existant (DAC, amplificateur, etc.).

Un cavalier JP1 du schéma permet de faire le choix de la tension d'alimentation pour l'ARDUINO.

En 5V l'ARDUINO doit être alimenté par sa broche 5V. Le relais devra être un modèle 5V.

En 12V l'ARDUINO doit être alimenté par sa broche VIN. La carte embarque un régulateur 5V qui à partir de la tension présente sur VIN (minimum 7V) fournit le 5V nécessaire au microcontrôleur. Le relais devra être un modèle 12V.

L'alimentation en 5V ou 12V n'est une restriction absolue. L'ARDUINO NANO accepte jusqu'à 15V sur sa broche VIN. Le problème est que l'on ne trouvera pas de module relais acceptant une tension d'alimentation autre que 5V, 9V, 12V ou 24V.

Si la tension d'alimentation est de 24V on pourra adopter un module relais 24V et intercaler un régulateur linéaire du genre LM7812 pour alimenter l'ARDUINO en 12V par sa broche VIN et positionner le cavalier sur 12V :

 

On peut également intercaler un LM7805 pour l'alimenter en 5V par sa broche 5V et positionner le cavalier sur 5V.

Attention : si l'alimentation se fait en 12V, un mauvais positionnement du cavalier sur 5V serait destructeur pour l'ARDUINO.

1.4. Le module relais

Le relais est relié à l'aide d'un connecteur P1. Il s'agit d'un module que l'on peut trouver pour un prix modique :

Module relais

Il existe des modules dont l'entrée est protégée par un optocoupleur, parfaitement inutile dans notre cas, mais ce n'est pas gênant.

Il existe également deux types de modules, activables soit sur un niveau bas (0V) soit sur un niveau haut (5V). Certains possèdent un cavalier permettant de modifier ce choix. Dans notre cas, les deux types de relais conviennent car il suffira de modifier une constante dans le code fourni pour pouvoir accepter l'un ou l'autre.

Ces relais sont équipés de deux connecteurs :

  • connecteur d'entrée + alimentation
    • +VCC : 5V ou 12V
    • GND : la masse
    • entrée de commande
  • connecteur de puissance

Les 3 bornes du connecteur de puissance sont issues simplement des contacts du relais : NO (normalement ouvert) et NC (normalement fermé).

La charge à alimenter devra être connectée comme suit :

Le relais agit comme un interrupteur commandé. Il se place donc en série.

Les borniers de sortie de ces modules sont toujours des borniers à vis, par contre certains modules sont équipés de connecteurs d'entrée au pas de 2.54mm (comme le premier) ou de borniers à vis (comme le second).

2. Le code

Celui-ci est très simple :

#include <IRremote.h>

#define RECV_PIN    3
#define RELAY_PIN   4
#define RELAY_TYPE  LOW       // for a low level relay
//#define RELAY_TYPE  HIGH    // for a high level relay

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(115200);
  Serial.println("IR remote");
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, RELAY_TYPE == HIGH ? LOW : HIGH);
  irrecv.enableIRIn();
}

void loop()
{
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    if (results.value == 0x619EC03F) {
      Serial.println("Activate the relay");
      digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));
    }
    irrecv.resume();
  }
  delay(100);
}

Pour les non initiés ce programme doit paraître très court. Mais la majeure partie du code est situé dans la librairie IRremote et elle gère les principaux protocoles :

  • Nec
  • JVC
  • LG 
  • Denon
  • Mitsubishi
  • Panasonic
  • Sony
  • Sharp
  • Samsung
  • Sanyo
  • etc.

Il ne faut pas oublier non plus que le TSOP4838 n'est pas une simple diode infrarouge, c'est un circuit intégré intelligent, qui réalise une grande partie du travail.

Les broches de l'ARDUINO sont utilisées comme suit :

  • 3 : sortie du TSOP4838
  • 4 : broche de commande du relais

Il a été essayé avec succès avec la télécommande d'un récepteur satellite Metronic et également celle d'un téléviseur Samsung.

Pour adapter ce code à un relais activable par un niveau haut ou bas il suffit de déplacer le commentaire // :

// Commande par un niveau haut
//#define RELAY_TYPE  LOW       // for a low level relay
#define RELAY_TYPE  HIGH    // for a high level relay

// Commande par un niveau bas
#define RELAY_TYPE  LOW       // for a low level relay
//#define RELAY_TYPE  HIGH    // for a high level relay

Le code de la touche est 0x619EC03F dans le programme ci-dessus (0x indique au compilateur que le nombre est codé en hexadécimal). Il suffit de le remplacer par le code réel de la touche qui nous intéresse sur la télécommande à utiliser.

Si l'on active le moniteur série de l'IDE ARDUINO on verra apparaître le code transmis lorsque l'on appuie sur une touche de la télécommande. Il suffira de faire un copier coller dans le programme.

Comme on le voit le moniteur série est configuré avec une vitesse de 115200 baud (115200 bits par seconde).

3. Photo

Voici une photo du montage d'essai sur breadboard :

Lorsque l'on utilise un TSOP4838 deux solutions sont possibles :

  • souder la TSOP4838 en bord de PCB et le placer le PCB en face d'un trou de 4mm en face avant
  • utiliser 3 fils pour placer le TSOP4838 où on le désire derrière la face avant du boîtier, éloigné du PCB

Dans le premier cas, on peut fixer à l'aide de colle le TSOP4838 derrière la face avant.

Dans le deuxième cas, on peut utiliser un connecteur 3 broches afin que l'on puisse démonter le tout. Mais on peut aussi souder les fils à la carte, et rendre le TSOP4838 lui-même démontable :

Ici une fine lame d'acier souple collée derrière la face avant permet de maintenir le TSOP4838 en place.

4. Réalisation

On peut réaliser ce montage de différentes manières :

  • câblage volant
  • carte électronique
  • plaquette à pastilles

4.1. Câblage volant

Le câblage volant sera plus adapté si l'on utilise une carte ARDUINO UNO, car elle possède des trous de fixation. On prendra soin de choisir un module relais possédant des trous de fixation et on réalisera le câblage à l'aide de fils DUPONT (voir photo plus haut).

4.2. Carte électronique

Le dossier du projet (voir 6. Téléchargements) contient le schéma et l'implantation pour ceux qui souhaiteraient se lancer dans la réalisation d'un PCB :


Cette carte a des dimensions réduites : 36mm x 58mm. Quatre trous de fixation sont prévus.

On peut parfaitement faire réaliser une telle carte chez JLCPCB.

4.3. Plaquette à pastilles

Une plaquette à pastilles peut être utilisée également :

Un modèle 40mm x 60mm suffira.

Comme on le voit sur les photos des modules relais ci-dessus certains sont équipés de trous de fixation. Si ce n'est pas le cas de celui que l'on possède ou envisage d'acheter on peut prévoir un emplacement sur le PCB ou la plaquette à pastilles et le fixer par collage (colle chaude par exemple). Dans ce cas on prévoira une plaquette un peu plus grande : 50mm x 70mm, ou 60mm x 80mm.

5. IDE ARDUINO

Il vous faudra installer la bibliothèques ARDUINO suivante :
 
Elle est directement installable depuis l'IDE : menu Outils / Gérer les bibliothèques. Rechercher IRremote. Installer.

Dans votre IDE (arduino-cc 1.8.13 par exemple), dans le menu "Outils/Type de Carte" choisir "Arduino Nano". Dans le menu "Outils/Processeur" choisir "ATmega328p" ou "ATmega328p (old bootloader)".

Les débutants en ARDUINO trouveront tous les renseignements nécessaires à l'installation de l'IDE ARDUINO ici :

Téléchargement : https://www.arduino.cc/en/main/software

Installation du driver série pour la NANO : http://www.wch.cn/downloads/file/65.html?time=2020-10-24%2021:27:32&code=r6wDpWVGgoFf75iNx3b5a6gIa7zrbag4WzO9KjCQ

Un tutoriel : http://idehack.com/blog/tutoriel-arduino-le-logiciel-arduino-et-un-premier-upload-part-5/

6. Téléchargements

Pour télécharger le projet : https://bitbucket.org/henri_bachetti/ir-remote.git

Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

7. Conclusion

Ce montage peut être utilisé à diverses fins :

Ajouter une télécommande de mise en marche à un appareil existant n'en possédant pas (amplificateur, préamplificateur, éclairage, etc.). Dans ce cas il faudra ajouter une petite alimentation 5V ou 12V de quelques watts :

MeanWell IRM-03 3W

Pour un appareil sans boîtier comme une lampe par exemple on peut utiliser un petit boîtier plastique :

Combiplast CP-Z-77

Le TSOP4838 devra être placé à l'avant du boîtier face à une petite ouverture qui permettra le passage des ondes infrarouge. Prévoir également à l'arrière deux trous de passage du câble 230V et celui de l'alimentation de l'appareil à commander.

Il est possible d'envisager également de piloter plusieurs relais pour fabriquer un sélecteur d'entrées pour un préamplificateur audio par exemple. Dans ce cas il faudra bien entendu utiliser des relais à doubles contacts, que vous ne trouverez pas sous forme de module, à moins d'en utiliser deux par canal.

Je déconseille cependant d'utiliser des modules relais pour commuter des signaux audio. Leur qualité n'est pas à la hauteur. Des relais petit signaux à contacts en alliage d'argent sont hautement préférables :

PANASONIC TX2-12V

Cet article vous indiquera comment piloter des relais :

https://riton-duino.blogspot.com/2018/08/alimenter-un-relais-transistor.html

Dans le programme il suffira ensuite d'ajouter les pins utilisées pour les relais supplémentaires et de les piloter en fonction des codes de la télécommande.

Un exemple avec 3 relais :

#include <IRremote.h>

#define RECV_PIN    3
#define RELAY_PIN1  4
#define RELAY_PIN2  5
#define RELAY_PIN3  6
#define RELAY_TYPE  LOW       // for a low level relay
//#define RELAY_TYPE  HIGH    // for a high level relay

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(115200);
  Serial.println("IR remote");
  pinMode(RELAY_PIN1, OUTPUT);
  digitalWrite(RELAY_PIN1, RELAY_TYPE == HIGH ? LOW : HIGH);

  pinMode(RELAY_PIN2, OUTPUT);
  digitalWrite(RELAY_PIN2, RELAY_TYPE == HIGH ? LOW : HIGH);
  pinMode(RELAY_PIN3, OUTPUT);
  digitalWrite(RELAY_PIN3, RELAY_TYPE == HIGH ? LOW : HIGH);
  irrecv.enableIRIn();
}

void loop()
{
  if (irrecv.decode(&results)) {
    int actual;
    Serial.println(results.value, HEX);
    switch (results.value) {
      case 0x619EC03F:
        actual = digitalRead(RELAY_PIN1);
        Serial.print(actual == RELAY_TYPE ? "Turn OFF" : "Turn ON"); Serial.println(" the relay 1");
        digitalWrite(RELAY_PIN1, !actual);
        break;
      case 0x619E9867:
        actual = digitalRead(RELAY_PIN2);
        Serial.print(actual == RELAY_TYPE ? "Turn OFF" : "Turn ON"); Serial.println(" the relay 2");
        digitalWrite(RELAY_PIN2, !actual);
        break;
      case 0x619E08F7:
        actual = digitalRead(RELAY_PIN3);
        Serial.print(actual == RELAY_TYPE ? "Turn OFF" : "Turn ON"); Serial.println(" the relay 3");
        digitalWrite(RELAY_PIN3, !actual);
        break;
    }
    irrecv.resume();
  }
  delay(100);
}

On peut en ajouter encore suivant le même principe.

On peut également piloter un potentiomètre ALPS motorisé : 

ALPS RK27112MC
 

Pour cela il suffit d'un petit composant nommé L293D qui permettra de faire tourner le moteur dans les deux sens.

J'espère que cet article vous aura donné des idées.

7. Liens utiles

D'autres articles à propos de relais :

Piloter un relais. Transistor unipolaire ou bipolaire ?

Piloter des Relais ou des MOSFEts à l'aide d'un Module MCP23008 ou MCP23017

Modules à relais DIY


Cordialement
Henri


Aucun commentaire:

Enregistrer un commentaire