Attention ne jamais piloter un relais directement branché sur une carte Arduino

Attention ne jamais piloter un relais directement branché sur une carte Arduino

Piloter un relais avec un Arduino

Cet article est une partie d’un projet plus global de domotique qui sera abordé plus tard. Il sera par exemple utilisé dans la réalisation d’une interface de régulation pour le chauffage central.

Pourquoi avoir envie de piloter un relais ? C’est simple, la tension sur les pins I/O de votre Arduino est de 5V, un peu limite quand on sait que la tension de l’appareillage électrique de votre maison est de 240V, voire 400V si vous disposez du triphasé.

Pour simplifier à l’extrême, on va dire qu’il existe deux grandes familles de relais :

  • les relais mécaniques : une bobine (circuit de commande) est mise sous tension et un contact mécanique est enclenché (circuit de puissance). C’est le moins cher des deux types.
  • les relais statiques : on ne met plus sous tension une bobine, mais un composant électronique comme un opto-coupleur (faible ampérage) qui lui-même commandera un autre composant électronique pour le circuit de puissance (remplace le contact mécanique) comme un triac, un thyristor, … Il est plus cher mais dispose d’une excellente durée de vie comme il n’y a pas d’éléments mécaniques. Il est par exemple utilisé branché à une résistance chauffante en régulation de température. Un article traite de la façon de connecter les relais statiques.

Les relais sont utilisés très régulièrement, par exemple pour démarrer un moteur, commander une prise, une lumière, réguler le chauffage, … Dans mon cas, je l’utiliserais dans le futur pour activer le chauffage si la température ambiante est inférieure à une certaine valeur. Pour mémoire nous avons vu comment récupérer la température ambiante dans un précédent article. Dans l’immédiat nous utiliseront un simple bouton poussoir pour activer/désactiver le relais. Et nous prendrons également un relais mécanique pour sont coût.

Ce dont nous aurons besoin au minimum pour ce tutoriel :

  • Votre Arduino
  • Un relais 5V
  • Un transistor 2N2222
  • Une diode de roue libre 1N4004
  • Une résistance 2.2kΩ
  • Une résistance 10kΩ

Ce qui est annexe pour tester le montage :

  • Un interrupteur
  • Une résistance 10kΩ
  • Une Led + sa résistance pour « afficher » l’état du relais

Le relais et l’Arduino

Il y a des choses importantes à savoir, sinon ça ne serais pas marrant ! Une bobine de relais demande un certain ampérage, parfois important. Les sorties Arduino sont données à 40mA maxi, voire 20mA conseillé, donc on ne pilotera pas directement la bobine avec la sortie sous peine de griller notre carte… Il y a deux possibilités, soit nous utilisons une alimentation extérieure pour piloter la carte, soit nous utilisons la pin VIN. Tout dépend de ce que vous voulez faire, si vous avez plusieurs relais, il faudra surement utiliser une alimentation extérieure, si vous en avez un faible nombre, vous pourrez probablement utiliser la pin VIN. Pourquoi probablement, car l’ampérage de VIN n’est pas donné et que l’ampérage nécessaire par les relais se calcule.

L’ampérage de VIN dépend de votre source d’alimentation de la carte. Si vous êtes en USB, vous aurez à disposition de 500mA (limité par votre ordinateur) moins environ 30mA nécessaire au fonctionnement de l’Arduino moins ce que vous pourrez avoir sur les autres sorties. Si vous êtes alimenté via un transfo, c’est le même calcul en fonction de la puissance de votre transfo. Si c’est une pile, vérifiez l’ampérage !

Tout ça pour dire que l’on ne pilotera pas directement notre relais. Nous piloterons donc un transistor qui lui-même pilotera le relais. Le transistor agit en quelque sorte comme un relais, mais il consomme beaucoup moins de courant, cependant il ne pourrait pas supporter le 240V.

Le montage

Le transistor

Comme dit précédemment, nous piloterons le transistor 2N2222 directement avec la sortie Arduino. Nous utiliserons la broche du transistor nommé « Base ». Entre la sortie et le transistor, nous mettrons en série une résistance de 2.2kΩ (R1). La broche nommée « émetteur » du transistor sera mis à la terre et le « collecteur » sera reliée au relais.

Ensuite, entre la résistance et la base, nous mettrons une résistance de 10kΩ (R2) par mesure de sécurité. Si quelque chose vient à se détraquer, notre relais restera désactivé.

Le relais

Une des bornes du relais sera relié au 5V de VIN, l’autre sera donc reliée au collecteur. Dans la liste des fournitures, j’ai indiqué qu’il fallait une diode de roue libre. Cette diode sera montée en parallèle de la bobine, cathode montée sur la borne positive.

La diode de roue libre est très importante pour la durée de vie de vos composants. Comme nous l’avons vu précédemment, un relais est composé d’une bobine, autrement appelé inductance en électronique. Lorsque l’on coupe brutalement une inductance, une surtension apparait. La diode de roue libre permet de créer une « boucle infinie » qui permet d’évacuer cette surtension dans la bobine elle-même jusqu’à ce qu’elle disparaisse. Voici comment ça se passe :

Attention ne jamais piloter un relais directement branché sur une carte Arduino
Attention ne jamais piloter un relais directement branché sur une carte Arduino

Programme

Là, y’a pas plus simple ! On lit l’état d’une entrée, au front montant si la sortie est désactivée, on l’active et inversement. Voila ce que ça donne :

#define B_POUSSOIR 2
#define RELAIS 12

//Déclaration des variables
int memoireBp = LOW; //Mémoire du bouton poussoir
int etatBp = LOW; //Etat actuel du PB
int etatRelais = LOW; //Etat du relais

void setup() {
//On initialise les entrées/sorties
pinMode(B_POUSSOIR, INPUT);
pinMode(RELAIS, OUTPUT);
digitalWrite(RELAIS, etatRelais); //On écrit l'état du relais

}

void loop() {
//Récupération de l'état actuel du BP
etatBp = digitalRead(B_POUSSOIR);

//Si l'état est différent de la mémoire et qu'il est à HIGH (Front montant)
if(etatBp != memoireBp && etatBp == HIGH) {
//On inverse l'état du relais
if(etatRelais == HIGH) {
etatRelais = LOW;

} else {
etatRelais = HIGH;
}

//On écrit l'état du relais
digitalWrite(RELAIS, etatRelais);

}

//On conserve l'état du bouton
memoireBp = etatBp;
}

One comment

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *