code pour pompe de relevage

Bonjour,

je suis débutant dans le codage et j'aimerais faire un system pour actionner une pompe de relevage dans un puits.

J'ai un flotteur, un bouton un relai et bien sur une carte arduino.

J’aimerais que le flotteur en mode haut ouvre le relai pour actionner la pompe ainsi qu'une LED bleu, tant que le flotteur est haut le relai est ouvert, puis des qu'il passe en bas je voudrais le laisser ouvert encore 2 minutes puis couper le relai éteindre la LED bleu et allume une LED verte

J'ai essayer de coder mais je bute sur un problème qui est le suivant ; lorsque le flotteur passe en haut le relai ouvre mais déclenche tt de suite la tempo alors que je voudrais qu'elle ce déclenche lorsque le flotteur passe en bas.

pourriez vous m'aider ?

Nous ne sommes pas magiciens, ni devins.

Sans description précise quelle réponse apporter ?

  • matériel
  • code

oui désolé :)

voici mon code :

int FLOTTEUR = 4;
int RELAIS =2;
int BLEU =9;
int VERT =11;

// Déclaration des variables
int memoireBp = LOW;           //Mémoire du bouton poussoir
int etatBp = LOW;              //Etat actuel du PB
int etatRelais = LOW;          //Etat du relais
int etatVERT = HIGH;           //Etat de la led Verte
int etatBLEU = LOW;            //Etat de la led Bleue

// État d'activation de la temporisation
int tempoActive = 0;

// Temps à l'activation de la temporisation
unsigned long tempoDepart = 0;

void setup() {
    // On initialise les entrées/sorties
    pinMode(FLOTTEUR, INPUT);
    pinMode(BLEU,OUTPUT);
    pinMode(VERT,OUTPUT);
    pinMode(RELAIS, OUTPUT);
    digitalWrite(RELAIS, etatRelais);         // On écrit l'état du relais
    digitalWrite(VERT, etatVERT);             //On écrit l'état du la led Verte
    digitalWrite(BLEU, etatBLEU);             //On écrit l'état du la led Bleue
}

void loop() {

    // Récupération de l'état actuel du Flotteur
    etatBp = digitalRead(FLOTTEUR);

    //Si l'état est différent de la mémoire et qu'il est à HIGH
    if(etatBp != memoireBp && etatBp == HIGH) {

        delay(500);

        //Si relais est LOW
        if(etatRelais == LOW) {

            //On demande à le passer à HIGH
            etatRelais = HIGH;
            etatVERT = LOW;
            etatBLEU = HIGH;
            

            // Et on lance la temporisation
            tempoActive = 1;
            tempoDepart = millis();

        // Sinon
        } else {

            //On demande à le passer à LOW
            etatRelais = LOW;
            etatVERT = HIGH;
            etatBLEU = LOW;

            //Et on annule la temporisation
            tempoActive = 0;

        }

        //On écrit l'état du relais
        digitalWrite(RELAIS, etatRelais);
        digitalWrite(VERT, etatVERT);
        digitalWrite(BLEU, etatBLEU);

    } 

    // Si la temporisation est active,
    if ( tempoActive==1 ) {

        // Et si il s'est écoulé 3 secondes,
        if ( ( millis() - tempoDepart ) >= 5000 ) {    //1000 et egal a 1 seconde
         
            //On demande à passer le relais à LOW apres la temporisation
            etatRelais = LOW;
            etatVERT = HIGH;
            etatBLEU = LOW;
            
            //On écrit l'état du relais
            digitalWrite(RELAIS, etatRelais);
            digitalWrite(VERT, etatVERT);
            digitalWrite(BLEU, etatBLEU);

            // Et on désactive la temporisation puisque l'action a été faite
            tempoActive = 0;

        }

    }

    //On conserve l'état du bouton
    memoireBp = etatBp;

merci :)

Bonsoir SilverLeo

if (code != </>) {
  yourTopic = poubelle;
  reponses = LOW;
} else reponses = HIGH;

clique ici :wink:

savoriano:
Bonsoir SilverLeo

if (code != </>) {

yourTopic = poubelle;
  reponses = LOW;
} else reponses = HIGH;



