Soil Moisture Sensor Calibration




Introduction: Soil Moisture Sensor Calibration

About: Finding a simple solution to a problem.

There are many soil moisture meters on the market to help the gardener decide when to water their plants. Unfortunately, grabbing a handful of soil and inspecting the colour and texture is as reliable as many of these gadgets! Some probes even register “dry” when dipped in distilled water. Cheap DIY soil moisture sensors are readily available in places like Ebay or Amazon. Although they will give a signal according to the soil moisture, relating the sensor output to the demands of the crop is more difficult. When deciding to water your plants, what really matters is how easy it is for the plant to extract water from the growing media. Most moisture sensors measure the amount of water in the soil rather than whether the water is available to the plant. A tensiometer is the usual way to measure how well the water is bonded to the soil. This instrument measures the pressure required to remove the water from the growing media, common units of pressure used in field work are millibar and kPa. For comparison, atmospheric pressure is about 1000 millibars or 100 kPa. Depending on the plant variety and type of soil, plants can start to wilt when the pressure exceeds about 100 mIllibars.

This Instructable describes a way of calibrating a cheaper and more readily available moisture sensor against a DIY tensiometer. Although this could be done manually by plotting the results on paper, a simple datalogger is used and the results posted on ThingSpeak. The method can be used to easily calibrate a soil moisture sensor to a tensiometer reference so that the gardener can make informed decisions on when to irrigate, save water and grow healthy crops.


The parts for this Instructable are easily found by searching sites like Amazon or Ebay. The most expensive component is the MPX5010DP pressure sensor which is available for less than $10. Components used in this Instructable are:

Capacitive soil moisture sensor v1.2
ESP32 development board
Tropf Blumat ceramic probe
NXP pressure sensor MPX5010DP or MPX5100DP
Rubber stoppers
6mm OD clear plastic tube
2 100K resistors
1 1M resistor
Connecting wires
Plant pot with compost
Boiled water
ThingSpeak account
Arduino IDE to flash ESP32
Access to internet connected WiFi

Step 1: Tensiometer

A soil tensiometer is a water filled tube with a porous ceramic cup at one end and a pressure gauge at the other. The ceramic cup end is buried in the soil so that the cup is in close contact with the soil. Depending on the soil water content, water will pass out of the tensiometer and reduce the internal pressure in the tube. The pressure reduction is a direct measure of the soil affinity for water and an indicator of how difficult it for plants to extract water.

Tensiometers are made for the professional grower but tend to be expensive. Tropf-Blumat manufacture an automatic watering device for the amateur market which uses a ceramic probe to control the irrigation. The probe from one of these units can be used to make a tensiometer costing only a few dollars.

The first task is to separate the plastic diaphragm from the green head of the probe. It is a pop fit into the green head, judicious cutting and snipping will separate the two parts. Once split apart, drill a 1 mm hole in the diaphragm pip. The plastic pipe is connected to the pip on the top of the diaphragm for pressure measurements. Warming the end of the tube in boiling water will soften the plastic to make fitting easier. Alternatively, a traditional bored rubber stopper could be used instead of recycling the diaphram. The pressure in the probe can be measured directly by measuring the height of a water column supported in a U tube. Each inch of water supported is equivalent to 2.5 millibars of pressure.

Before use, the ceramic probe must be soaked in water for a few hours to wet the ceramic thoroughly. The probe is then filled with water and the stopper fitted. It is best to use boiled water to prevent air bubbles forming inside the probe. The probe is then firmly inserted into damp compost and left to stabilise before measuring the pressure.

Tensiometer pressure can also be measured with an electronic pressure gauge such as the MPX5010DP. The relationship between pressure and output voltage from the gauge can be found in the sensor data sheet. Alternatively, the sensor can be calibrated directly from a water filled U tube manometer.

Step 2: Capacitive Soil Moisture Sensor

The capacitive soil moisture sensor calibrated in this Instructable was the v1.2 readily and cheaply available on the Internet. This type of sensor was chosen over the types that measure soil resistance because the probes can corrode and they are affected by fertiliser. The capacitive sensors work by measuring how much the water content changes the capacitor in the probe which in turn provides the output voltage of the probe.

There should be a 1M resistor between the signal and ground pin on the sensor. Although the resistor is mounted on the card, sometimes the ground connection is missing. Symptoms include slow response to changing conditions. There are several work arounds if this connection is missing. Those skilled in soldering can link the resistor to ground on the board. Alternatively, an external 1M resistor can be used instead. As the resistor discharges a capacitor on the output, this could be achieved in software by shorting the output pin momentarily to ground before measuring the sensor.

Step 3: Data Logging

