Ingo Lohs
Published © GPL3+

MyTongue Feels So Dry

An introduction to moisture measurement.

BeginnerProtip1 hour1,775
MyTongue Feels So Dry

Things used in this project

Hardware components

a Tongue
or alternative a glass of water
Arduino UNO
Arduino UNO
soil measurement sensor

Software apps and online services

Arduino Web Editor
Arduino Web Editor


Read more


soil measurement

    // 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;
    void setup() 
      Serial.begin( baudrate );
      while(!Serial); //Waiting for Serial connection
      pinMode(soilMoisturePin1, OUTPUT);
      pinMode(soilMoisturePin2, OUTPUT);
    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: ");
      Serial.println( value_water );


Ingo Lohs

Ingo Lohs

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