Analog Capacitive Soil Moisture Sensor


Our soil moisture sensor measures soil mositure levels by capacitive sensing rather than resistive sensing like other sensors on the market. It is made of corrosion resistant material which gives it an excellent service life. Insert it in to the soil around your plants and impress your friends with real-time soil moisture data! This module includes an on-board voltage regulator which gives it an operating voltage range of 3.3 ~ 5.5V. It is perfect for low-voltage MCUs, both 3.3V and 5V. For compatibility with a Raspberry Pi it will need an ADC converter. This soil moisture sensor is compatible with our 3-pin "Gravity" interface, which can be directly connected to the Gravity I/O expansion shield.




Connection Diagram

Calibration Code

void setup() {
  Serial.begin(9600); // open serial port, set the baud rate as 9600 bps
void loop() {
  int val;
  val = analogRead(0); //connect sensor to Analog 0
  Serial.println(val); //print the value to serial port


Calibration Range

  1. Open the serial port monitor and set the baud rate to 9600

  2. Record the sensor value when the probe is exposed to the air as "Value 1". This is the boundary value of dry soil “Humidity: 0%RH”

  3. Take a cup of water and insert the probe into it no further than the red line in the diagram

  4. Record the sensor value when the probe is exposed to the water as "Value 2". This is the boundary value of moist soil “Humidity: 100%RH”

warning_yellow.png The components on this board are NOT waterproof, do not expose to moisture further than the red line. (If you want to protect components from the elements, try using a length of wide heat shrink tubing around the upper-section of the board.) There is an inverse ratio between the sensor output value and soil moisture.

Section Settings

The final output value is affected by probe insertion depth and how tight the soil packed around it is. We regard "value_1" as dry soil and "value_2" as soaked soil. This is the sensor detection range. For example: Value_1 = 520; Value_2 = 260. The range will be divided into three sections: dry, wet, water. Their related values are:

Test Code

 This example reads Capacitive Soil Moisture Sensor.

 Created 2015-10-21
 By berinie Chen <>

 GNU Lesser General Public License.
 See <> for details.
 All above must be included in any redistribution

/***********Notice and Trouble shooting***************
 1.Connection and Diagram can be found here:
 2.This code is tested on Arduino Uno.
 3.Sensor is connect to Analog 0 port.

const int AirValue = 520;   //you need to replace this value with Value_1
const int WaterValue = 260;  //you need to replace this value with Value_2
int intervals = (AirValue - WaterValue)/3;
int soilMoistureValue = 0;
void setup() {
  Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
void loop() {
soilMoistureValue = analogRead(A0);  //put Sensor insert into soil
if(soilMoistureValue > WaterValue && soilMoistureValue < (WaterValue + intervals))
  Serial.println("Very Wet");
else if(soilMoistureValue > (WaterValue + intervals) && soilMoistureValue < (AirValue - intervals))
else if(soilMoistureValue < AirValue && soilMoistureValue > (AirValue - intervals))


There are no questions about this product yet.

For any questions/advice/cool ideas to share with us, please visit DFRobot Forum.

More Documentation