Bonjour,
Je souhaite contrôler le débit d'eau dans le cadre de l'arrosage de mes légumes, gestion assurée par un automatisme d'irrigation de 6 zones
J'ai besoin de votre aide pour piloter correctement la fermeture de la vanne principale si le débit dépasse un certain seuil (fixé à 1 litre/minute dans le code)
Je vous joins mon code, et merci par avance pour comprendre mon erreur
Amicalement
Robert
/*
Capteur de débit d'eau YF‐ S201 & LCD 20/04
Sortie du capteur de débit d'eau traitée pour lire en litres/heure
Courtoisie d'adaptation: hobbytronics.co.uk
*/
volatile int flow_frequency; // Mesure les impulsions du capteur de débit
float vol = 0.0, l_minute; // Litres/heure calculés
unsigned char flowsensor = 2; // Entrée du capteur
unsigned long currentTime;
unsigned long cloopTime;
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 9);
int PinElectrovanne = 7;
void flow () // Fonction d'interruption
{
flow_frequency++;
}
void setup()
{
pinMode(PinElectrovanne, OUTPUT);
pinMode(flowsensor, INPUT);
digitalWrite(flowsensor, HIGH); // Pull-up interne en option
Serial.begin(9600);
lcd.begin(20, 4);
attachInterrupt(digitalPinToInterrupt(flowsensor), flow, RISING); // Interruption de configuration
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Water Flow Meter");
lcd.setCursor(0, 1);
lcd.print("Circuit Digest");
currentTime = millis();
cloopTime = currentTime;
}
void loop ()
{
currentTime = millis();
// Chaque seconde, calculez et imprimez des litres/heure
if (currentTime >= (cloopTime + 1000))
{
cloopTime = currentTime; // CloopTime met à jour
if (flow_frequency != 0) {
// Fréquence d'impulsion (Hz) = 7,5Q, Q est le débit en L/min.
l_minute = (flow_frequency / 7.5); // (Fréquence d'impulsion x 60 min) / 7,5Q = débit en L/heure
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Debit: ");
lcd.print(l_minute);
lcd.print(" L/M");
l_minute = l_minute / 60;
lcd.setCursor(0, 1);
vol = vol + l_minute;
lcd.print("Vol:");
lcd.print(vol);
lcd.print(" L");
flow_frequency = 0; // Réinitialiser le compteur
Serial.print(l_minute, DEC); // Impression litres/heure
Serial.println(" L/Sec");
lcd.setCursor(0, 3);
lcd.print(l_minute);
Serial.print(l_minute, DEC); // Impression litres/heure
}
else {
Serial.println(" flow rate = 0 ");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Debit: ");
lcd.print( flow_frequency );
lcd.print(" L/M");
lcd.setCursor(0, 1);
lcd.print("Vol:");
lcd.print(vol);
lcd.print(" L");
}
if ((l_minute ) > 1)
{digitalWrite(PinElectrovanne, HIGH);
//delay(2000);
}
else{
digitalWrite(PinElectrovanne, LOW);
//delay(2000);
}
}
}