Soil Moisture Sensor

-Tutorial by Rui Santos, RandomNerdTutorials

(Edited by TechToast)

 

The soil moisture sensor or the hygrometer is usually used to detect the humidity of the soil. So, it is perfect to build an automatic watering system or to monitor the soil moisture of your plants.

The sensor is set up by two pieces: the electronic board (at the right), and the probe with two pads, that detects the water content (at the left).

moisture sensor

The sensor has a built-in potentiometer for sensitivity adjustment of the digital output (D0), a power LED and a digital output LED, as you can see in the following figure.

labeled sensor

You can also read this guide for the Rain Sensor FC-37 or YL-83 with Arduino.

How does it work?

The voltage that the sensor outputs changes accordingly to the water content in the soil.

When the soil is:

  • Wet: the output voltage decreases
  • Dry: the output voltage increases

soil moisture sensor

The output can be a digital signal (D0) LOW or HIGH, depending on the water content. If the soil humidity exceeds a certain predefined threshold value, the modules outputs LOW, otherwise it outputs HIGH. The threshold value for the digital signal can be adjusted using the potentiometer.

The output can be a analog signal and so you’ll get a value between 0 and 1023.

Example: Soil Moisture Sensor with the Arduino

This is a simple example for you to understand how you can use the soil moisture sensor in your projects with Arduino.

In this example, you’ll read the analog sensor output values using the Arduino and print those readings in the Arduino IDE serial monitor.

Parts required

For this example, you’ll need the following components:

 You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!

Pin Wiring

Wiring your sensor to the Arduino is pretty simple:

Pin Wiring to Arduino Uno
A0 Analog Pins
D0 Digital Pins
GND GND
VCC 5V

Schematics

To complete the project, follow these schematics:

moisture sensor fritzing

Code

Upload the following sketch to your Arduino board:

/*
 
 All the resources for this project:
 https://randomnerdtutorials.com/
 
*/

int rainPin = A0;
int greenLED = 6;
int redLED = 7;
// you can adjust the threshold value
int thresholdValue = 800;

void setup(){
  pinMode(rainPin, INPUT);
  pinMode(greenLED, OUTPUT);
  pinMode(redLED, OUTPUT);
  digitalWrite(greenLED, LOW);
  digitalWrite(redLED, LOW);
  Serial.begin(9600);
}

void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(rainPin);
  Serial.print(sensorValue);
  if(sensorValue < thresholdValue){
    Serial.println(" - Doesn't need watering");
    digitalWrite(redLED, LOW);
    digitalWrite(greenLED, HIGH);
  }
  else {
    Serial.println(" - Time to water your plant");
    digitalWrite(redLED, HIGH);
    digitalWrite(greenLED, LOW);
  }
  delay(500);
}

View raw code

Open the Arduino IDE serial monitor to see the values. Then, try your sensor in a wet and in a dry soil and see what happens.

When the analog value goes above a certain threshold, a red LED will turn on (indicates that the plant needs watering), and when the value goes below a certain threshold, a green LED will turn on (indicates that the plant is ok).

Wrapping Up

The moisture sensor allows to monitor the water content in the soil. This is useful if you want to build an automatic watering system. You can also use it to just monitor your plants soil moisture.

Feel free to leave a comment below if you have any questions.

Back to blog

Leave a comment