[clique ici](https://forum.arduino.cc/index.php?topic=315372.0) ;)

Hors sujet mais, MDR !

Salut SilverLeo Tu peux utiliser un while qui reste dans la boucle jusqu'à que le flotteur est en haut. Quand le flotteur est en bas le code sort du while et tu peux mettre une pause (delay ou autre) de 2 mn et après arrêter la pompe. Serait utile de prevoir un bouton d'émergence qui arrêterait la pompe en cas de danger. Ce bouton arrêtera la boucle while et/ou sortir de la pause de 2 mn.

Il est difficile d’apporter une réponse précise.

On ne connaît pas les branchements, ni le matériel utilisé, en particulier : - flotteur : branchement entre D4 et GND ou D4 et +5V - flotteur : présence d'une résistance de pull-down ou pull-up - relais : quel type ? actif à l'état bas ou haut ?

Merci de votre attention,

comme dis je suis débutant et j'ai bidouillé en me servant d'un code trouvé dans les topics...

Le flotteur est branché en parallèle avec un bouton poussoir en passant par une résistance de 10 k hom sur le GND quand au relai je ne saurais pas vous dire.

J'aimerais que la pompe ce déclenche quand le flotteur est haut et qu'elle tourne 2 min après que le niveau du flotteur soit passé en bas...j'aimerais aussi pouvoir lancé ce même délai de 2 min manuellement en appuyant sur un bouton poussoir

Je ne comprend pas les concept pas le concept du while, pourriez vous me faire un exemple que je pourrais intégrer a mon code ?

merci

j’aimerais aussi pouvoir lancé ce même délai de 2 min manuellement en appuyant sur un bouton poussoir

tu peux utiliser un bouton en parallèle (ou en série!!!)avec le contact du flotteur.
Comme a demandé hbachetti un petit schéma ne fera mal à personne!!
pour le while:

if (digitalRead(FLOTTEUR) == HIGH) {
  etatRelais = HIGH;
  etatVERT = LOW;
  etatBLEU = HIGH;
  digitalWrite(RELAIS, etatRelais);
  digitalWrite(VERT, etatVERT);
  digitalWrite(BLEU, etatBLEU);
  while (digitalRead(FLOTTEUR) == HIGH) {//il reste dans cette boucle jusqu'à que digitalRead(FLOTTEUR) == HIGH
    //ici bouton emergence?
  }
  tempoDepart = millis();
  if (tempoDepart + 20000 < millis()) {
    //ici bouton emergence?
    //tu peux mettre ici un petit code pour faire clignoter la led bleu
    // pour avertir que le 2mn sont lancé.  
  }
  etatRelais = LOW;
  etatVERT = HIGH;
  etatBLEU = LOW;
  digitalWrite(RELAIS, etatRelais);
  digitalWrite(VERT, etatVERT);
  digitalWrite(BLEU, etatBLEU);
}

Merci savoriano,

j'ai utilisé ton code pour le while mais je n'ai pas réussi a mettre en pratique la fonction millis, je pense que j'ai du merder au niveau de la déclaration...le relai coupait immédiatement lorsque le programme sortait du while.

j'ai donc changer le code pour y mettre un delay, pensé vous que ca peu fonctionner ou est ce que ca peu engendrer un bug a la longue ?

Et je suis preneur pour un code pour faire clignoter la LED bleu pendant le delai

merci :)

Pardon 2mn c’est 120000 millis!! et pas 20000 (20sec) et il faut un > au lieu de <
Essaye comme ça:

if ((tempoDepart + 120000UL) > millis()) {
    //ici bouton émergence?
    //tu peux mettre ici un petit code pour faire clignoter la led bleu
    // pour avertir que les 2mn sont lancés.  
  }

Et je suis preneur pour un code pour faire clignoter la LED bleu pendant le delai

Essaye toi de le faire: ce n’ai pas difficile!!

J'ai modifié le code mais ca ne fonctionne toujours pas, le relai coupe dès que le flotteur change d’état

je pense que ca viens des déclarations

voici mon code :

  boolean etatRelais;
  boolean etatVERT;
  boolean etatBLEU;
  const int BLEU=11;
  const int VERT=9;
  const int RELAIS=2;
  const int FLOTTEUR=4;
  const int BOUTON=3;
  unsigned long tempoDepart = 0;

  
   
void setup() {
  pinMode(BLEU,OUTPUT);
  pinMode(VERT,OUTPUT);
  pinMode(RELAIS,OUTPUT);
  pinMode(FLOTTEUR,INPUT);
  digitalWrite(VERT,HIGH);

  
  Serial.begin(9600);


}

void loop() {if (digitalRead(FLOTTEUR) == HIGH) {
  etatRelais = HIGH;
  etatVERT = LOW;
  etatBLEU = HIGH;
  digitalWrite(RELAIS, etatRelais);
  digitalWrite(VERT, etatVERT);
  digitalWrite(BLEU, etatBLEU);
  while (digitalRead(FLOTTEUR) == HIGH) {//il reste dans cette boucle jusqu'à que digitalRead(FLOTTEUR) == HIGH
    //ici bouton emergence?
  }
tempoDepart = millis();
  if ((tempoDepart + 120000UL) > millis()) {
    //ici bouton émergence?
    //tu peux mettre ici un petit code pour faire clignoter la led bleu
    // pour avertir que les 2mn sont lancés.  
  }
  
  etatRelais = LOW;
  etatVERT = HIGH;
  etatBLEU = LOW;
  digitalWrite(RELAIS, etatRelais);
  digitalWrite(VERT, etatVERT);
  digitalWrite(BLEU, etatBLEU);
}
}

Je suis nul!!!

   tempoDepart = millis() + 120000UL;
    while (tempoDepart > millis()) {
     //ici bouton émergence?
     //tu peux mettre ici un petit code pour faire clignoter la led bleu
      // pour avertir que les 2mn sont lancés.
    }

yeah,

merci savoriano ca fonctionne parfaitement maintenant :)

je vais garder ce code et essayer d'y intégrer le code pour faire clignoter le LED le temps de délai...ru aurais une piste pour le code ? :)

En t'inspirant de ça : https://www.arduino.cc/en/tutorial/BlinkWithoutDelay