commander des relais 220V avec arduino Nano et bluetooth

commander des relais 220V avec arduino Nano et bluetooth

Commander deux relais 220 V à partir d’un arduino Nano, avec un téléphone android connecté en bluetooth : c’est possible pour moins de 10 €. Voici le tutoriel complet.

Cet article est l’aboutissement d’un travail d’essais et recherches relatés dans des articles précédents :

Maintenant je fais la synthèse pour une réutilisation dans d’autres configurations.

Avant toute chose, RAPPEL : on travaille avec du 220V et les risques sont réels !

Attention Danger électrique

Commander deux relais 220V avec un arduino Nano

Le schéma de connexions :

relais arduino 5V - 220V lampes

Les photos du montage :

J’ai enfermé toutes les connexions 220 V dans une boîte en plastique. L’arduino (puis le module bluetooth) sont à l’extérieur de la boîte.

Le montage sécurisé dans une boîte

Photo du premier essai :

J’ai préféré brancher l’arduino sur une alimentation USB spécifique (pas mon ordinateur) et je me suis installée sur la terrasse. Noter que la boîte en plastique sécurise bien l’installation 220V.

Relais 220V Essai sécurisé

Le sketch arduino :

test-fanch-relais-new.ino, un sketch qui allume une lampe lorsque le signal envoyé par l’arduino est LOW.

Commander par bluetooth et smartphone Android

Le schéma de montage (côté faible tension – le cablage haute tension n’est pas modifié) est le suivant :

Schéma arduino Nano - relais 220V et bluetooth HC-05

Quant au sketch, c’est celui que j’ai utilisé précédemment avec deux relais plus gros, mais il y a une différence essentielle : l’allumage est réalisé lorsque l’arduino envoie un signal LOW et non pas HIGH comme avec les autres relais.

Notre nouvel algorithme est donc légèrement différent :

bool up = true;          // pas d'ordre de montée
bool down = true;        // pas d'ordre de descente

Si up est false ou down est false (il faut bouger le store)

   si up est false ET down est false 
     on a un big problème, le moteur va devenir fou
   sinon
     allumer ou éteindre selon la valeur de up ou de down

Le sketch qui fonctionne est celui ci : Relais-BT-V1-2016-06-05.ino

Le résultat :

Lorsque j’appuie sur le bouton « UP » de mon smartphone,

Le bouton "HAUT" est appuyé

la lampe « UP » s’allume !

La lampe "UP" est allumée

Et si j’allume les deux boutons à la fois, il ne se passe rien, tout comme s’ils sont tous deux éteints. Tout fonctionne donc correctement.

Et maintenant ?

En cas d’utilisation d’un autre modèle de relais, bien vérifier si c’est un signal LOW ou HIGH qui génère l’allumage.

Pour une utilisation définitive, il faudra réaliser un boîtier plus compact et plus sécurisé. On pourra s’inspirer des plans suivants :

On en profitera pour admirer cette belle boîte qui permet de transporter un arduino Uno et un breadboard sur 3dhubs.

Tout est prêt maintenant pour que Fanch puisse mettre son store chez lui en tant que prototype !

relais 5V / 220 V pas cher pour arduino

relais 5V / 220 V pas cher pour arduino

J’ai acheté quelques relais 220 V pa chers (2.11 €, livraison comprise) pour arduino. Une commande 5V en provenance de l’arduino déclenche l’ouverture ou la fermeture d’un contact 220V.

Description des relais achetés

Je les ai achetés à la boutique « Universal Color » sur Amazon.fr, au prix de 2.11 € l’unité (voir le produit ici). Le seul inconvénient est que le délai de livraison est de l’ordre de 3 semaines. J’ai vu ensuite qu’on trouve également ce relais double chez TiptopBoard ici pour un prix plus élevé, mais une livraison très rapide. L’avantage de TipTopBoards est qu’il y a un tutoriel d’utilisation, en général bien fait, pour la plupart des produits vendus. Malheureusement dans ce cas, le tutoriel n’est pas précis du tout…

Les relais sont des songle (R) srd 05VDC-SL-C. J’ai trouvé différentes sources d’information, mais aucune qui paraisse complète et fiable… :

How to Set Up a 5V Relay on the Arduino

Et aussi :

  • en espagnol, avec un schéma bien fait, pour les raspberry Pi ou arduino, ici
  • en français, mais pour alimenter des leds 5V, dans ce tutoriel.
  • Voir aussi cet article en anglais, qui semble suggérer que l’isolation n’est correcte qu’en enlevant le cavalier qui relie JD-VCC et VCC
  • La description sur ce site de vente en ligne est bien faite et claire. Un site à garder en mémoire car il parait bien documenté, avec des tarifs raisonnables.Un exemple avec des leds dans cet article en espagnol aussi.
  • et enfin, cet article qui paraît bien fait, en anglais, qui explique comment brancher une ampoule et la commander par un arduino.

