realisations:arduino:carte_relais

Carte de relais

15/2012 : j'ai trouvé sur un site d'enchères en ligne des cartes de relais toute prête pour piloter une source de courant fort tel que des prises électrique (220 V) par exemple à l'aide d'une commande en 5 V. Ainsi, allumer ou éteindre une lampe est un jeu d'enfant !

Ces cartes intègrent sur un même circuit imprimé un relais et une diode dite de roue libre permettant de protéger l'arduino des surtensions apparaissant lors du pilotage du relais ainsi qu'un bornier pour brancher des fils electriques.

Carte 2 relais
Agrandir
Carte 2 relais

La tension d'alimentation de la carte est de 5V comme celle de l'arduino. Il suffit de brancher directement les sorties numériques du microcontrôleur sur les pins d'entrée de la carte de relais pour ouvrir ou fermer le relais. Le montage final est le suivant :

  • Alimentation +5V et masse : fils rouge et noir;
  • Pilotage des 2 relais, un fil pour chaque relais : fils jaune et vert.
Schéma de cablage d'une carte 2 relais
Agrandir
Schéma de cablage d'une carte 2 relais

Pour piloter l'ensemble, j'ai developpé un script perl coté serveur associé à un sketch Arduino :

  • l'arduino écoute sur le port serie et exécute les ordres émis : basculer à 0 ou 1 la sortie indiquée;
  • coté serveur, à partir des arguments fournit au script perl, l'ordre d'allumer ou éteindre une sortie est transmis à l'arduino.

L'ensemble du code est publié sur mon gitlab : https://gitlab.com/coliss86/arduino-controller

La connection à l'arduino s'effectue par un port serie émulée via le port USB. Au branchement sur un ordinateur, un device /dev/ttyACM0 est créé. Pour s'y connecter, il faut utiliser une simulateur de console série, comme picocom :

picocom /dev/ttyACM0 -b 9600

Note : taper Ctrl + A puis Ctrl + X pour sortir.

Comme pour un shell, un prompt invite à la saisie. Pour lancer l'aide, taper h.

> h
    ___          _       _
   / _ \        | |     (_)
  / /_\ \_ __ __| |_   _ _ _ __   ___
  |  _  | '__/ _` | | | | | '_ \ / _ \
  | | | | | | (_| | |_| | | | | | (_) |
  \_| |_/_|  \__,_|\__,_|_|_| |_|\___/

  Build Feb  7 2015 : 14:10:41

Help
Command available :
      <pin number [2-9]>=<0,1>
      h - help
      s - i/o status

Pour connaitre l'état des sorties actuelles, taper s :

> s
I/O Status :
  2 => 0
  3 => 1
  4 => 0
  5 => 0
  6 => 0 (R)
  7 => 0 (R)
  8 => 0 (R)
  9 => 0 (R)

Ici, les sorties de 2 à 9 sont listées, elles sont toutes à l'état bas (0) sauf la n°3 qui est à l'état haut (1). Pour mes besoins, les sorties des relais devaient être inversées. Les sorties notées (R) sont configurées de la sorte.

Pour activer/désactiver une sortie, il faut donner le numéro de la sortie suivi du symbole = puis de l'état souhaité : 1 ou 0. Exemple : activation de la sortie n°2 :

> 2=1
  OK

Vérification de l'état :

> s
I/O Status :
  2 => 1
  3 => 1
  4 => 0
  5 => 0
  6 => 0 (R)
  7 => 0 (R)
  8 => 0 (R)
  9 => 0 (R)

Le script perl offre les mêmes fonctionnalités que ci dessus tout en masquant la communication via le port serie et la transmission des ordres.

Utilisation :

./pin.pl
./pin.pl [-p dev] (<pin> <state> | status)
        <dev>   - device [/dev/ttyACM0]
        status  - retrieve the current status of the outputs
        <pin>   - pin number
        <action> - low|off / high|on / toggle

Afficher le statut des sorties :

./pin.pl status
Status
  2 => 1
  3 => 0
  4 => 0
  5 => 0
  6 => 0 (R)
  7 => 0 (R)
  8 => 0 (R)
  9 => 0 (R)

Inversion de l'état d'une sortie :

./pin.pl 2 toggle

Une fois l'ensemble opérationnel, je me suis rendu compte que l'arduino subissait un RESET à chaque fois que je me connectais dessus, c'est à dire à chaque lancement d'une connexion série. Cela est lié à la manière dont l'arduino UNO gère les connexions en USB : lors de l'ouverture d'une connexion serie, le signal DTR est émis pour établir les flux. Ce signal est également utilisé par l'arduino pour qu'il reboote tout seul afin de passer en mode écoute pour recevoir un nouveau sketch compilé. En phase de développement, c'est très pratique. Par contre, dans mon cas, c'est génant car à chaque connexion, le RESET remet à zero toutes les sorties à l'état haut, ce qui va provoquer une extinction de toutes les lampes.

Parmis les solutions disponibles, j'ai choisi de connecter un condensateur de 10 μF entre la broche RESET et GND. J'ai également mis un interrupteur pour faciliter la désactivation ou non du auto reset : en phase de dev, l'auto reset est activé (comportement natif), en phase de run, le condensateur est actif.

Désactivation du RESET automatique
Agrandir
Désactivation du RESET automatique

07/2012 : pour faciliter les manipulations, j'ai tout rassemblé dans un même boitier electrique. Pour gagner de la place dans cet espace exigü, j'ai soudé un câble USB directement sur les broches du port USB de la carte permettant ainsi de ne plus devoir utiliser le gros connecteur USB.

Arduino et carte relais
Agrandir
Arduino et carte relais

J'ai branché la webcam dessus pour l'allumer et l'éteindre en fonction de lever et du coucher du soleil.

04/2016 : l'Arduino étant désormais sur un support en bois, j'ai mis dans une boîte électrique le relais pour l'éloigner du circuit basse tension et améliorer l'isolation pour y faire passer du 220 V. D'un coté, une prise électrique mâle est réliée au bornier du relais et en ressort une prise femelle à destination de l'apareil à brancher. Le pilotage est assuré par 2 fils basse tension reliés à l'Arduino (non présents sur la photo ci-dessous).

Boitier électrique
Agrandir
Boitier électrique
  • realisations/arduino/carte_relais
  • Dernière modification : 2024/09/30 21:38