Problème lors d'utilisation de relais.

Bonjour,

Je viens solliciter vos conseils et surtout votre aide sur l'utilisation de ce relais :

http://www.microbot.it/en/product/75/Relay-Module.html

Il me pose un vrai problème dans la mesure où lorsqu'il est activé, il désactive toutes les autres entrées et je trouve ça très bizarre.

Depuis hier je tourne en rond en changeant tout mon code mais je viens tout juste de remarquer que c'est le relais qui pose problème.

En gros, lorsque je mets à l'état haut la sortie associée au relais, toutes les entrées se désactivent, il m'est donc impossible d'utiliser des boutons.

Quelqu'un saurait à quoi cela peut être dû ?

Je vous remercie.

bonjour,
un code pour voir ce que tu fais et un cablage aussi.

Voici mon code de test :
Je suis sous Mega 2560

#define Relais 47   // Sortie du relais
#define B_o 24  // Bouton
#define R 42  // LED

void setup() 
{
   pinMode(Relais, OUTPUT); 
   pinMode(B_o,INPUT_PULLUP); 
   pinMode(R, OUTPUT); 
}

void loop()
{
digitalWrite(R,LOW);
digitalWrite(Relais,HIGH);
if(digitalRead(B_o)){
digitalWrite(R,HIGH); 
}
}

Ce code très simple ne marche pas.

En fait, ce n'est pas un bouton traditionnel que j'utilise, c'est un bouton radio-commandé qui a un émetteur et un récepteur, c'est le récepteur qui est branché sur l'Arduino.

Le problème vient peut-être de mon bouton ou du fait que le bouton et le relais partagent la même alimentation provenant du 5V de l'Arduino.

Dans tous les autres cas le bouton fonctionne parfaitement sauf quand le relais est activé et je ne comprends pas pourquoi.

dans ton loop, le relais est toujours en HIGH
de plus, ca ne veut pas dire grand chose