Premiers essais pour comprendre

Comme je veux utiliser ces relais pour des applications 220V, il faut absolument que je comprennes comment fonctionnent ces relais et surtout comment on assure l’isolation totale entre les parties 220V et les parties basses tension.

Pour comprendre le principe général, je teste d’abord avec deux leds alimentée en 5V à partir de l’arduino Nano selon le schéma de connexion suivant (résistance 330 à 1000 ohm) :

relais vers deux led 5V

Le sketch utilisé est une variante du sketch utilisé dans un autre article sur des relais 220V plus chers (arduino et relais pour commander du 220 V).

/*
 * test moteur fanch 4/6/2016 
 * 
 * !!! NE PAS UTILISER AVEC UN MOTEUR
 * --- les deux relais peuvent être sur 1 simultanément dans cette version
 * !!!
 * 
 * Nouveaux relais pas chers
 * Le relais met sur ON lorsqu'il ne reçoit pas d'impulsion....
 * arduino Nano R3
 * 
 */
const int montee = 3;    // broche 3 pour le relais "montée" K1 / led Rouge
const int descente = 4 ;  // broche 4 pour le relais "descente" K2 / led verte

bool up = false;          // pas d'ordre de montée
bool down = false;        // pas d'ordre de descente

char etat = 'S'; // single quote, it's not a constant...



void setup() {
  // initialize digital pin 13 as an output.
  pinMode(montee, OUTPUT);
  pinMode(descente,OUTPUT);

  // démarrer le port série
  Serial.begin(57600);
  Serial.println("Setup fait" );  

  // vider le buffer RX
  // while (Serial.available())  Serial.read();  
}

// the loop function runs over and over again forever
void loop() {

    Serial.println("------------------" );
    Serial.print("UP " );
    action_store(true, false);   // single quote for string

    Serial.print("DOWN " );
    action_store(false, true); // single quote for string
    
    Serial.print("BIG PROBLEME " );
    action_store(true, true);    // single quote for string

    Serial.print("Stand By " );
    action_store(false, false); // single quote for string  
 
}


void action_store(bool sens1, bool sens2) {

  bool red = sens1 ;
  bool green = sens2 ;
  Serial.print(" | RED : ");
  Serial.print(red);
  Serial.print(" | GREEN : ");   
  Serial.println(green);
   
  motor_go(montee, sens1) ; 
  motor_go(descente, sens2) ;
  
  delay(3000) ;   
}

void motor_go(int sens, bool action ) {
    
    digitalWrite(sens, action);     // actionne le moteur "sens"
    etat = sens ;
}


Ce sketch m’a permis de comprendre comment brancher la sortie des relais :

relais-sorties

C = Common, c’est l’arrivée de courant pour l’équipement à allumer ou éteindre. Dans ce schéma en 5V, mais peut aller jusqu’à 220V et 10A.

NC = « normally closed ». Le contact NO est OUVERT lorsqu’on envoie un signal HIGH de l’arduino, fermé lorsque le signal est à LOW

NO = « normally open ». Le contact NC est FERME lorsqu’on envoie un signal HIGH de l’arduino, ouvert lorsque le signal est à LOW

J’ai donc connecté les leds à NO pour qu’elles soient actionnées lorsque l’arduino Nano envoie un signal.

ATTENTION : lorsque l’arduino est éteint, les deux leds ne sont pas alimentées avec ce schéma, mais un test au multimètre montre que le contact est établi entre C et NO, que je laisse le jumper ou non, alors que le contact entre C et NC est bien ouvert. Si je branche les moteurs comme ça, ils vont se retrouver en marche lorsque l’arduino sera éteint…

Le rôle du jumper….

J’ai lu dans plusieurs articles que le jumper JD-VCC vers VCC doit être enlevé lorsqu’on veut isoler parfaitement les deux réseaux, l’un haute tension et l’autre basse tension.

Je crois comprendre à quoi il sert : on peut alimenter le relais avec 5V indépendants de l’arduino si on le souhaite. Dans ce cas, on enlève le jumper et on connecte JD-VCC à du 5V indépendant et GND juste à côté au neutre de l’alimentation indépendante.

Mais avant de tester en 220V, il faut que j’en sois certaine… Je dois vérifier qu’il n’y a pas de contact entre les deux côtés du relais

Essai avec des leds alimentées en 12V

Visiblement le jumper a une fonction lorsqu’on utilise une alimentation indépendante pour les équipements relayés. Je fais donc des essais avec une alimentation 5V.

Je vais alimenter le côté des leds par une alimentation spécifique 12V, en mettant les bonnes résistances, je ne devrais pas les casser.

