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.

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 :

Schéma diode de roue libreSchéma diode de roue libre

Les autres composants

L’interrupteur va nous permettre d’activer/désactiver notre relais, elle sera donc branché sur une entrée. Nous utiliserons la résistance de 10KΩ comme résistance de pull-down.

La led et sa résistance seront en parallèle du relais afin de visualiser si notre relais est activé ou non. Nous entendrons un clic à l’activation, mais c’est plus pratique d’avoir une visualisation.

Petite aparté, la résistance se calcule selon la formule bien connue :  U = R * i U en Volt. R en ohms. i en ampères.

Par exemple, si ma led est donnée pour 20mA à 2V et que ma tension de circuit est 5V, il faudra faire : R = \frac{U}{i} Soit : R = \frac{5 - 2}{20 / 1000} = 150\Omega Vous prendrez la résistance ayant la valeur supérieure la plus proche.

Le schéma

Maintenant que l’on a bien dissocié toutes les fonctions, voila le schéma de branchement et de câblage.

Schéma de câblage du relaisSchéma de câblage du relais Représentation de câblage du relaisReprésentation de câblage du relais

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 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#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;
}