OC
OceanRemote
Low-code IoT platform
← Back to Course

Irrigation Basics - Part 2

Irrigation Basics - Part 2

🛠️ Irrigation Basics - Part 2: Practical Implementation

💧 What You'll Learn:

  • ⚙️ Build an automatic irrigation system that waters only when needed
  • 🔌 Wire relay modules safely to control water pumps
  • 📊 Set custom soil moisture thresholds for different crops
  • 💧 Save 40-60% water compared to timer-based irrigation

🛒 Components You Need

  • 🔹 ESP32 microcontroller — $8 · Brain of the system
  • 🔹 1-Channel Relay Module — $5 · Controls pump on/off
  • 🔹 Soil Moisture Sensor (Capacitive) — $8 · Measures soil water content
  • 🔹 12V Water Pump — $10 · Pumps water to crops
  • 🔹 Water tubing & drip fittings — $5 · Distribute water to plants
  • 🔹 12V Power Supply — $8 · Powers pump (2A minimum)
💡 Total System Cost: ~$44

Pays for itself in 2-3 months through water savings! A typical 1-acre farm saves $120-180/year on water bills.

🔌 Wiring Diagram

ESP32 → Relay Module
GPIO26 → IN pin (control signal)
3.3V   → VCC (relay power)
GND    → GND

Relay → Water Pump (12V circuit - HIGH VOLTAGE!)
COM    → Pump positive (+)
NO     → 12V power supply positive (+)
Pump negative → 12V power supply negative (-)

ESP32 → Soil Moisture Sensor (Capacitive)
GPIO34 (ADC) → AO (analog out)
3.3V         → VCC
GND          → GND
    
⚠️ CRITICAL SAFETY WARNING:

Never connect the water pump directly to ESP32 pins! The pump draws 200-500mA (up to 2A startup), which will destroy your ESP32. ALWAYS use a relay module to isolate high-power circuits.

📖 Complete Irrigation Code (with Fail-Safe)

#include <WiFi.h>

#define RELAY_PIN 26
#define SOIL_PIN 34

// Moisture thresholds (adjust based on your soil type)
const int DRY_THRESHOLD = 30;       // Water when below 30%
const int WET_THRESHOLD = 70;       // Stop if already wet
const unsigned long PUMP_RUN_TIME = 300000;  // 5 minutes max
const unsigned long CHECK_INTERVAL = 3600000; // Check every hour
const unsigned long MIN_WATER_TIME = 60000;   // Minimum 1 minute run

unsigned long lastCheck = 0;
bool pumpRunning = false;
unsigned long pumpStartTime = 0;

void setup() {
    Serial.begin(115200);
    pinMode(RELAY_PIN, OUTPUT);
    digitalWrite(RELAY_PIN, HIGH);  // Relay HIGH = Pump OFF
    Serial.println("💧 Smart Irrigation System Started");
    Serial.println("=================================");
}

int getSoilMoisturePercent() {
    int raw = analogRead(SOIL_PIN);
    // Dry: 4095 (air), Wet: 1500 (saturated)
    int percent = map(raw, 4095, 1500, 0, 100);
    percent = constrain(percent, 0, 100);
    return percent;
}

void startPump() {
    digitalWrite(RELAY_PIN, LOW);   // Relay LOW = Pump ON
    pumpRunning = true;
    pumpStartTime = millis();
    Serial.println("💧 PUMP ON - Watering crops");
}

void stopPump() {
    digitalWrite(RELAY_PIN, HIGH);  // Relay HIGH = Pump OFF
    pumpRunning = false;
    Serial.println("💧 PUMP OFF - Watering complete");
}

void loop() {
    unsigned long now = millis();
    
    // Auto-stop after max run time (fail-safe)
    if (pumpRunning && (now - pumpStartTime >= PUMP_RUN_TIME)) {
        Serial.println("⚠️ Max run time reached - stopping pump (fail-safe)");
        stopPump();
    }
    
    // Check soil moisture every hour (only when pump is off)
    if (!pumpRunning && (now - lastCheck >= CHECK_INTERVAL)) {
        lastCheck = now;
        
        int moisture = getSoilMoisturePercent();
        Serial.printf("📊 Soil moisture: %d%%\n", moisture);
        
        if (moisture < DRY_THRESHOLD) {
            Serial.println("⚠️ Soil too dry! Starting irrigation...");
            startPump();
        } else if (moisture > WET_THRESHOLD) {
            Serial.println("✅ Soil moisture is good. No watering needed.");
        } else {
            Serial.printf("🌿 Soil moisture optimal (%d%%). No action needed.\n", moisture);
        }
    }
}
    
💡 Adjusting Moisture Thresholds by Crop:
  • 🍅 Tomatoes: Water at 25% dry, stop at 65% (optimal: 40-55%)
  • 🌽 Maize/Corn: Water at 20% dry, stop at 60% (optimal: 35-50%)
  • 🥬 Leafy greens (kale, spinach): Water at 35% dry, stop at 75%
  • 🥔 Potatoes: Water at 30% dry, stop at 70% (critical during tuber formation)
  • 🌵 Succulents/Drought crops: Water at 15% dry, stop at 50%

💡 Pro tip: Test your soil type first. Sandy soil needs 20% lower thresholds (drains faster). Clay soil needs 15% higher (holds water longer).

📖 Case Study — Smart Irrigation Saves 55% Water, Kenya:

A 5-acre tomato farm replaced timer-based irrigation with soil moisture sensors:

  • 💧 Water savings: 55% reduction (from 8,000L to 3,600L/day)
  • 💰 Cost savings: $95/month on water bills
  • 📈 Yield increase: 28% better tomato production (no over/under watering)
  • Power: Solar-powered ESP32 runs 6+ months on deep sleep
  • 📊 ROI: System paid for itself in 6 weeks!

"My tomatoes never looked better. I used to water every day whether needed or not. Now the system waters only when the soil is dry. I've cut my water bill in half!" — Farmer, Kiambu County, Kenya

🌟 Advanced Features to Add (Next Lesson):
  • 📱 Remote monitoring: Add WiFi to see moisture from your phone
  • 🌧️ Rain delay: Add a rain sensor to skip watering when raining
  • Time restrictions: Water only in morning/evening (prevents evaporation)
  • 📊 Data logging: Track moisture trends over weeks/months
  • 🔋 Deep sleep: Add deep sleep to run for months on battery
⚠️ Common Mistakes to Avoid:
  • Using resistive soil sensors: They corrode in weeks! Use capacitive sensors (last years)
  • No fail-safe timer: Always add max run time in case sensor fails
  • Watering at noon: 50% of water evaporates! Water at sunrise or sunset
  • Wrong pump voltage: ESP32 is 3.3V logic, relay handles 12V/24V pump power
🎯 Key Takeaways:
  • ✅ Relay modules protect your ESP32 from high-power devices (pumps, valves, lights)
  • ✅ Capacitive soil moisture sensors save 40-60% water compared to timers
  • ✅ Different crops need different moisture thresholds — adjust for your farm
  • ✅ Always add a max run time (fail-safe) to prevent flooding
  • ✅ This $44 system pays for itself in 4-6 weeks through water savings
  • ✅ Capacitive sensors last years; resistive sensors corrode in weeks
💡 Key Takeaways:
  • Apply these concepts directly to your farm or project.
  • Take notes on important details for the quiz.
  • Use the button below to track your progress.