Problème de relais simple

Bonjour à tous.
J'aurai besoin d'aide :slight_smile:
J'essaie de comprendre le fonctionnement des relais avec un montage simple. j'ai connecté un petit moteur (alimenté par une pile) sur un relais
Mon problème est que j'obtiens l'inverse de ce qu'il devrait faire.

C'est à dire que quand le code arrive à la ligne "digitalWrite(2, LOW); " le contacte se ferme et le moteur se met en marche et inversement quand ilarrive sur " digitalWrite(2, HIGH); " le moteur s'arrête. Cela devrait être le contraire ?
Mon code :

void setup() {
pinMode(2, OUTPUT);
}
void loop() {
digitalWrite(2, LOW);
delay(8000);
digitalWrite(2, HIGH);
delay(2000);
} 

Merci

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Bonsoir didauv

Peut être que ton relais est actif à LOW, comme ceci
image

As tu un lien sur ce module?

Cordialement
jpbbricole

J'ai testé plusieurs relais (des unitaires et un double) achetés dans des magasins différents, toujours avec le même résultat. J'ai même essayé avec 2 Arduino Uno.
A chaque fois ils sont actifs avec LOW, c'est un mystère pour moi.
Je n'arrive pas à voir où se trouve mon erreur.
Qu'entend tu par "As tu un lien sur ce module?"

Tu n'as pas fait d'erreur, ce relais tire avec un LOW, ce n'est pas exceptionnel.

Le lien sur le site de l'achat.

Cordialement
jpbbricole

Merci beaucoup jpbbricole
Donc si je comprends je fais comme si LOW était HIGH dans mon code ?
Je vais essayer et reviendrai pour dire mon résultat.
Le lien : https://www.aliexpress.com/item/1005002867727977.html

Bonne soirée

Oui, LOW fait tirer le relais, c'est courant dans ce domaine.

Le schéma de ton relais doit correspondre à celui que j'ai mis dans le post #3

Cordialement
jpbbricole

La bobine d'un relais tire trop de courant pour être connecté directement sur une sortie de microcontrôleur.
Je ne donne plus de chiffre de courant max sur une sortie de micro maintenant qu'un grand nombre de microcontrôleurs différents sont utilisés : il faut consulter la documentation technique du microcontrôleur considéré.
Mais c'est un point important à surveiller.

Les relais sont généralement vendus "en module". Les modules intègrent une interface de puissance, ce qui permet de les connecter directement sur un microcontrôleur.

Cette interface est soit un transistor en montage émetteur commun, soit un optocoupleur.
Le montage émetteur commun est une amplification en courant, dans le cas du relai il n'inverse pas le fonctionnement. Un niveau "LOW" ne devrait pas activer le relai.

L'opto coupleur apporte un isolement galvanique, en général la ou les diodes optiques d'entrée sont câblées pour ne pas inverser, mais tout est possible.
Si la cathode est reliée à la masse pas d'inversion, si l'anode est reliée à Vcc il y a inversion.

Conseil :
Fais des contrôles sans microcontrôleur, juste avec le 5V.

  1. Tu alimentes le module par Vcc et Gnd et tu relies IN au GND → est-ce que le relai est activé ?
  2. Tu relies maintenant IN à VCC → même question.

Transistor -> boîtier à 3 pattes au-dessus du petit tube en verre. Entre la lettre N et le marquage VCC
capture_2023_10_31_01_13_56
Opto coupleur : gros rectangle noir à 4 pattes.
capture_2023_10_31_01_17_14

Si j'en crois la photo du lien que tu as fournis le relai est un relai inverseur

Le relai de gauche est un interrupteur simple.
Celui de droite est un inverseur.
Sur ton relai le point 2 est appelé COM → "common" in britiche
le point 1 est appelé NC → "normaly closed" → contact repos (R) en français
Le point 3 est appelé NO → "normaly open" → contact travail (T) en français

Quand j'établis un schéma et que je fais des choix avec un relai, j'ai deux priorités :

  1. que se passe-t-il à la mise sous tension. Faut-il que l'état du relais soit impérativement Repos ou Travail ?
  2. un relai consomme alors, autant le câbler dans la position où il restera le plus longtemps non activé.
    Le choix définitif est un compromis entre les deux impératifs, parfois contradictoires.

C'est pourtant ce qui est indiqué sur les informations du produit dont tu as donné le lien

Oui, le plus propre (et compréhensible) serait plutôt de faire

#define RELAIS_ACTIF LOW
#define RELAIS_INACTIF HIGH
const int PIN_RELAIS = 2;

void setup() {
pinMode(PIN_RELAIS, OUTPUT);
}
void loop() {
digitalWrite(PIN_RELAIS, RELAIS_ACTIF);
delay(8000);
digitalWrite(PIN_RELAIS, RELAIS_INACTIF);
delay(2000);
} 

