Ingo Lohs
Published © GPL3+

I Keep my Cucumber Growing Conditions Moist

This project creates a relay and a water pump for monitoring moisture.

BeginnerShowcase (no instructions)2 hours4,710
I Keep my Cucumber Growing Conditions Moist

Things used in this project

Hardware components

a cucumber breading ;-)
or another dry gardening
Arduino UNO
Arduino UNO
soil measurement sensor
Relay (generic)
SONGLE Power Relay 5V SRD-5VDC-SL-C with 3 pins
water pump 12V DC
silikon pipe 8mm outside x 6mm inside
Jumper wires (generic)
Jumper wires (generic)
DC connector male / female

Software apps and online services

Arduino Web Editor
Arduino Web Editor


Read more


a relay starts a water pump

// read the value from a soil moisture sensor
    // PIN in Option "easy"
    // GND to GND 
    // VCC to 5 Volt
    // PIN in Option "anti_oxidation"
    int soilMoisturePin1 = 4;    // VCC not to 5 Volts - in this Option to Digital Output 4
    int soilMoisturePin2 = 3;    // GNG not to GND - in this Option to Digital Output 3
    int soilMoisturePin3 = A0;   // SIGNAL an einen Analog Pin vom Arduino Board
    int baudrate = 9600;
    // 1023 = 100% RAW-Wert is between 0 wet and 1023 dry on 5 Volt
    //  901 = 100% RAW-Wert is between 0 wet and  903 dry on VIN Volt
    //  672 = 100% RAW-Wert is between 0 wet and  672 dry on 3,3 Volt
    // The sensor returned 18% with RAW 188 when fully sunk into the water and light wave movements.
    const int dry = 1023;
    const int relayPin = 6;  // SIGNAL from Relay
    int pump_threshold = 60; // it soil DRY >=60% then activate a pump
    void setup() 
      while(!Serial); //Waiting for Serial connection
      pinMode(soilMoisturePin1, OUTPUT);
      pinMode(soilMoisturePin2, OUTPUT);
      pinMode(relayPin, OUTPUT); //Set pin 6 as an OUTPUT
      digitalWrite(relayPin, LOW); // Relay off - no pump at start
    int readSoilMoisture()
    // Das größte Problem eines Feuchtigkeitssensors ist Oxidation. Der Korrosion wird durch Elektrolyse entgegengewirkt mit dieser Funktion.
    // Diese Funktion aktiviert unseren Soil Moisture Sensor für 500ms, liest den aktuellen Wert aus, dreht die Polarität um und deaktiviert den Sensor wieder.
    // The biggest problem of a moisture sensor is oxidation. Corrosion is counteracted by electrolysis with this function.
    // This function activates our Soil Moisture Sensor for 500ms, reads the current value, rotates the polarity, and deactivates the sensor.
    int value; 
    digitalWrite(soilMoisturePin1, HIGH);
    digitalWrite(soilMoisturePin2, LOW);
    delay(500); // es wird jede 0,5 sec gemessen - dies könnte auch deutlich seltener eingestellt werden
    value = analogRead(soilMoisturePin3);
    digitalWrite(soilMoisturePin1, LOW);
    digitalWrite(soilMoisturePin2, HIGH);
    digitalWrite(soilMoisturePin2, LOW);
    return value;
    void loop() 
      // Option "easy": int value_water = analogRead(soilMoisturePin3); 
      int value_water = readSoilMoisture(); 
      String water = String((int)((((double)value_water/dry)*100.0)));//Convert Raw value to percentage. This is a generic calculation, depending on raw values from 0 to 1023. 
      Serial.print("Soil moisture: ");
      Serial.print("% Raw value: ");
      //Change String2Integer and check if threshold is reached
      if (water.toInt() >= pump_threshold) // 
      Serial.println("Too dry, we should water it.");
      digitalWrite(relayPin, HIGH);
      Serial.println("It is wet enough, no need to water it.");
      digitalWrite(relayPin, LOW);



Ingo Lohs

Ingo Lohs

182 projects • 184 followers
I am well over 50 years and come from the middle of Germany.