firmware wip - wip pump control

This commit is contained in:
Marcus 2024-06-17 01:48:58 +02:00
parent a51cd81651
commit 37e0b33cf3
4 changed files with 57 additions and 22 deletions

View file

@ -43,6 +43,11 @@ unsigned long MaintenanceStarted = 0;
byte PumpOnTimePassed = 0;
bool PumpOnManual = false;
// helper variable for pump control with soilmoisture
// average of last readings
unsigned short valSoilmoistureAvg = 0;
unsigned short valSoilmoistureAvg_tmp = 0;
byte valSoilmoistureAvg_count = 0;
//unsigned short
/*

View file

@ -501,10 +501,25 @@ void controlLED() {
}
void refreshSensors() {
byte soilmoistureAvgSampleCount = 5;
valSoilmoisture = getSoilmoisture(MoistureSensor_Type);
valHumidity = getHumidity();
valTemperature = getTemperature(TemperatureSensor_Type);
valWaterlevel = getWaterlevel();
// get average of 5 readings for valSoilmoisture
valSoilmoistureAvg_tmp = valSoilmoistureAvg_tmp + valSoilmoisture;
if(valSoilmoistureAvg_count < soilmoistureAvgSampleCount - 1) {
valSoilmoistureAvg_count++;
} else {
// build average
valSoilmoistureAvg = valSoilmoistureAvg_tmp / soilmoistureAvgSampleCount;
// reset everything
valSoilmoistureAvg_tmp = 0;
valSoilmoistureAvg_count = 0;
}
}
void displayScreens() {
@ -553,9 +568,10 @@ void displayScreens() {
display.println("");
display.print("Moisture: ");
display.print(valSoilmoisture);
display.println(" %");
display.print(" % ");
display.println(valSoilmoistureAvg);
display.println("");
if(UsePump == true) {
if(UsePump > 0) {
display.print("Pump Waterlvl: ");
switch(valWaterlevel) {
case 0:
@ -628,7 +644,8 @@ void controlPUMP() {
byte PumpInterval;
// UsePump true and not in harvest state?
if ( (UsePump > 0) && (growState() < 3) ) {
// dont water within the first 15 sec after startup
if ( (UsePump > 0) && (growState() < 3) && (millis() > 15000) ) {
switch(growState()) {
case 1:
PumpInterval = PumpIntervalVeg;
@ -674,8 +691,8 @@ void controlPUMP() {
break;
case 2:
// when valSoilmoisture is lower then SoilMoisture low do some watering
if( (valSoilmoisture < SoilmoistureLow) || ( (valSoilmoisture >= SoilmoistureLow) && ( (PumpOnTimePassed > 0) && (PumpOnTimePassed <= PumpOnTime) ) ) ) {
// when valSoilmoistureAvg is lower then SoilMoisture low do some watering
if( (valSoilmoistureAvg < SoilmoistureLow) || ( (valSoilmoistureAvg >= SoilmoistureLow) && ( (PumpOnTimePassed > 0) && (PumpOnTimePassed <= PumpOnTime) ) ) ) {
// check if we alerady exceeded max PumpOnTime
if(PumpOnTimePassed < PumpOnTime) {
digitalWrite(PinPUMP, HIGH);
@ -685,7 +702,7 @@ void controlPUMP() {
PumpLastOn = timeClient.getEpochTime();
PumpOnTimePassed = 0;
}
// when valSoilmoisture is greater then the Low value,
// when valSoilmoistureAvg is greater then the Low value,
} else {
digitalWrite(PinPUMP, LOW);
}
@ -694,8 +711,8 @@ void controlPUMP() {
//
case 3:
if( ( (timeClient.getEpochTime() - PumpLastOn) >= (PumpInterval) ) && //TODO calculate PumpInterval into days as well here
( (valSoilmoisture < SoilmoistureLow) ||
( (valSoilmoisture >= SoilmoistureLow) && ( (PumpOnTimePassed > 0) && (PumpOnTimePassed <= PumpOnTime) ) )
( (valSoilmoistureAvg < SoilmoistureLow) ||
( (valSoilmoistureAvg >= SoilmoistureLow) && ( (PumpOnTimePassed > 0) && (PumpOnTimePassed <= PumpOnTime) ) )
) ) {
// check if we alerady exceeded max PumpOnTime
if(PumpOnTimePassed < PumpOnTime) {
@ -706,7 +723,7 @@ void controlPUMP() {
PumpLastOn = timeClient.getEpochTime();
PumpOnTimePassed = 0;
}
// when valSoilmoisture is greater then the Low value,
// when valSoilmoistureAvg is greater then the Low value,
} else {
digitalWrite(PinPUMP, LOW);
}
@ -714,5 +731,8 @@ void controlPUMP() {
}
}
} else {
// ensure pump is off when it should be off
digitalWrite(PinPUMP, LOW);
}
}

View file

@ -1,5 +1,5 @@
/* CanGrow_Version.h gets generated from cangrow.sh */
const char* CanGrowVer = "0.1-dev";
const char* CanGrowBuild = "54fec62-20240616204659";
const char* CanGrowBuild = "a51cd81-20240617013905";

