Arduino Soil Moisture Sensor Module

Viewing a single blog post

Arduino Soil Moisture Sensor Module


If you are designing your own intelligent “Graden Computer” with an optional digital plant moisture sensor/water pump controller that lights an LED to alert the user when it is time to water a potted plant, and/or turn on a water pump to quench the thirst, here is an Arduino Primer for you. No doubt, an Arduino can convert your favorite pots into self-watering planters, keeping your plants from drying out and reducing the time you spend watering. Self-watering system is ideal for people frequently on vacation, and takes the guesswork out of watering. Plants draw up moisture as they need it!


The hardware is consists of an Arduino microcontroller (here an Arduino Uno R3) and a pre-wired soil moisture sensor module. The soil moisture sensor module , built around the 


 comparator, gives an active-low (L) level output when the soil is dry (determined by a pre-setted threshold value). This digital output (wet soil → L / dry soil → H) is routed to one I/O terminal (D2) of the Arduino microcontroller. Based on this input (at D2) arduino gives an active-high (H) output through D13 when soil is dry, and an active-low (L) output when soil is wet.


soil moisture sensor module

(soil moisture sensor module)


The little “demo” code does just the same as other regular programs. The code controls the LED connected to pin D13 in connection with the input level on Pin D2. D13 output can also be used to enable/disable a water pump/similar controller circuitry.

#define IND_OP 13
#define SEN_IN 2
void setup() {
   pinMode(IND_OP, OUTPUT);
  pinMode(SEN_IN, INPUT);
void loop() {
  if(digitalRead(SEN_IN) == HIGH){
    digitalWrite(IND_OP, HIGH);
  } else {
    digitalWrite(IND_OP, LOW);

Hook Up Note

The +5V supply line (VCC) of the module is linked to the 5V line of the Arduino. GND of the module is the common (0V) connection. The digital signal output to be detected (usually marked as DO in the module) is applied to D2 input of the Arduino. Analog output (marked as AO) from the module is not used here. Sensor-head of the module contains two probes in a small metal pcb. When the sensor-head is inserted in wet soil, mositure bridges the probes through a low-resistance path (when soil is dry, resistance between the probes is also high). A potentiometer is included in the module for adjusting the soil wet/dry detection sensitivity according to actual requirements.


Analog Link

It is also possible to read the amount of moisture present in the soil (for judging whether the soil is wet or dry) by linking the analog output (AO) of the module, to one analog input (A0) of the Arduino. Here is the test code that indicates the soil wet/dry conditions using just two LEDs (green & red).

 int GLED= 13; // Wet Indicator at Digital PIN D13
int RLED= 12; // Dry Indicator at Digital PIN D12
int SENSE= 0; // Soil Sensor input at Analog PIN A0
int value= 0;
void setup() {
   pinMode(GLED, OUTPUT);
   pinMode(RLED, OUTPUT);
   Serial.println("SOIL MOISTURE SENSOR");
void loop() {
   value= analogRead(SENSE);
   value= value/10;

Zero – Arduino Try Out

From the circuit diagram of the module, it is clear that, apart from the module only a few external components are needed to build a relay-driver circuit. Yes, there is a chance to realize one simple non-arduino project of a forgetful plant waterer! If you are looking for this option, digital output of the module must be linked to the little circuit shown below, and use an external 5VDC power supply.


If higher current loads are to be driven a PNP transistor can be added to the module’s digital output. Here the addition of 


 transistor controls an electro-magnetic relay (RL1) for driving high-current/high voltage loads like water pump motors through its N/C contacts (when soil is wet, relay remains in energized state).

soil moisture sensor experiment

Posted in Arduino, WSN on Sep 01, 2017


Please sign in to comment!