Actionnement distillateur

Bonjour la communauté,

Je travaille en tant que technicien de laboratoire. Dans le cadre de mon travail j'utilise régulièrement un distillateur. J'aimerai automatiser sa mise en route à l'aide d'une carte aruduino. Je viens vers vous car je ne parvient pas à le faire fonctionner correctement.

Voici le code

const int relais_distilateur = 7;
const int relais_electrovanne = 8;
const int capteur_haut = 13;
const int capteur_bas = 11;
int niveau_haut;
int niveau_bas;

void setup() {

pinMode(relais_distilateur, OUTPUT);
pinMode(relais_electrovanne, OUTPUT);
pinMode(capteur_haut, INPUT);
pinMode(capteur_bas, INPUT);
}

void loop() {

digitalWrite(relais_distilateur,LOW);
digitalWrite(relais_electrovanne,LOW);

niveau_haut=digitalRead(capteur_haut);
niveau_bas=digitalRead(capteur_bas);

if(niveau_bas==LOW){
while(niveau_haut==HIGH) {
digitalWrite(relais_distilateur, HIGH);
digitalWrite(relais_electrovanne, HIGH);
}
}
}

En gros, je voudrais qu'une fois le niveau d'eau distillé de ma réserve est en dessous d'un certain seuil, le distillateur se mette en route jusqu'à atteindre un autre seuil.
Le code ci dessus ne fonctionne pas comme je le voudrais. Pouvez vous m'aider.

Bonjour

Hojo98:
Le code ci dessus ne fonctionne pas comme je le voudrais.

Comment ça ?

Personnellement je debug avec le terminal, je place des serial.print , pour voir où en est le programme.

@+

Première remarque :

const int capteur_haut = 13;
const int capteur_bas = 11;

Choisir 13 comme entrée n'est pas très malin. Il y a une LED sur cette PIN.

  pinMode(capteur_haut, INPUT);
  pinMode(capteur_bas, INPUT);

  if(niveau_bas==LOW){

J'en déduis que tes capteurs sont branchés entre +VCC et entrée.
Lorsque le contact est ouvert : l'entrée est à 0
Lorsque le contact est fermé : l'entrée est à 1

Si tu n'as pas de résistances de PULL-DOWN, cela ne peut pas marcher.

Branche plutôt tes capteurs entre GND et entrée.
Et tu remplaces INPUT par INPUT_PULLUP.
Lorsque le contact est ouvert : l'entrée est à 1
Lorsque le contact est fermé : l'entrée est à 0

Dans cette boucle,

   while(niveau_haut==HIGH) {
      digitalWrite(relais_distilateur, HIGH);
      digitalWrite(relais_electrovanne, HIGH);
    }

il faudrait peut-être penser à relire l'état du capteur haut sinon tu ne détecteras jamais son basculement

Pas faux :confused:

hello
en complément

if(niveau_bas==LOW){
    while(niveau_haut==HIGH) {
      digitalWrite(relais_distilateur, HIGH);
      digitalWrite(relais_electrovanne, HIGH);

si on raisonne comme pour le niveau bas, dont le capteur renvoi un état LOW
le capteur du niveau haut est aussi à LOW et ta pompe le repassera à HIGH
lorsqu'elle aura pompé assez de liquide pour refaire le niveau
tu devrais donc avoir

if(niveau_bas==LOW){                           //si capteur bas actionné (par manque liquide)
    while(digitalRead(capteur_haut)==LOW) {    //tant que capteur haut actionné(par manque liquide)
      digitalWrite(relais_distilateur, HIGH);
      digitalWrite(relais_electrovanne, HIGH);
    }
  }

Effectivement en rappelant à lire l'état du capteur dans la boucle ça fonctionne mieux.

Merci à vous :slight_smile: