บทความ: สร้างระบบรดน้ำอัตโนมัติด้วย ESP32 และ Soil Moisture Sensor

เรียนรู้วิธีสร้างระบบรดน้ำอัตโนมัติ Smart Irrigation System ด้วย ESP32 และเซ็นเซอร์วัดความชื้นในดิน พร้อมโค้ดตัวอย่างและคำอธิบายภาษาไทยที่เข้าใจง่าย

📅 13 มีนาคม 2026⏱️ 15 นาที🎯 ระดับ: เริ่มต้น - กลาง🌱 ประหยัดน้ำ

ภาพรวมโปรเจกต์ 🌾

Smart Irrigation System หรือระบบรดน้ำอัตโนมัติคือโปรเจกต์ IoT ที่ใช้เซ็นเซอร์วัดความชื้นในดิน (Soil Moisture Sensor) เพื่อตรวจสอบว่าดินของคุณต้องการน้ำหรือไม่ เมื่อความชื้นต่ำกว่าค่าที่กำหนด ระบบจะเปิดปั๊มน้ำอัตโนมัติ และปิดเมื่อดินชุ่มพอดี

✨ ประโยชน์ของระบบ:

  • 💧 ประหยัดน้ำ: รดน้ำเมื่อจำเป็นเท่านั้น ไม่รดโดยใช้เวลาคงที่
  • 🌱 ดูแลพืชดีขึ้น: ความชื้นเหมาะสม พืชเจริญเติบโตดี
  • ประหยัดเวลา: ไม่ต้องกังวลเรื่องรดน้ำทุกวัน
  • 📊 เชื่อมต่อ CynoIoT: ติดตามผ่านแอป รู้เลยว่าตอนนี้ความชื้นเท่าไหร่
  • 🔌 ใช้งานง่าย: เหมาะกับมือใหม่และผู้เริ่มต้น

แนวคิดการทำงาน:

  1. Soil Moisture Sensor วัดความชื้นในดินตลอดเวลา
  2. ESP32 อ่านค่าจากเซ็นเซอร์และประมวลผล
  3. ถ้าความชื้นต่ำกว่าค่าที่กำหนด → เปิด Relay เพื่อสั่งปั๊มน้ำ
  4. เมื่อความชื้นถึงระดับที่ต้องการ → ปิด Relay
  5. ส่งข้อมูลไปที่ CynoIoT Platform (ถ้าเชื่อมต่อ)

อุปกรณ์ที่ต้องใช้ 🔧

Hardware Components:

  • ESP32 Development Board - ฿80-150 (ใช้เป็นหลักในการประมวลผล)
  • Soil Moisture Sensor ( capacitive) - ฿30-50 (แนะนำแบบ Capacitive ทนทานกว่า Resistive)
  • Relay Module (5V) - ฿20-40 (ใช้ควบคุมปั๊มน้ำ)
  • Water Pump (12V DC ปั๊มน้ำ) - ฿50-150 (หรือใช้ Solenoid Valve ก็ได้)
  • Power Supply 12V - ฿30-80 (สำหรับปั๊มน้ำ)
  • Jumper Wires (สายไฟเชื่อมต่อ) - ฿20-40
  • Breadboard หรือ PCB - ฿15-40
💡 งบประมาณรวม: ประมาณ ฿245-490

ราคาอาจแตกต่างตามร้านค้าและคุณภาพสินค้า แนะนำซื้อจากร้านที่วางใจได้

Software Tools:

  • Arduino IDE - ใช้เขียนโค้ดและอัปโหลดลง ESP32 (ฟรี)
  • CynoIoT Account - บัญชีฟรีสำหรับเชื่อมต่อ IoT Platform
  • USB Cable - สายเชื่อมต่อ ESP32 กับคอมพิวเตอร์

วิธีต่อสาย 🔌

การต่อ Soil Moisture Sensor:

Sensor PinESP32 Pin
VCC3.3V หรือ 5V (เซ็นเซอร์บางรุ่นใช้ 5V)
GNDGND
AO (Analog Out)GPIO 34 (ADC1_CH6)

การต่อ Relay Module:

Relay PinESP32 Pin
VCC5V หรือ VIN
GNDGND
IN (Signal)GPIO 26

การต่อ Water Pump (ผ่าน Relay):

  • • ใช้ Relay เป็นตัวกลางในการเปิด/ปิดไฟ 12V ให้กับปั๊มน้ำ
  • COM (Common) → เชื่อมต่อกับ (+) จาก Power Supply 12V
  • NO (Normally Open) → เชื่อมต่อกับ (+) ของปั๊มน้ำ
  • NC (Normally Closed) → ไม่ใช้ในโปรเจกต์นี้
  • (-) ของปั๊มน้ำ → เชื่อมต่อกับ (-) จาก Power Supply
⚠️ คำเตือนความปลอดภัย:
  • • ระวังการใช้ไฟ 12V และน้ำร่วมกัน อย่าให้เข้าใกล้กันโดยตรง
  • • ใช้ Relay เพื่อแยกวงจร Low Voltage (ESP32) จาก High Voltage (ปั๊มน้ำ)
  • • ตรวจสอบการต่อสายทุกครั้งก่อนเปิดใช้งาน

โค้ดโปรแกรม 💻

นี่คือโค้ด Arduino สำหรับ ESP32 Smart Irrigation System พร้อมคำอธิบายภาษาไทยทุกบรรทัด:

// ESP32 Smart Irrigation System - ระบบรดน้ำอัตโนมัติ
// ใช้ Soil Moisture Sensor และ Relay ควบคุมปั๊มน้ำ
// เหมาะสำหรับผู้เริ่มต้น

// กำหนดขา Pin สำหรับเซ็นเซอร์และ Relay
const int SOIL_MOISTURE_PIN = 34;  // GPIO34 สำหรับ Soil Moisture Sensor
const int RELAY_PIN = 26;           // GPIO26 สำหรับ Relay

// ตั้งค่าค่าเกณฑ์ความชื้นในดิน
const int DRY_THRESHOLD = 2000;     // ค่าที่ถือว่าดินแห้ง (0-4095)
const int WET_THRESHOLD = 1500;     // ค่าที่ถือว่าดินชุ่ม (0-4095)

// ตั้งค่าเวลา
const unsigned long CHECK_INTERVAL = 5000;  // ตรวจสอบทุก 5 วินาที
const unsigned long PUMP_DURATION = 5000;    // รดน้ำครั้งละ 5 วินาที

// ตัวแปรสำหรับจับเวลา
unsigned long lastCheckTime = 0;
unsigned long pumpStartTime = 0;
bool pumpActive = false;

void setup() {
  Serial.begin(115200);  // เปิด Serial Monitor สำหรับ Debug

  // ตั้งค่า Pin modes
  pinMode(SOIL_MOISTURE_PIN, INPUT);  // Sensor เป็น INPUT
  pinMode(RELAY_PIN, OUTPUT);         // Relay เป็น OUTPUT

  // ปิด Relay ทันที (ปั๊มน้ำไม่ทำงาน)
  digitalWrite(RELAY_PIN, HIGH);  // Relay ส่วนใหญ่ Active LOW

  Serial.println("ESP32 Smart Irrigation System Started!");
  Serial.println("กำลังตรวจสอบความชื้นในดิน...");
}

void loop() {
  // ตรวจสอบเวลาทุก 5 วินาที
  unsigned long currentTime = millis();

  if (currentTime - lastCheckTime >= CHECK_INTERVAL) {
    lastCheckTime = currentTime;

    // อ่านค่าจาก Soil Moisture Sensor
    int soilMoistureValue = analogRead(SOIL_MOISTURE_PIN);

    // แปลงค่าเป็นเปอร์เซ็นต์ (สูงสุด 4095 สำหรับ ESP32)
    int moisturePercent = map(soilMoistureValue, 0, 4095, 100, 0);

    // แสดงผลใน Serial Monitor
    Serial.print("ความชื้นในดิน: ");
    Serial.print(moisturePercent);
    Serial.print("% (ค่าดิบ: ");
    Serial.print(soilMoistureValue);
    Serial.println(")");

    // ตรวจสอบว่าปั๊มน้ำกำลังทำงานอยู่หรือไม่
    if (pumpActive) {
      // ถ้าปั๊มน้ำทำงานอยู่ ให้ตรวจสอบว่าควรปิดหรือยัง
      if (currentTime - pumpStartTime >= PUMP_DURATION) {
        // ถ้ารดน้ำครบเวลาแล้ว ให้ปิดปั๊ม
        digitalWrite(RELAY_PIN, HIGH);  // ปิด Relay
        pumpActive = false;
        Serial.println("ปิดปั๊มน้ำ - รดน้ำเสร็จสิ้น");
      }
    } else {
      // ถ้าปั๊มน้ำไม่ทำงาน ให้ตรวจสอบว่าควรเปิดหรือไม่
      if (soilMoistureValue > DRY_THRESHOLD) {
        // ดินแห้งเกินไป เปิดปั๊มน้ำเลย!
        digitalWrite(RELAY_PIN, LOW);   // เปิด Relay
        pumpActive = true;
        pumpStartTime = currentTime;
        Serial.println("เปิดปั๊มน้ำ - ดินแห้ง!");
      } else {
        Serial.println("ดินชุ่มอยู่ - ไม่ต้องรดน้ำ");
      }
    }
  }

  // รอสักครู่ก่อนวนลูปใหม่
  delay(100);
}

คำอธิบายโค้ด:

  • GPIO34 ใช้อ่านค่าแบบ Analog จาก Soil Moisture Sensor
  • GPIO26 ใช้ควบคุม Relay (Active LOW = LOW เปิด, HIGH ปิด)
  • analogRead() อ่านค่า 0-4095 (ESP32 มีความละเอียด 12-bit)
  • DRY_THRESHOLD ค่าที่ถือว่าดินแห้ง (ปรับแต่งได้ตามเซ็นเซอร์)
  • map() แปลงค่า 0-4095 เป็น 0-100% เพื่อแสดงผล
  • millis() ใช้จับเวลาโดยไม่ใช้ delay()
💡 เคล็ดลับการปรับแต่ง:
  • • ทดลองวัดค่าเซ็นเซอร์ในดินแห้งและดินชุ่ม เพื่อหาค่าที่เหมาะสม
  • • ถ้าเซ็นเซอร์แบบ Capacitive: ค่ามักจะสูงเมื่อดินแห้ง
  • • ถ้าเซ็นเซอร์แบบ Resistive: ค่ามักจะต่ำเมื่อดินแห้ง
  • • ปรับ DRY_THRESHOLD และ PUMP_DURATION ตามความต้องการ

การทดสอบระบบ ✅

ขั้นตอนการทดสอบ:

  1. อัปโหลดโค้ด:
    • เชื่อมต่อ ESP32 กับคอมพิวเตอร์ด้วย USB
    • เปิด Arduino IDE และเลือก Board: "ESP32 Dev Module"
    • เลือก Port ที่ถูกต้อง
    • กด Upload และรอให้เสร็จสิ้น
  2. เปิด Serial Monitor:
    • กด Ctrl+Shift+M หรือไปที่ Tools → Serial Monitor
    • ตั้งค่า Baud rate เป็น 115200
    • ดูผลลัพธ์ที่แสดงบนหน้าจอ
  3. ทดสอบเซ็นเซอร์:
    • แช่เซ็นเซอร์ลงในน้ำ → ค่าควรเปลี่ยน
    • ถอดเซ็นเซอร์ออกจากน้ำ → ค่าควรเปลี่ยนกลับ
    • บันทึกค่าเมื่อดินแห้งและดินชุ่ม
  4. ทดสอบ Relay และปั๊ม:
    • นำเซ็นเซอร์ไปแช่ในดินแห้ง (หรือผ้าขนหนูแห้ง)
    • ค่าควรจะสูงกว่า DRY_THRESHOLD
    • Relay ควรจะ "คลิก" และปั๊มน้ำทำงาน
    • รอประมาณ 5 วินาที ปั๊มควรจะหยุด
  5. ทดสอบในสถานการณ์จริง:
    • ปลูกเซ็นเซอร์ลงในดินที่มีพืช
    • สังเกตการทำงานของระบบ 1-2 วัน
    • ปรับค่า DRY_THRESHOLD ถ้าจำเป็น
✨ ผลลัพธ์ที่คาดหวัง:

Serial Monitor จะแสดงค่าความชื้นเป็นเปอร์เซ็นต์ และบอกสถานะว่าปั๊มน้ำเปิดหรือปิด เช่น: "ความชื้นในดิน: 25% (ค่าดิบ: 3100)" → "เปิดปั๊มน้ำ - ดินแห้ง!"

การแก้ปัญหาที่พบบ่อย 🔧

ปัญหา 1: ปั๊มน้ำไม่ทำงาน

อาการ: ค่าความชื้นต่ำแต่ปั๊มไม่เปิด

สาเหตุที่เป็นไปได้:

  • Relay ต่อกลับ (Active LOW แต่ต่อเป็น Active HIGH)
  • Power Supply 12V ไม่เพียงพอ
  • สายไฟต่อปั๊มหลวม
  • Relay เสีย

วิธีแก้ไข:

  • ลองเปลี่ยน digitalWrite(RELAY_PIN, LOW) เป็น HIGH
  • ตรวจสอบว่า Relay มีเสียง "คลิก" หรือไม่
  • ทดสอบปั๊มโดยต่อตรงกับไฟ 12V

ปัญหา 2: ค่าเซ็นเซอร์ไม่เปลี่ยน

