Comment faire une impulsion avec un relais Help Help

Bonjour à tous,

Je m'en remets à vous car après 2 jours et 1 nuit blanche je bloque sur un problème >:( >:( >:( >:( >:( qui je pense est hyper simple (tellement simple que je n'ai rien trouvé sur les forum je suppose que personne a bloqué sur ce point :confused: :confused: :confused: :confused: en fin bref ....) comme vous aurez deviné je suis un super débutant en arduino/prog.

Mon problème est le suivant:

je souhaite ouvrir/fermer mes volets roulants via mon arduino commande vocale/bluetooth (smartphone android) + 1 relais ouverture + 1 relais fermeture.

Étonnamment la commande vocale et le bluetooth zéro problème (merci au super Tuto sur YouTube).

Là où je bloque c'est que pour faire fonctionner la commande centralisée de mes volets il me faut simuler un bouton poussoir; au début je me suis dit facile:

Je mets un delay(500) sur le relais ça créer une impulsion et hop le tour est joué. Un relais pour l'ouverture, un pour la fermeture basta.

int RelaiVoletOpen = 12; int RelaiVoletClose = 11; int state = 0;

void setup() { pinMode(RelaiVoletOpen, OUTPUT); pinMode(RelaiVoletClose, OUTPUT);

Serial.begin(9600); }

void loop() { if(Serial.available()>0){ state = Serial.read (); }

if (state == '1'){ digitalWrite(RelaiVoletOpen, HIGH); delay(500); }

else if (state == '2'){ digitalWrite(RelaiVoletClose, HIGH); delay(500); } }

Bon ça marche pas le relais change d'état mais ne revient pas à l'état initial j'ai donc ajouté :

if (state == '1'){ digitalWrite(RelaiVoletOpen, HIGH); delay(500); digitalWrite(RelaiVoletOpen, LOW);

ça ne marche pas le relais change d'état mais ne revient pas à l'état initial j'ai donc ajouté:

if (state == '1'){ digitalWrite(RelaiVoletOpen, HIGH); delay(500); digitalWrite(RelaiVoletOpen, LOW); delay(500);

ça marche mais tourne en boucle le relais change d'état fermé > ouvert > fermé etc...

Comment arrêter cette boucle ? la fonction break; ne fonctionne pas

Suis-je sur la bonne voie ou je me plante complet. :confused:

Le but étant de créer une impulsion de 500ms avec mon relais afin de simuler l'action d'un bouton poussoir.

D'avance merci pour votre aide.

bonjour,
code entre balise code </>

après pour connaitre l’état de ta variable state, tu fais un Serial.print(state)

A tous les coups, la variable garde 1, donc tourne en boucle

rajoutes dans ce cas state = 0 à la fin de chaque if

Peux tu me faire un exemple avec

void loop() {
if(Serial.available()>0){
state = Serial.read ();
}

if (state == ‘1’){
digitalWrite(RelaiVoletOpen, HIGH);
delay(500);
}
je n’ai sais pas trop ou mettre les <>

Tout est

rajoutes dans ce cas state = 0 à la fin de chaque if

void loop() {
  if(Serial.available()>0){
    state = Serial.read ();
    }

    if (state == '1'){
  digitalWrite(RelaiVoletOpen, HIGH);
  delay(500);
state = 0;
    }
else   digitalWrite(RelaiVoletOpen, LOW);

ca marche avec comme prog :

int RelaiVoletOpen = 12;
int RelaiVoletClose = 11;
int state = 0;

void setup() {
  pinMode(RelaiVoletOpen, OUTPUT);
  pinMode(RelaiVoletClose, OUTPUT);
  Serial.print(state);

Serial.begin(9600);
}

void loop() {
  if(Serial.available()>0){
    state = Serial.read ();
    }

  if (state == '1'){
  digitalWrite(RelaiVoletOpen, HIGH);
  delay(500);
    Serial.print(state);
    state = 0;
    digitalWrite(RelaiVoletOpen, LOW);
  delay(500);
  Serial.print(state);
    state = 0;
  
  }

    else if (state == '2'){
      digitalWrite(RelaiVoletClose, HIGH);
  delay(500);
    Serial.print(state);
    state = 0;
    digitalWrite(RelaiVoletClose, LOW);
  delay(500);
  Serial.print(state);
    state = 0;


    }
}

Merci à tous pour ce retour rapide et cette efficacité. problème résolut.

:) :) :) :) :) Forum Arduino Francais Au top :) :) :) :) :)

Pour info: j'ai les leds de mon module relais (8x) sont allumer quand mes relais sont au repos ils s’éteignent quand les relais sont alimentés .

Est ce normale?

je souhaiterai avoir un retour de la commande est ce possible?

Du genre surveille le relais quand il à fait un cycle on > off de 500ms envoie un message sur l'ecran (ex: volet ouvert).

j'ai deux ecran :

1 LCD: http://litbimg1.rightinthebox.com/images/384x384/201206/ukqsku1339666209963.jpg

1 OLED: https://oscarliang.com/ctt/uploads/2014/01/arduino-096-i2c-oled-display.jpg

Encore merci.

j'ai les leds de mon module relais (8x) sont allumer quand mes relais sont au repos ils s'éteignent quand les relais sont alimentés .

donnez nous le lien sur votre module relai et surtout indiquez nous si vous avec connecté les prises sur les bornes NO ou NC (normalement ouvert ou normalement fermé)

je souhaiterai avoir un retour de la commande est ce possible?

Bien sûr oui, au lieu du   Serial.print(state); dans le code ci dessus, mettez du code qui parle à votre LCD. Vu que c'est votre logiciel qui envoie les commandes au relai, votre logiciel sait exactement ce qu'il se passe et quel moment :)

Bonjour,

Désoler pour le retour tardif.

voici le liens de mon module relais 8x : https://www.amazon.fr/Module-relais-canaux-actif-Arduino/dp/B00EDHX4Z4

Il sont connectés en NF.

ils sont alimentés au repos je souhaiterai couper cette alimentation via mon prog mais je ne trouve pas le solution.

pour le retour sur l'ecran il suffit de faire d'ajouter par exemple??

int RelaiVoletOpen = 12;
int RelaiVoletClose = 11;
int state = 0;

void setup() {
  pinMode(RelaiVoletOpen, OUTPUT);
  pinMode(RelaiVoletClose, OUTPUT);
  Serial.print(state);

Serial.begin(9600);
}

void loop() {
  if(Serial.available()>0){
    state = Serial.read ();
    }

  if (state == '1'){
  digitalWrite(RelaiVoletOpen, HIGH);
  delay(500);
    Serial.print(state);
    state = 0;
    digitalWrite(RelaiVoletOpen, LOW);
  delay(500);
  Serial.print(state);
    state = 0;
[color=red]  Serial.print("volet ouvert");[/color]

K1rou: ils sont alimentés au repos je souhaiterai couper cette alimentation via mon prog mais je ne trouve pas le solution.

Bonjour,

Ils ne sont pas alimentés au repos, ils sont commandés à l'état bas. Il suffit de les commander à l'inverse. Pour rendre ton programme plus clair tu peux définir des constantes ON/OFF

const int ON=LOW;
const int OFF=HIGH;

ensuite tu utilises ces constantes

 digitalWrite(RelaiVoletOpen, ON);  // ferme le relais

OK je test et reviens vers toi.

merci

une idée pour le affichage du retour sur le lcd? ex : "volets fermés" une fois la commande executé