// Source : https://lastminuteengineers.com/soil-moisture-sensor-arduino-tutorial/
// Refer : https://iotspace.dev/arduino-bodenfeuchtesensoren-anleitung-und-sketch/
// Plan: connect pump to digitalpin? or control pump through Node Red?
// Plan refer: if connect digitalpin: https://arduinogetstarted.com/tutorials/arduino-controls-pump
/* Change these values based on your calibration values */
#define soilWet 500 // Define max value we consider soil 'wet'
#define soilDry 750 // Define min value we consider soil 'dry'
// Sensor pins
#define humsensorPin1a A2 //Tower 1 above
#define humsensorPin1b A3 //Tower 1 below
#define humsensorPin2a A4 //Tower 2 above
#define humsensorPin2b A5 //Tower 2 below
// Define Analog Readings of humidity sensor
int moisture_1a=0;
int moisture_1b=0;
int moisture_2a=0;
int moisture_2b=0;
void setup() {
Serial.begin(9600);
}
void loop() {
//get the reading for monitoring and display
moisture_1a= analogRead(A2); //Tower 1 above & below
Serial.print("Moist1a:");
Serial.println(moisture_1a);
moisture_1b= analogRead(A3);
Serial.print("Moist1b:");
Serial.println(moisture_1b);
moisture_2a= analogRead(A4); //Tower 2 above & below
Serial.print("Moist2a:");
Serial.println(moisture_2a);
moisture_2b= analogRead(A5);
Serial.print("Moist2b:");
Serial.println(moisture_2b);
// Determine status of our soil - Tower 1
if (moisture_1a >= soilDry && moisture_1b >= soilDry) {
//Both soils is dry -> turn on pump
Serial.print("Pump:ON");
} else if (moisture_1a >= soilDry && moisture_1b >= soilWet && moisture_1b < soilDry) {
// above is dry, below is ok -> turn on pump
Serial.print("Pump:ON");
} else if (moisture_1a >= soilWet && moisture_1a < soilDry && moisture_1b >= soilDry) {
// above is ok, below is dry -> turn on pump
Serial.print("Pump:ON");
} else if (moisture_1a <= soilWet && moisture_1b >= soilWet && moisture_1b < soilDry) {
// above is too wet, below is ok -> turn off pump
Serial.print("Pump:OFF");
} else if (moisture_1a >= soilWet && moisture_1a < soilDry && moisture_1b <= soilWet) {
// above is ok, below too wet -> turn off pump
Serial.print("Pump:OFF");
}
/////// Not sure
else if (moisture_1a >= soilDry && moisture_1b <= soilWet) {
// above is dry, below is too wet -> turn off pump
Serial.print("Pump:OFF");
} else if (moisture_1a <= soilWet && moisture_1b >= soilDry) {
// above is too wet, below is dry -> turn off pump
Serial.print("Pump:OFF");
}
else {
Serial.println("Pump:ERROR with water pumping 1");
}
// Determine status of our soil - Tower 2
if (moisture_2a >= soilDry && moisture_2b >= soilDry) {
//Both soils is dry -> turn on pump
Serial.print("Pump:ON");
} else if (moisture_2a >= soilDry && moisture_2b >= soilWet && moisture_2b < soilDry) {
// above is dry, below is ok -> turn on pump
Serial.print("Pump:ON");
} else if (moisture_2a >= soilWet && moisture_2a < soilDry && moisture_2b >= soilDry) {
// above is ok, below is dry -> turn on pump
Serial.print("Pump:ON");
} else if (moisture_2a <= soilWet && moisture_2b >= soilWet && moisture_2b < soilDry) {
// above is too wet, below is ok -> turn off pump
Serial.print("Pump:OFF");
} else if (moisture_2a >= soilWet && moisture_2a < soilDry && moisture_2b <= soilWet) {
// above is ok, below too wet -> turn off pump
Serial.print("Pump:OFF");
}
/////// Not sure
else if (moisture_2a >= soilDry && moisture_2b <= soilWet) {
// above is dry, below is too wet -> turn off pump
Serial.print("Pump:OFF");
} else if (moisture_2a <= soilWet && moisture_2b >= soilDry) {
// above is too wet, below is dry -> turn off pump
Serial.print("Pump:OFF");
}
else {
Serial.println("Pump:ERROR with water pumping 2");
}
delay(1000); // Take a reading every second for testing
}