The tensiometer and capacitive probe are firmly placed together in a plant pot containing wet peat compost. A few hours are needed for the system to settle and give steady readings from the sensors. An ESP32 development circuit board was used in this Instructable to measure the sensor outputs and post the results to ThingSpeak. The circuit board is widely available from cheap Chinese suppliers and several of the pins can be used for analogue voltage measurements. As the pressure sensor outputs a 5V signal, this voltage is halved by the two 100K resistors to avoid damaging the 3.3V ESP32. Other types of sensor can be connected to the ESP32 provided the output signal is compatible.

Finally, the plant pot is allowed to dry out naturally and the sensor readings posted every 10 minutes to ThingSpeak. As the ESP32 has spare GPIO pins, other sensors like temperature and humidity can be added to give further information about the environment.

Step 4: ESP32 Program

You will need to set up your own ThingSpeak account if you do not have one already.

The Arduino IDE sketch to measure the sensor outputs and post them to ThingSpeak is shown below. This is a very basic program with no error trapping or progress reporting to the serial port, you may like to embellish it to your needs. Also, you need to insert your own ssid, password and API key before flashing to the ESP32.

Once the sensors are connected and the ESP32 powered from a USB power supply, readings are sent to ThingSpeak every 10 minutes. Different read times may be set within the program.


#include <WiFi.h>
WiFiClient client;
void setup() {
void loop() { 
  if(WiFi.status() != WL_CONNECTED){    
 client.connect("", 80);
float pressure = analogRead(34);
float cap = analogRead(35);
pressure = pressure * 0.038; //Change to millibar
String url = "/update?api_key=";   // Build string for posting
    url += "Your API key";
    url += "&field1=";
    url += String(pressure);
    url += "&field2=";
    url += String(cap); 
      client.print(String("GET ") + url + " HTTP/1.1\r\n" +
                 "Host: " + "" + "\r\n" + 
                 "Connection: close\r\n\r\n");
  delay(600000);                       //Repeat every 10 mins
void connectWiFi(){     
    while (WiFi.status() != WL_CONNECTED) {

Step 5: Results and Conclusions

The ThingSpeak plots show the sensor readings increasing as the peat dries out. When growing plants like tomatoes in peat, a tensiometer reading of 60 millibars is the optimum time to water the plants. Instead of using a tensiometer, the scatter plot says that the much more robust and cheaper capacitive sensor can be used if we start irrigation when the sensor reading reaches 1900.

In summary, this Instructable shows how to find the irrigation trigger point for a cheap soil moisture sensor by calibrating it against a reference tensiometer. Watering plants at the correct moisture level will give a much healthier crop and save water.

Fix It Contest

Participated in the
Fix It Contest

1 Person Made This Project!


  • Teach With Tinkercad Contest

    Teach With Tinkercad Contest
  • Eggs Challenge

    Eggs Challenge
  • Microcontroller Contest

    Microcontroller Contest



1 year ago

not sure where ive gone wrong, my sensor is non functional.
it has a steady reading while in air but jumps around the original number when moisture is introduced.
I've added the schematic and board I was using, thanks for any help!


Reply 1 year ago

Hi, as you get a good reading in the dry, it sounds like your voltage measuring setup is working ok. Could be you have a faulty sensor, pinholes in the varnish on the probe would cause all kinds of current leakage paths and random signals.
Try a different sensor or waterproof the original with varnish to see if that helps.


Reply 1 year ago

I've changed boards and sealed it, sadly still same issue :/, i am using NE555D but ordered a TL555C (like the v2.0 sensors have) and will test again once arrives.

and the moisture im introducing is me grabbing it with my hand, so no direct liquid is toughing it.


Reply 1 year ago

OK, try dipping the sensor area in a glass of water to give the maximum moisture reading. Hand squeezing will introduce all kinds of stray values.


Reply 1 year ago

ok, definitely jumps much less in water but still jumping both above and below air value.
thank you again for the assistance and replies


1 year ago on Step 5

Hi why do you say the sensor is more robust? Thinking about just using the tensiometer to measure soil moisture. Thanks!


Best Answer 1 year ago

I was using robust to indicate ease of operation rather than physical strength. The tensiometer needs routine checking for water level and leaks whereas the capacitative sensor should not need any further attention. Provided the tensiometer is air tight and the soil is not allowed to completely dry out, the device should work for a whole season without needing a top up of water.


1 year ago on Step 2

There are two errors in the schematic below step 2:
1. There should be a connection from pen 4 to vcc or otherwise stated: there is a black dot missing below the black dot right of the 100nF capacitor.
2. The resistor of 330k should be 330 ohms.


Reply 1 year ago

Thanks for pointing that out. I will check the circuit and correct the diagram. As these sensors are so cheap, I hope no one has actually tried to build one from scratch and spent time trying to make it work.