Blog

Capacitive Soil Moisture Sensor

Capacitive Soil Moisture Sensor

Corrosion-Resistant Humidity Detection for Plants and Agricultural Applications

Introduction

The Capacitive Soil Moisture Sensor measures water content in soil by detecting changes in capacitance rather than resistance (like traditional probes). This makes it resistant to corrosion and provides more accurate, long-lasting measurements for smart gardening and agricultural systems.

Capacitive Soil Moisture Sensor

Key Features

🛡️ Corrosion Proof

No exposed metal electrodes

💧 Accurate Measurement

0-100% volumetric water content

🔌 Easy Interface

Analog or digital output

🌱 Plant Safe

Low power consumption

Technical Specifications

Operating Voltage3.3V – 5.5V DC
Output SignalAnalog 0-VCC (also digital option)
Measurement Range0% (dry) to 100% (water)
Probe MaterialCorrosion-resistant PCB
Current Consumption<5mA during measurement
Interface3-pin (VCC, GND, OUT)
Dimensions60mm × 20mm × 5mm
Cable Length1.5m (standard)

Pin Configuration

Sensor Pinout

Wire ColorFunctionArduino Connection
RedVCC3.3V/5V
BlackGNDGND
YellowOUTAnalog Pin (A0-A5)

Wiring with Arduino

Arduino Wiring

// Basic Connection:
// Red   → Arduino 5V
// Black → Arduino GND
// Yellow → Arduino A0

Basic Reading Example

const int sensorPin = A0;

void setup() {
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(sensorPin);
  int moisturePercent = map(sensorValue, 0, 1023, 0, 100);
  
  Serial.print("Raw Value: ");
  Serial.print(sensorValue);
  Serial.print(" | Moisture: ");
  Serial.print(moisturePercent);
  Serial.println("%");
  
  delay(1000);
}

Calibration Procedure

  1. Dry Calibration: Measure sensor in completely dry soil (record value as 0%)
  2. Wet Calibration: Measure sensor submerged in water (record value as 100%)
  3. Update Code: Adjust map() function with your calibration values
// After calibration:
int moisturePercent = map(sensorValue, dryValue, wetValue, 0, 100);
Calibration Process

Advanced Usage

Auto Watering System

if(moisturePercent < 30) {
  digitalWrite(relayPin, HIGH);
  delay(2000);
  digitalWrite(relayPin, LOW);
}

Data Logging

#include <SD.h>
File dataFile = SD.open("datalog.txt", FILE_WRITE);
dataFile.println(moisturePercent);
dataFile.close();

Wireless Monitoring

#include <ESP8266WiFi.h>
WiFiClient client;
client.print("GET /update?field1=");
client.print(moisturePercent);

Troubleshooting

Inconsistent Readings

  • Ensure good soil contact around probe
  • Check for air pockets near sensor
  • Re-calibrate for your soil type

Always Shows 100%

  • Verify wiring (possible short circuit)
  • Check sensor for physical damage
  • Test with different power supply

No Response

  • Confirm power supply connections
  • Check analog pin assignment
  • Test with multimeter for output voltage