Arduino Nano ESP32 - Soil Moisture Sensor Pump

In this tutorial, We are going to learn how to use the Arduino Nano ESP32 to control the pump according to the value read from the capacitive soil moisture sensor.

Hardware Preparation

1×Arduino Nano ESP32
1×USB Cable Type-C
1×Capacitive Soil Moisture Sensor
1×Relay
1×12V Pump
1×Vinyl Tube
1×12V Power Adapter
1×(Optional) DC Power Jack
1×Breadboard
1×Jumper Wires
1×(Recommended) Screw Terminal Adapter for Arduino Nano

Or you can buy the following sensor kit:

1×DIYables Sensor Kit 30 types, 69 units
Disclosure: Some of the links provided in this section are Amazon affiliate links. We may receive a commission for any purchases made through these links at no additional cost to you. We appreciate your support.

Buy Note: Many soil moisture sensors available in the market are unreliable, regardless of their version. We strongly recommend buying the sensor from the DIYables brand using the link provided above. We tested it, and it worked reliably.

Overview of soil moisture sensor and Pump

If you do not know about pump and soil moisture sensor (pinout, how it works, how to program ...), learn about them in the following tutorials:

How It Works

Arduino Nano ESP32 periodically reads the value from the capacitive soil moisture sensor. Based on the soil moisture value, it will take the following actions:

  • If the soil moisture value is below a threshold, Arduino Nano ESP32 automatically activates a relay to turn a pump on.
  • Otherwise, Arduino Nano ESP32 automatically deactivates a relay to turn a pump off.

Wiring Diagram

The wiring diagram between Arduino Nano ESP32 and soil moisture sensor Pump

This image is created using Fritzing. Click to enlarge image

Arduino Nano ESP32 Code

/* * This Arduino Nano ESP32 code was developed by newbiely.com * * This Arduino Nano ESP32 code is made available for public use without any restriction * * For comprehensive instructions and wiring diagrams, please visit: * https://newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-soil-moisture-sensor-pump */ #define RELAY_PIN D2 // The Arduino Nano ESP32 pin that connects to relay #define SENSOR_PIN A2 // The Arduino Nano ESP32 pin that connects to AOUT pin of moisture sensor #define THRESHOLD 500 // => CHANGE YOUR THRESHOLD HERE void setup() { Serial.begin(9600); pinMode(RELAY_PIN, OUTPUT); } void loop() { int value = analogRead(SENSOR_PIN); // read the analog value from soild moisture sensor if (value < THRESHOLD) { Serial.print("The soil moisture is DRY => activate pump"); digitalWrite(RELAY_PIN, HIGH); } else { Serial.print("The soil moisture is WET => deactivate the pump"); digitalWrite(RELAY_PIN, LOW); } Serial.print(" ("); Serial.print(value); Serial.println(")"); delay(1000); }

Detailed Instructions

COM6
Send
The soil moisture is DRY => activate the pump (112) The soil moisture is DRY => activate the pump (121) The soil moisture is DRY => activate the pump (341) The soil moisture is DRY => activate the pump (464) The soil moisture is WET=> deactivate the pump (665) The soil moisture is WET=> deactivate the pump (711) The soil moisture is WET=> deactivate the pump (765) The soil moisture is WET=> deactivate the pump (775)
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Code Explanation

Read the line-by-line explanation in the comment lines of the source code!

Video Tutorial