De l’autre côté l’arduino sera en 5V via USB.

Et je testerai d’enlever le cavalier et d’alimenter le relais avec du 5V indépendant.

relais et led alimentées en 12V

Ce montage me sert à faire des tests. L’alimentation 12V étant toujours en route, que se passe-t-il quand :

  • j’enlève le cavalier entre JST-VCC et VCC
  • Je débranche l’alimentation de l’arduino

Lorsque l’arduino est éteint : les led sont toutes deux allumées

Lorsque le cavalier est enlevé : le relais fonctionne (on voit les led de K1 et K2 s’allumer et s’éteindre selon la séquence) mais les leds restent allumées en permanence…

Lorsque le cavalier est enlevé, si je place le +5V de l’arduino sur le JST-VCC ou le VCC de cette zone, avec le GND de l’arduino sur le GND de cette zone, c’est comme si j’avais placé le cavalier.

Conclusion sur un branchement correct en 12V

Le schéma correct de fonctionnement est le suivant (noter que les alimentations des leds sont maintenant connectées à NC et pas NO :

relais et alimentation 12V correctement branchée

Quant au sketch, il fonctionne correctement avec le contenu suivant :

/*
 * test moteur fanch 4/6/2016 
 * 
 * !!! NE PAS UTILISER AVEC UN MOTEUR
 * --- les deux relais peuvent être sur 1 simultanément dans cette version
 * !!!
 * 
 * Nouveaux relais pas chers
 * Le relais met sur ON lorsqu'il ne reçoit pas d'impulsion....
 * arduino Nano R3
 * 
 */
const int montee = 3;    // broche 3 pour le relais "montée" K1 / led Rouge
const int descente = 4 ;  // broche 4 pour le relais "descente" K2 / led verte

void setup() {
  // initialize digital pin 13 as an output.
  pinMode(montee, OUTPUT);
  pinMode(descente,OUTPUT);

  // démarrer le port série
  Serial.begin(57600);
  Serial.println("Setup fait" );  

  // vider le buffer RX
  // while (Serial.available())  Serial.read();  
}

// the loop function runs over and over again forever
void loop() {

    Serial.println("------------------" );
    Serial.print("DOWN - VERT ON " );
    action_store(true, false);   // single quote for string

    Serial.print("UP - ROUGE ON " );
    action_store(false, true); // single quote for string
    
    Serial.print("Stand By - Rouge et vert OFF " );
    action_store(true, true);    // single quote for string

    Serial.print("BIG PROBLEME - Rouge et vert ON " );
    
    // action_store(false, false); // Do not run this if le moteur du store est connecté !  
  Serial.println(" DO NOTHING !");
}


void action_store(bool red, bool green) {

  Serial.print(" | RED : ");
  Serial.print(red);
  Serial.print(" | GREEN : ");   
  Serial.println(green);
   
  motor_go(montee, red) ; 
  motor_go(descente, green) ;
  
  delay(3000) ;   
}

void motor_go(int sens, bool action ) {
    
    digitalWrite(sens, action);     // actionne le relais "sens"

}


Noter que la led rouge s’allume lorsqu’on lui envoie (FALSE / 0) et s’éteint lorsqu’on lui envoie (TRUE / 1).

Noter aussi que j’ai fait en sorte que le cas « big problem » n’allume pas les led pour qu’on ne risque pas de bousiller le moteur des stores si on essaie avec ce sketch.

Dans la console série – réglée à 57600 bauds – on lit en boucle le texte suivant :

——————
DOWN – VERT ON | RED : 1 | GREEN : 0
UP – ROUGE ON | RED : 0 | GREEN : 1
Stand By – Rouge et vert OFF | RED : 1 | GREEN : 1
BIG PROBLEME – Rouge et vert ON DO NOTHING !

Et la led verte s’allume bien lorsque red est à 1 et green à 0

Essais avec du 220V

Attention Danger électrique

Maintenant j’essaie avec deux ampoules branchées sur du 220 V !

Mesures de sécurité

Dessiner le schéma de fonctionnement général, en mettant toutes les hautes tensions d’un côté, bien séparées des basses tensions.

relais arduino 5V - 220V lampes

Dessiner un schéma utilisant des connecteurs type domino pour simplifier le changement d’éléments commandés.

relais arduino 5V - 220V lampes

Mettre tous ces composants dans une boîte. Fermer la boîte avant de brancher la prise et l’arduino.

Bilan :

Ca fonctionne correctement, je ne me suis pas électrocutée et je n’ai pas fait sauter les fusibles de la maison !

Pour voir les photos du montage tel que schématisé ici et pour aller plus loin (commande bluetooth), c’est dans un prochain article.