Bonjour 68tjs et merci
J'ai testé comme tu demandes, Le relais s'active (choix 2.) quand je relie IN à VCC, les 2 leds s'allument (rouge et verte)
Sur le choix 1. le relais ne s'active pas, leds éteints

Bonjour fdufnews et merci aussi à toi,
Je vais faire avec ton code pour la partie relais.
Ca me facilitera grandement mon montage

Donc il faut un état haut pour l'activer.

Oui, 68ths, je comprends, mais pourquoi, quand je connecte le relais sur mon Arduino Uno j'ai le contact allumé avec LOW et éteint avec HIGH
J'ai essayé une énième fois avec le code :`

// TEST-relais_2
void setup() {
pinMode(2, OUTPUT);
}
void loop() {
digitalWrite(2, HIGH);
delay(10000);
digitalWrite(2, LOW);
delay(2000);
}`

J'ai bien les 10 secondes sans contact avec... HIGH, ensuite le relais "s'allume" 2 secondes avec LOW !
C'est juste pour essayer de comprendre, en attendant je vais faire comme dis fdufnews en inversant les 2 termes

Merci beaucoup à tous en tous cas

La manip que je t’ai proposée etait pour lever le doute sur le matériel.
C’est fait.

J’ai ”tendance” a penser que la suite se trouve dans le code ou le câblage.

Quand tu dis que le relais est activé avec un etat bas c’est que :

  1. tu entends le relais claquer ?
    Ou
  2. tu le deduis de la fermeture du contact et dans ce cas n’y aurait-il une inversion dans le choix NO/NC ?
    Cela peut se verifier en n’alimentant le montage et en testant le contact a l’ohmmetre.

Methode de mise au point des petits pas.

Bonjour 68tjs,
J'ai fait un montage Arduino + capteur d'humidité + le fameux relais + un mini-moteur (pour une future pompe à eau) avec le code d'inversion de fdfnews et ça marche à la perfection :grinning:. Avec LOW le moteur se met en marche et il s'arrête avec HIGH.
Sinon pour répondre à tes questions,

  • quand je dis que le relais est activé avec un état bas c’est que j'entends le relais claquer et vois les leds rouge et verte s'allumer
  • et j'en déduis aussi la fermeture du contact puisque le contact se ferme alimentant ainsi le moteur qui se met à fonctionner
  • il n'y a pas d'erreur à mon avis dans le choix NO/NC car
    • quand je mets sur NC le moteur tourne en permanence même sans alimenter l'Arduino, normal car le contact est fermé du départ, donc pas bon
    • et si je mets sur NO, tout fonctionne à merveille en utilsant l'inversion LOW et HIGH comme dis fdfnews

Cela correspond aussi à ce qu'il dit également concernant mon matériel où il est noté "this module is triggered at low level..."
Merci à tous

Bonjour tous,
Le relais fonctionne sur Arduino comme dis plus haut, par contre j'ai exactement le même problème avec ESP32 mais sans pouvoir le résoudre.
En résumé, quand j'ai téléchargé le code (ci-dessous avec GPIO 32) de fdufnews, le relais se déclenche le moteur tourne et ne s'arrête pas.

#define RELAIS_ACTIF LOW
#define RELAIS_INACTIF HIGH
const int PIN_RELAIS = 2;

void setup() {
pinMode(PIN_RELAIS, OUTPUT);
}
void loop() {
digitalWrite(PIN_RELAIS, RELAIS_ACTIF);
delay(8000);
digitalWrite(PIN_RELAIS, RELAIS_INACTIF);
delay(2000);
} 

Il y a une particularité avec ESP32 ?
Merci

Il ne s'arrête pas ou bien il continue à tourner sur sa lancée, la pause de 2s est relativement courte?

il ne s'arrête pas - pour vérifier quand même, j'ai modifié les 2 secondes en 200 secondes (200000), c'est idem

Sur le module relais l'une des 2 LEDs doit s'allume/s'éteindre lorsqu'on active/désactive le relais. Est-ce qu'elle est toujours allumées?

Bonjour,
2 leds, la rouge pour l'alim et la verte pour le circuit quand il est fermé (je suppose).
Ici, les 2 leds s'allument et restent allumés en permanence dès l'allumage.
J'ai mis les delay dans des valeurs plus "raisonnables" que 200000 - code ci-dessous

#define RELAIS_ACTIF LOW
#define RELAIS_INACTIF HIGH
const int PIN_RELAIS = 32;

void setup() {
pinMode(PIN_RELAIS, OUTPUT);
}
void loop() {
digitalWrite(PIN_RELAIS, RELAIS_ACTIF);
delay(6000);
digitalWrite(PIN_RELAIS, RELAIS_INACTIF);
delay(3000);
}