View file

@ -373,7 +373,7 @@ void WEBroot() {
}
if(UsePump > 0) {
body += "<br><b>Pump water level:</b> ";
body += "<b>Pump water level:</b> ";
switch(getWaterlevel()) {
case 0:
body += "<span style='color: green;'>OK</span>";
@ -515,15 +515,19 @@ void WEBgrowSettings() {
body += "'/> %<br>\n";
}
if(UsePump > 0) {
body += "Pump interval vegetation: <input class='inputShort' type='number' name='PumpIntervalVeg' min='0' max='255' value='";
body += PumpIntervalVeg;
body+= "' required>days<br>\n";
body += "Pump interval bloom: <input class='inputShort' type='number' name='PumpIntervalBloom' min='0' max='255' value='";
body += "Pump interval vegetation: every <input class='inputShort' type='number' name='PumpIntervalVeg' min='0' max='255' value='";
body += PumpIntervalVeg;
body += "' required ";
if( (UsePump != 1) && UsePump != 3) { body += "readonly"; }
body += "> days<br>\n";
body += "Pump interval bloom: every <input class='inputShort' type='number' name='PumpIntervalBloom' min='0' max='255' value='";
body += PumpIntervalBloom;
body+= "' required>days<br>\n";
}
body += "' required ";
if((UsePump != 1) && (UsePump != 3)) { body += "readonly"; }
body += "> days<br>\n";
body += "<input type='submit' value='&#x1F4BE; Save settings'>\n";
body += "</form>\n";
@ -1040,6 +1044,7 @@ void APIgetSensors() {
JsonDocument jsonSensors;
jsonSensors["soilmoisture"] = valSoilmoisture;
jsonSensors["soilmoistureAvg"] = valSoilmoistureAvg;
jsonSensors["temperature"] = valTemperature;
jsonSensors["humidity"] = valHumidity;
jsonSensors["waterlevel"] = valWaterlevel;
@ -1054,6 +1059,13 @@ void APIgetDebug() {
JsonDocument jsonDebug;
// Runtime vars
JsonObject objRuntime = jsonDebug["runtime"].add<JsonObject>();
objRuntime["PumpOnTimePassed"] = PumpOnTimePassed;
objRuntime["PumpOnManual"] = PumpOnManual;
objRuntime["valSoilmoistureAvg"] = valSoilmoistureAvg;
objRuntime["valSoilmoistureAvg_tmp"] = valSoilmoistureAvg_tmp;
objRuntime["valSoilmoistureAvg_count"] = valSoilmoistureAvg_count;
// WiFi
JsonObject objWiFi = jsonDebug["wifi"].add<JsonObject>();
@ -1077,8 +1089,6 @@ void APIgetDebug() {
objSystem["NtpOffset"] = NtpOffset;
objSystem["MaintenanceDuration"] = MaintenanceDuration;
objSystem["PumpOnTime"] = PumpOnTime;
objSystem["PumpOnTimePassed"] = PumpOnTimePassed;
objSystem["PumpOnManual"] = PumpOnManual;
objSystem["PumpLastOn"] = PumpLastOn;
// Grow