เนื้อหาในบทความ
ภาพรวมโปรเจกต์ 🌾
Smart Irrigation System หรือระบบรดน้ำอัตโนมัติคือโปรเจกต์ IoT ที่ใช้เซ็นเซอร์วัดความชื้นในดิน (Soil Moisture Sensor) เพื่อตรวจสอบว่าดินของคุณต้องการน้ำหรือไม่ เมื่อความชื้นต่ำกว่าค่าที่กำหนด ระบบจะเปิดปั๊มน้ำอัตโนมัติ และปิดเมื่อดินชุ่มพอดี
✨ ประโยชน์ของระบบ:
- 💧 ประหยัดน้ำ: รดน้ำเมื่อจำเป็นเท่านั้น ไม่รดโดยใช้เวลาคงที่
- 🌱 ดูแลพืชดีขึ้น: ความชื้นเหมาะสม พืชเจริญเติบโตดี
- ⏰ ประหยัดเวลา: ไม่ต้องกังวลเรื่องรดน้ำทุกวัน
- 📊 เชื่อมต่อ CynoIoT: ติดตามผ่านแอป รู้เลยว่าตอนนี้ความชื้นเท่าไหร่
- 🔌 ใช้งานง่าย: เหมาะกับมือใหม่และผู้เริ่มต้น
แนวคิดการทำงาน:
- Soil Moisture Sensor วัดความชื้นในดินตลอดเวลา
- ESP32 อ่านค่าจากเซ็นเซอร์และประมวลผล
- ถ้าความชื้นต่ำกว่าค่าที่กำหนด → เปิด Relay เพื่อสั่งปั๊มน้ำ
- เมื่อความชื้นถึงระดับที่ต้องการ → ปิด Relay
- ส่งข้อมูลไปที่ 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 Pin | ESP32 Pin |
|---|---|
| VCC | 3.3V หรือ 5V (เซ็นเซอร์บางรุ่นใช้ 5V) |
| GND | GND |
| AO (Analog Out) | GPIO 34 (ADC1_CH6) |
การต่อ Relay Module:
| Relay Pin | ESP32 Pin |
|---|---|
| VCC | 5V หรือ VIN |
| GND | GND |
| 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ตามความต้องการ
การทดสอบระบบ ✅
ขั้นตอนการทดสอบ:
- อัปโหลดโค้ด:
- เชื่อมต่อ ESP32 กับคอมพิวเตอร์ด้วย USB
- เปิด Arduino IDE และเลือก Board: "ESP32 Dev Module"
- เลือก Port ที่ถูกต้อง
- กด Upload และรอให้เสร็จสิ้น
- เปิด Serial Monitor:
- กด Ctrl+Shift+M หรือไปที่ Tools → Serial Monitor
- ตั้งค่า Baud rate เป็น 115200
- ดูผลลัพธ์ที่แสดงบนหน้าจอ
- ทดสอบเซ็นเซอร์:
- แช่เซ็นเซอร์ลงในน้ำ → ค่าควรเปลี่ยน
- ถอดเซ็นเซอร์ออกจากน้ำ → ค่าควรเปลี่ยนกลับ
- บันทึกค่าเมื่อดินแห้งและดินชุ่ม
- ทดสอบ Relay และปั๊ม:
- นำเซ็นเซอร์ไปแช่ในดินแห้ง (หรือผ้าขนหนูแห้ง)
- ค่าควรจะสูงกว่า DRY_THRESHOLD
- Relay ควรจะ "คลิก" และปั๊มน้ำทำงาน
- รอประมาณ 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 เพื่อติดตามความชื้นในดินผ่านแอปได้ทุกที่ทุกเวลา!