Bonjour à tous,
Pourriez-vous svp me dire quelle serait la manière la plus adéquate pour calculer le volume d'eau quotidien consommé par une pompe ?
La pompe en question est gérée par une sonde qui relève l'humidité de celui-ci toutes les x minutes.
Jusque là il n'y a rien de bien compliqué pour moi dans la réalisation sauf que c'est le terme "quotidien" qui me pose problème.
Si dans ma conception actuelle j'additionne un volume x (2,1L) à chaque fois que la pompe fonctionne disons 10x, je me retrouverai avec 21L de consommation.
Cette façon de concevoir ne tiens pas compte du "quotidien" car je ne sais pas comment le définir.
En gros comment dois-je m'y prendre pour réinitialiser le compteur au bout de 24h ?
Est-ce qu'un module RTC est pertinent dans ce cas ? ou autre suggestion ?
PS: ma carte est une MKRFOX1200
Merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 const int groundHumidity1Pin = A1; // Declare humidity ground sensor A1 pin const int waterRelayPin = 0; // Initialized a pin for water relay module int setInterval = 2; // default value in minute int setWatering = 1; // default value in minute float prevWaterVolume = 0.0; // Initialize variable for water volume calculation float waterVolume = 0.0 ; // determine water volume consumption unsigned long prevGroundHumidityTime = 0; // Initialize variable for time calculation unsigned long groundHumidityInterval = setInterval*60*1000; // check sensor every x minutes unsigned long wateringDuration = setWatering*60*1000; // running water pump during x minutes enum : byte {groundHumidity1, groundHumidity2}; //used for sensor returning data int humidityCheck(int param) { if (param == groundHumidity1) { int analog_value = analogRead(groundHumidity1Pin); int moisture = map(analog_value,1023,10,0,100); return moisture; } else return analogRead(groundHumidity2Pin); // actually not in use } void watering() { if ( millis() - prevGroundHumidityTime >= groundHumidityInterval) { //check ground humidity sensor every X minutes Serial.print(F("Humidity: ")); Serial.print(humidityCheck(groundHumidity1) ); Serial.println(F(" %")); if(humidityCheck(groundHumidity1) <= 40 ) { digitalWrite(waterRelayPin, LOW); Serial.println(F("Watering...")); waterVolume = prevWaterVolume + 2.1 ; //add 2,1 liter to the counter because of pump limitation per minute prevWaterVolume = waterVolume ; //refresh variable with new value Serial.print(F("Water consumption: ")); Serial.print(prevWaterVolume); Serial.println(F("Liter")); prevWateringTime = millis(); //reset the counter } else { Serial.println(F("No watering needed...")); } prevGroundHumidityTime = millis(); } if(millis()- prevWateringTime >= wateringDuration){ digitalWrite(waterRelayPin, HIGH); // //Serial.println("Watering Stop..."); } }
Partager