อาการ: ค่าคงที่เสมอ ไม่ว่าจะแช่น้ำหรือไม่

สาเหตุที่เป็นไปได้:

  • เซ็นเซอร์เสีย
  • สายไฟต่อหลวมหรือต่อผิดขา
  • ขา GPIO ใช้งานไม่ได้

วิธีแก้ไข:

  • ลองเปลี่ยนขา GPIO เป็นขาอื่น (เช่น GPIO35, GPIO32)
  • ตรวจสอบการต่อสาย VCC, GND, AO
  • ลองใช้เซ็นเซอร์ตัวอื่น

ปัญหา 3: เซ็นเซอร์อ่านค่าผิดปกติ

อาการ: ค่ากระโดดไปมา หรือค่าที่ไม่สมเหตุสมผล

สาเหตุที่เป็นไปได้:

  • เซ็นเซอร์แบบ Resistive กัดกร่อนเร็ว
  • มีสัญญาณรบกวนจากอุปกรณ์อื่น
  • ไฟเลี้ยงไม่เสถียร

วิธีแก้ไข:

  • ใช้เซ็นเซอร์แบบ Capacitive (ทนทานกว่า)
  • เพิ่ม capacitor 100nF ระหว่าง VCC และ GND ของเซ็นเซอร์
  • ใช้หลอดไฟอัตราส่วน (Voltage Divider) ถ้าจำเป็น

ปัญหา 4: ปั๊มน้ำทำงานตลอดเวลา

อาการ: ปั๊มไม่หยุด แม้ดินจะชุ่มแล้ว

สาเหตุที่เป็นไปได้:

  • ค่า DRY_THRESHOLD ต่ำเกินไป
  • เงื่อนไขในโค้ดผิดพลาด
  • Relay ติดขัด (ติด ON ตลอด)

วิธีแก้ไข:

  • ปรับ DRY_THRESHOLD ให้สูงขึ้น
  • ตรวจสอบเงื่อนไข if (soilMoistureValue > DRY_THRESHOLD)
  • ทดสอบ Relay ด้วยมัลติมิเตอร์

ขยายความสามารถระบบ 🚀

ไอเดียพัฒนาต่อ:

📡 เชื่อมต่อ WiFi

เพิ่ม WiFi และ MQTT เพื่อส่งข้อมูลไป CynoIoT Platform หรือ Home Assistant

📱 แอปควบคุม

สร้าง Web Server บน ESP32 เพื่อควบคุมผ่านมือถือ

🌧️ เซ็นเซอร์ฝน

เพิ่ม Rain Sensor เพื่อไม่รดน้ำตอนฝนตก

☀️ เซ็นเซอร์แสง

เพิ่ม Light Sensor เพื่อรดน้ำตอนเย็นๆ (ไม่รดตอนแดดจัด)

🔋 พลังงานแสงอาทิตย์

ใช้แผงโซล่าเซลล์ + Battery เพื่อระบบไร้สาย

📊 กราฟและ Log

บันทึกข้อมูลลง SD Card หรือส่งไปที่ Thingspeak/Google Sheets

สรุป 🎯

ในบทความนี้เราได้เรียนรู้วิธีสร้าง ESP32 Smart Irrigation System ที่สามารถช่วยประหยัดน้ำและดูแลพืชของคุณอัตโนมัติ ระบบนี้เหมาะสำหรับ:

  • ✅ มือใหม่ที่อยากเริ่มต้นกับ IoT
  • ✅ ผู้ที่รักการทำสวนและพืชพรรณ
  • ✅ โปรเจกต์ STEM / การศึกษา
  • ✅ การลงทุนขนาดเล็กที่ให้ผลตอบแทนดี

สิ่งที่คุณได้เรียนรู้:

  • • การใช้งาน Soil Moisture Sensor กับ ESP32
  • • การควบคุม Relay เพื่อเปิด/ปิดปั๊มน้ำ
  • • การเขียนโปรแกรม Arduino พื้นฐาน
  • • การแก้ปัญหาที่พบบ่อย
🎉 ถัดไปคืออะไร?

ลองพัฒนาต่อด้วยการเชื่อมต่อ WiFi และส่งข้อมูลไปที่ CynoIoT Platform เพื่อติดตามความชื้นในดินผ่านแอปได้ทุกที่ทุกเวลา!

CynoIoT LogoCynoIoT

แพลตฟอร์ม IoT ที่ช่วยให้คุณเชื่อมต่ออุปกรณ์และจัดการข้อมูล IoT ได้อย่างง่ายดาย

© 2026 CynoIoT. All rights reserved.