Module 16 relais 12V

Bonjour,

J'ai un comportement étrange avec un module relais 16 alimenté en 12v

Le module est connecté à une Mega par 16 pins + 1 GND.
Le module est alimenté par une alimentation 12V 1,25A
L'arduino par une 2ème alimentation 12V 1,25A

J'essaie de faire un test de déclenchement de chaque relais, mais il ne se passe rien....

Par contre quand je coupe le courant de la multiprise où sont branchées les alimentations, pendant une 1/2 seconde les relais s'enclenchent avant de s'éteindre à nouveau :o

J'imagine que le problème vient de l'alimentation, mais je comprends pas très bien pourquoi. Avez vous une idée de ce qui peut générer cet allumage lors de la coupure de courant et comment je peux régler mon problème d'activation des relais ?

Voici le module 16 relais

et voici le code :

#define Relay1 22 
#define Relay2 23 
#define Relay3 24 
#define Relay4 25 
#define Relay5 26 
#define Relay6 27 
#define Relay7 28 
#define Relay8 29 

#define Relay9 30
#define Relay10 31 
#define Relay11 32 
#define Relay12 33 
#define Relay13 34 
#define Relay14 35 
#define Relay15 36 
#define Relay16 37 
#define RELAY_ON 0 
#define RELAY_OFF 1 



void setup() 
{
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);
   digitalWrite(Relay9,RELAY_OFF);
   digitalWrite(Relay10,RELAY_OFF);
   digitalWrite(Relay11,RELAY_OFF);
   digitalWrite(Relay12,RELAY_OFF);
   digitalWrite(Relay13,RELAY_OFF);
   digitalWrite(Relay14,RELAY_OFF);
   digitalWrite(Relay15,RELAY_OFF);
   digitalWrite(Relay16,RELAY_OFF);
 }

void loop() 
{
   digitalWrite(Relay1,RELAY_ON);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);
   
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_ON);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);
   
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_ON);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);
   
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_ON);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);
   
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_ON);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);
   
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_ON);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);

   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_ON);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);
   
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_ON);

   delay(1000);

}

bonjour

peut être que définir les pin arduino en sorties aiderait au fonctionnement

Bonjour jfs59

Merci, effectivement cela fonctionne correctement maintenant.

Je partage le code :

#define Relay1 22 
#define Relay2 23 
#define Relay3 24 
#define Relay4 25 
#define Relay5 26 
#define Relay6 27 
#define Relay7 28 
#define Relay8 29 

#define Relay9 30
#define Relay10 31 
#define Relay11 32 
#define Relay12 33 
#define Relay13 34 
#define Relay14 35 
#define Relay15 36 
#define Relay16 37 
#define RELAY_ON 0 
#define RELAY_OFF 1 



void setup() 
{

pinMode(Relay1,OUTPUT);
   pinMode(Relay2,OUTPUT);
   pinMode(Relay3,OUTPUT);
   pinMode(Relay4,OUTPUT);
   pinMode(Relay5,OUTPUT);
   pinMode(Relay6,OUTPUT);
   pinMode(Relay7,OUTPUT);
   pinMode(Relay8,OUTPUT);
   pinMode(Relay9,OUTPUT);
   pinMode(Relay10,OUTPUT);
   pinMode(Relay11,OUTPUT);
   pinMode(Relay12,OUTPUT);
   pinMode(Relay13,OUTPUT);
   pinMode(Relay14,OUTPUT);
   pinMode(Relay15,OUTPUT);
   pinMode(Relay16,OUTPUT);
   
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);
   digitalWrite(Relay9,RELAY_OFF);
   digitalWrite(Relay10,RELAY_OFF);
   digitalWrite(Relay11,RELAY_OFF);
   digitalWrite(Relay12,RELAY_OFF);
   digitalWrite(Relay13,RELAY_OFF);
   digitalWrite(Relay14,RELAY_OFF);
   digitalWrite(Relay15,RELAY_OFF);
   digitalWrite(Relay16,RELAY_OFF);
 }

void loop() 
{
   digitalWrite(Relay1,RELAY_ON);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);
   
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_ON);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);
   
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_ON);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);
   
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_ON);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);
   
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_ON);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);
   
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_ON);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);

   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_ON);
   digitalWrite(Relay8,RELAY_OFF);

   delay(1000);
   
   digitalWrite(Relay1,RELAY_OFF);
   digitalWrite(Relay2,RELAY_OFF);
   digitalWrite(Relay3,RELAY_OFF);
   digitalWrite(Relay4,RELAY_OFF);
   digitalWrite(Relay5,RELAY_OFF);
   digitalWrite(Relay6,RELAY_OFF);
   digitalWrite(Relay7,RELAY_OFF);
   digitalWrite(Relay8,RELAY_ON);

   delay(1000);

}

Pas de quoi ça arrive ce genre de chose on oublie le minimum vital.

vu que les sorties se suivent une petite boucle d’initialisation réduirais la taille du code sans pour autant perdre en lisibilité.

ensuite une petite fonction eteinttout() une allumetout() ça peut être interessant.

Effectivement, le code n'est pas parfait, le but est juste de vérifier chaque relais fonctionne correctement.

En revanche même si maintenant les relais s'allument correctement, j'ai toujours un problème lors de la coupure de courant avec tous les relais qui s'allument d'un coup pendant une demi seconde.

déjà avec deux alim faut couper celle des relais avant

c 'est pareil ?

vérifier aussi si le relais s’enclenche avec une sortie Arduino a zéro ou 1
#define RELAY_ON 0
#define RELAY_OFF 1
apriori c’est zero pour enclencher

Ces relais sont actifs sur niveau bas. On peut supposer que l'alimentation de l'ARDUINO tombe en premier, les sorties tombent à LOW et les relais collent jusqu'à ce que le 12V soit coupé.

tout est dit ...

Effectivement, en coupant d'abords l'alim des relais, il n'y a plus de problème,
Je comprends mieux le soucis et je vais revoir le montage en conséquence. je vais aussi faire le test avec
#define RELAY_ON 0
#define RELAY_OFF 1

merci pour votre aide.

bon je pense que le test en inversant on off est inutile

ça pourrait même être dangereux d'utiliser des contacts NF a la place des NO

pour des raisons de sécurité la fermeture ne dois s'effectuer que s'il y a alimentation

plusieurs solutions !

s'arranger pour couper l'alim relais en premier(cas de deux alim)

sinon s'arranger pour que l'alim de l’Arduino persiste un certains temps après coupure des alim (condensateur diode antiretour)

autre solution inverser matériellement le fonctionnement de la plaque relais ça coute 2 circuits intégrés inverseur en entrée ou 16 transistor et autant de résistance

commander l'alimentation de la plaque relais par une sortie Arduino (relais ou transistor MOSFET)

Je suppose que la réalisation finale n’utilisera qu’une alimentation ?

Bonjour,

Vous pouvez éventuellement utiliser un transistor sur l'alimentation des relais.

Une broche de l'arduino servira pour activer le bloc via un circuit R C et diode.