if(digitalRead(B_o)){

si tu eux que le relais se mette en route en plus de la led si le bouton est appuyé, il ne faut pas faire comme ca
un truc comme ca, si le bouton est enfoncé, on allume, sinon on éteint

void loop{
if (digitalRead(B_o)==HIGH){
          digitalWrite(R,HIGH); 
         digitalWrite(Relais,HIGH);
        }else{

        digitalWrite(R,LOW); 
         digitalWrite(Relais,LOW);
         }
}

infobarquee:
dans ton loop, le relais est toujours en HIGH

C'est le but justement, pour tester la réaction de mon bouton lorsque le relais est activé mais je constate que lorsqu'il est activé mon bouton ne répond pas.
En restant appuyé dessus la LED clignote mais ne s'allume pas en continu.

Ensuite....

infobarquee:
de plus, ca ne veut pas dire grand chose

if(digitalRead(B_o)){

Si ça veut dire quelque chose, on n'est pas obligé de mettre "==HIGH". Tu peux essayer si tu veux, tu verras que cette condition marche et heureusement d'ailleurs sinon ça ne serait plus du C ^^ !

Mon problème n'est pas logiciel mais surtout matériel, je ne comprends pas pourquoi mon relais désactive mon bouton :frowning: !

C'est le but justement, pour tester la réaction de mon bouton lorsque le relais est activé mais je constate que lorsqu'il est activé mon bouton ne répond pas.
En restant appuyé dessus la LED clignote mais ne s'allume pas en continu

normal à mon sens, puisqu'à chaque boucle, la led passe en LOW, tu vérifie SI bouton est enfoncé
dans ce cas, il faut utiliser while et non if
tant que le bouton est enfoncé, on allume

ou alors tu utilise le if mais tu rajoute un else pour mettre en LOW la led.

autre solution, ca peut être un mauvais cablage et le relais pompe trop sur le nono.

si tu expliquais un peu mieux ce que tu veux faire.

EDIT
le fait de mettre un ==HIGH permet d'être certain de la chose
mets un Serial.println du résultat et tu verras peut être qu'un truc bug quelque part.

Je viens de trouver le problème.
Il faut séparer l'alimentation du relais et celle du bouton. Le fait d'utiliser la même carte pour alimenter les 2, pose problème apparemment.

J'ai 2 cartes Arduino Méga du coup j'utilise l'autre juste comme alim.
Je vais creuser pour voir si avec des simples composants je ne pourrai pas résoudre ce problème parce que c'est embêtant d'utiliser une Arduino juste pour alimenter un bouton ^^ !

Merci encore pour vos réponses

je viens de jeter un oeil encore sur la doc du lien

Supply voltage +5V
Supply current 72mA typ. (75mA max.)

de mémoire, c'est 40mA/pin

as tu essayé de mettre ton bouton sur le 3v et voir si ca met aussi par terre ton code?

infobarquee:
de plus, ca ne veut pas dire grand chose
if(digitalRead(B_o)){

C'est du détail pour le sujet mais du point de vue de la programmation cela veut dire quelque chose.
digitalRead peut valoir soit LOW (=0) ou HIGH (=1)
If ( digitalRead(A) ) ou if ( digitalRead(A) == 1 ) sont parfaitement valable et réalisent la même fonction logique.
Par définition du C ce qui est dans les parenthèses du if (ou du while) est une condition logique.
Toujours par définition ce qui est égal à 0 est dit "FALSE" et tout ce qui est différent de 0 est dit "TRUE" que cela vaille 1 ou 10500.

infobarquee:
je viens de jeter un oeil encore sur la doc du lien
de mémoire, c'est 40mA/pin
as tu essayé de mettre ton bouton sur le 3v et voir si ca met aussi par terre ton code?

Les 72mA c'est pour le VCC du relais et le IN du relais consomme 14mA. Si l'Arduino fournit 40mA normalement mon relais ne devrait pas s'allumer.

Je ne peux malheureusement pas alimenter mon bouton en 3V, vu que c'est un récepteur radiocommandé il lui faut également une tension minimum de fonctionnement qui est de 4.7V.

Du coup il me faut absolument 5V.

Sinon j'utiliserai une alim extérieure pour alimenter soit le relais soit le bouton.

Merci

68tjs:
C'est du détail pour le sujet mais du point de vue de la programmation cela veut dire quelque chose.
digitalRead peut valoir soit LOW (=0) ou HIGH (=1)
If ( digitalRead(A) ) ou if ( digitalRead(A) == 1 ) sont parfaitement valable et réalisent la même fonction logique.
Par définition du C ce qui est dans les parenthèses du if (ou du while) est une condition logique.
Toujours par définition ce qui est égal à 0 est dit "FALSE" et tout ce qui est différent de 0 est dit "TRUE" que cela vaille 1 ou 10500.

Et heureusement que c'est comme ça :slight_smile: ! ça fait gagner quelques lignes et quelques microsecondes :wink:

Salut,
par facilité et sûreté, je mets des transistors en darlington PNP / NPN de manière à rester " en intensité entrante dans le microcontrôleur en limitant l’ intensité qui rentre< à 10 mA, ( le plus souvent < à 100µA ) et augmenter l’ impédance au niveau de la pin, cela permet d’ éviter les parasites venant du secteur.

Pas vu d’ optocoupleur sur cette carte relais… de toute façon ce ne sont que des solutions court termes. ( c’ est mon avis et mon expérience).

Le mini pour une bobine pour commander du 230v est de 12v cc ( courant continue ).

Ce que je veux dire c’ est qu’ en fonction de ton environnement ce type de relais peut créer des dysfonctionnements au niveau du mµ en lui même.

Un conseil, si tu as des néons et autres éclairages à ballast… il se peut que ceux soient un de ces derniers le problèmes.

weetoz:
Salut,
par facilité et sûreté, je mets des transistors en darlington PNP / NPN de manière à rester " en intensité entrante dans le microcontrôleur en limitant l’ intensité qui rentre< à 10 mA, ( le plus souvent < à 100µA ) et augmenter l’ impédance au niveau de la pin, cela permet d’ éviter les parasites venant du secteur.

Dans la mesure où le Darlington multiplie encore + le courant, comment tu gères ton cablage pour ne pas envoyer tout ce courant au uC. Je suis intéressé par l’idée d’éviter les parasites liés à l’environnement peux-tu m’éclairer un peu plus sur le sujet ?

weetoz:
… de toute façon ce ne sont que des solutions court termes. ( c’ est mon avis et mon expérience).

Comment ça ? Tu penses que ce type de relais ne peut pas être utilisé pour une application destinée à être utilisé pendant plusieurs mois ?

Je viens de trouver le problème, mon Arduino alimenté sous USB ne fournit tout simplement pas assez de puissance pour l’utilisation du relais et de mon bouton radiocommandé. Mais si je l’alimente avec un transfo 9V-0.66A tout marche parfaitement.

Maintenant ce qui m’intrigue ce sont tes suggestions sur la durée et l’effet que peut avoir le relais sur le uC. Me concernant, je ne suis pas expert sur le sujet mais je ne vois pas en quoi le relais peut être néfaste pour le uC. Ce n’est pas une entrée mais une sortie, il n’envoie rien au uC, c’est comme une LED ou autre composant.
Je me trompe peut-être c’est pour ça que je te demande de m’éclairer un peu plus stp.
Merci

Darlington :
C'est simplement un montage amplificateur de courant. On l'utilise pour pallier un défaut gênant des transistors de puissance : leur gain est limité a 10/20 contre plus de 200 pour les transistors petite puissance.
Il n'y a aucun inconvénient a l'utiliser avec un micro controleur, au contraire !

Relais qui n'est qu'une entrée et pas une sortie -> FAUX.
Tout bobinage qui conduit stoke de l'énergie sous forme magnétique. A l'arrêt de la conduction il évacue cette énergie sous la forme d'une tension qui peut atteindre des milliers de volts et qui tue le transistor de commande -> voir loi de Lentz.
C'est pour cela qu'on place toujours une diode de protection souvent appelée "diode de roue libre".
Et qu'on ne commande jamais un relais directement par le micro.

Bonjour,
Merci 68tjs pour les explications.

En effet, la diode de roue libre est l' une des premières mesures de protections à mettre, la plupart des cartes relais en sont dotées, ( y compris la tienne akuma8 ).

Vu qu' elle a aussi une alimentation externe, il est facile de deviner qu' elle dispose aussi d' un transistor.
il va t' être difficile de rajouter un autre transistor pour obtenir un montage en darlignton, qui de plus est facultatif ( comme toutes les protections... :grin: )

Le but du Darlignton est d' augmenter l' impédance de sortie de ta pin atmega, ce qui limitera plus convenablement les parasite de la source secteur (230v). Blablabli blablabla, tu trouveras des schémas et des explication dans le wiki
Un site que j' aime bien, c' est celui de Rémy MAILLARD: sonelec Relais et aussi xizard et enfin... electronique 3d, je sais, je ne suis pas très gentil, ( peut-être que si en fait... ), avec tous ça, t' es pas prêt de trouver le sommeil! :grin:

Bon, dans l' immédiat, tu as réussi à faire fonctionner ton montage qui commande... ?
Qu' elle puissance, et est-ce une charge inductive? ( moteur... ) résistive? ( radiateur, lampe incandescente ou autre.)

Quand on utilise un relais, il faut prendre en compte son pouvoir de coupure. ( je te laisse faire des recherches).

Si je te dis que ta carte relais n' inspire pas confiance, c' est peut-être déjà parce qu' il faudrait savoir ce que tu veux commander avec, si c' est une résistance chauffante d' aquarium de 15W, alors pas de souci, si c' est un moteur, ce que t' as expliqué 68tjs est auusi valable ( loi de Lentz ), mais les remèdes sont différents, trop débutant (moi, hein, je suis un amateur.) pour t' expliquer la difféence entre un moteur universel et un moteur asynchrone ( ou synchrone, je n' ai pas encore étudié le sujet ).
l' utilisation d' un relais n' est pas toujours adéquate, et on en arrive... suspence ... au triac, dont tu trouveras pas mal d' explications sur Sonelec ( dont la dernière mise à jour concerne ce composant ).

Et ce qui m' amène à te parler du zero crossing...
Akuma8, ... je sens que tu risques de me détester. :wink:

Sinon, pour la fiabilité de ce genre de carte relais, un copain a vu la sienne brûler malgré mes recommandations, il voulait piloter un charge inductive d' environ 800 Watts, un moteur dont on avait aucune indication.

Voilà, je te souhaite une bonne et heureuse continuation dans le monde merveilleux des Schtroumph Arduino! :sunglasses:

Puisque la "carte relais" ne consomme que 14 mA tu n'a pas besoin d'utiliser un montage Darlington.

Pour tes difficultés je te propose de faire le point pour éviter de partir dans tout les sens (c'est si facile de se laisser entrainer)

Tu as eu un certain nombre de remarques sur le code : après les avoir prise en compte est-ce que les problèmes sont toujours les mêmes ?

J'avoue que j'ai un peu de mal à suivre l'organisation du coté matériel et qu'un schéma même fait au stylo et photographié serait bien utile.

  • Est-ce que le relais est collé à la carte Arduino ?
  • Combien il y a d'alim ?
  • Quelle est exactement l'alim de la carte arduino ?
  • Si plusieurs alims comment sont gérés les fils de masse et les fils de Vcc ?
  • La distance entre la télécommande et la carte arduino ou la carte relais a-t-elle de l'influence ?
  • Qui est perturbé par qui ? La carte micro par le relais? La radio commande par la carte micro ? X par Y ?
  • Photo du câblage ?

Si tu découpe ton projet en tranche en n'utilisant dans un premier temps uniquement la carte micro et la carte relais et un vrai bouton mécanique est-ce que cela fonctionne correctement ou pas ?
Découper en module élémentaire est bien souvent la méthode la plus rapide pour trouver la solution.

Info 1:
Quand un relais se ferme ou s'ouvre il se crée des étincelles qui sont très parasitantes. On peut en diminuer l'effet en plaçant un condensateur en parrallèle sur les contacts mais attention pas n'importe lequel. Il n'est pas utile de mettre des centaines de microFarads (10nF à 100nF devraient être suffisants) par contre il faut qu'il supporte au minimum 60V à 100 V

Info 2:
Pour l'usage du montage Darlington (et des informations sur la diode de roue libre) :
http://forum.arduino.cc/index.php?topic=100727.0

Bonjour,

Je reviens donc au sujet de ce fameux relais.

Je l'ai bien choisi en fonction de son pouvoir de coupure qui est de 277VAC-10A, sachant que pour mon application j'ai du 220VAC-7A.
Maintenant c'est fait en Chine donc je ne sais pas vraiment ce que ça vaut.

Si pour 800W ton collègue a eu un soucis, j'espère ne pas en avoir parce que je suis au-delà, environ 1500W.

Je continue mes tests avec tout en regardant si je ne peux pas trouver mieux.

Je vous remercie en tout cas.