📚 Smart Farm เบื้องต้น ด้วย Arduino UNO R3
1. แนวคิดของโปรเจกต์ (Project Concept)
ปัจจุบันการทำเกษตรแบบดั้งเดิมอาจมีปัญหาเรื่องการรดน้ำไม่สม่ำเสมอ หรือสิ้นเปลืองเวลาในการเดินทางไปดูแลพืชพรรณด้วยตัวเอง ดังนั้น เราจึงสามารถประยุกต์ใช้เทคโนโลยีง่ายๆ เพื่อสร้าง ระบบรดน้ำอัตโนมัติ (Automatic Watering System) โดยใช้บอร์ด Arduino และเซนเซอร์เข้ามาช่วยได้
หลักการของโปรเจกต์นี้คือ เมื่อเซนเซอร์ตรวจพบว่าดินมีความแห้งถึงระดับที่กำหนด ระบบจะสั่งให้ปั๊มน้ำทำงานเพื่อรดน้ำต้นไม้โดยอัตโนมัติ และจะหยุดเมื่อดินมีความชื้นที่เหมาะสมแล้ว ซึ่งช่วยประหยัดเวลา เพิ่มความสะดวกสบาย และเพิ่มประสิทธิภาพในการดูแลพืชได้อย่างง่ายดาย
2. อุปกรณ์ที่ใช้ในโปรเจกต์ (Required Components)
- ✅ Arduino UNO R3 พร้อมสาย USB
- ✅ Soil Moisture Sensor (เซนเซอร์วัดความชื้นในดิน)
- ✅ ปั๊มน้ำ DC 5V Mini (แบบแช่)
- ✅ โมดูลรีเลย์ 1 ช่อง (Relay 5V Module)
- ✅ สายจัมเปอร์ (Jumper Wires)
- ✅ บอร์ดทดลอง (Breadboard) หรือสายไฟสำหรับเชื่อมต่อ
- ✅ แหล่งจ่ายไฟเสริม 5V (สำหรับปั๊มน้ำ, ถ้าจำเป็น)
- ✅ สายยางขนาดเล็ก และภาชนะใส่น้ำ
3. การต่อวงจร (Wiring Diagram)
3.1 การต่อเซนเซอร์และรีเลย์ (ฝั่งควบคุม)
อุปกรณ์ |
ขาบนอุปกรณ์ |
ต่อกับขาบน Arduino |
Soil Moisture Sensor |
VCC |
5V |
GND |
GND |
A0 (Analog Out) |
A0 |
Relay Module |
VCC |
5V |
GND |
GND |
IN (Input) |
D7 |
3.2 การต่อปั๊มน้ำผ่านรีเลย์ (ฝั่งโหลด)
ข้อควรระวัง: ปั๊มน้ำ DC ใช้กระแสไฟสูง ไม่ควรต่อไฟ 5V จากบอร์ด Arduino โดยตรง เพราะอาจทำให้บอร์ดเสียหายได้ ควรใช้แหล่งจ่ายไฟ 5V แยกต่างหาก
- ต่อสาย ขั้วบวก (+) จาก แหล่งจ่ายไฟ 5V แยก เข้าที่ขา COM ของรีเลย์
- ต่อสายจากขา NO (Normally Open) ของรีเลย์ เข้าที่ ขั้วบวก (+) ของปั๊มน้ำ
- ต่อสาย ขั้วลบ (-) ของปั๊มน้ำ เข้าที่ ขั้วลบ (-) ของ แหล่งจ่ายไฟ 5V แยก
-
(สำคัญมาก) ต่อสายจาก GND ของ Arduino ไปยัง ขั้วลบ (-) ของ แหล่งจ่ายไฟ 5V แยก ด้วย เพื่อให้มีกราวด์ร่วมกัน (Common Ground)
4. โค้ดโปรแกรม (Arduino Code)
// กำหนดขาที่เชื่อมต่อ
const int sensorPin = A0; // ขา Analog สำหรับ Soil Moisture Sensor
const int relayPin = 7; // ขา Digital สำหรับควบคุม Relay
// กำหนดค่าความชื้น (ปรับค่านี้ตามความเหมาะสม)
// ค่านี้คือจุดที่ตัดสินว่าดิน "แห้ง" และควรเริ่มรดน้ำ
// ยิ่งค่าสูง -> ดินยิ่งแห้ง
// ทดลองหาค่าที่เหมาะสมโดยดูจาก Serial Monitor
const int moistureThreshold = 700;
void setup() {
Serial.begin(9600); // เริ่มการสื่อสารแบบ Serial เพื่อดูค่า
pinMode(relayPin, OUTPUT); // กำหนดขา relay เป็น Output
// เริ่มต้นโดยสั่งให้ปั๊มหยุดทำงาน (Relay ส่วนใหญ่เป็น Active LOW)
digitalWrite(relayPin, HIGH);
}
void loop() {
// อ่านค่าความชื้นจากเซนเซอร์
int moistureValue = analogRead(sensorPin);
// แสดงผลค่าความชื้นที่อ่านได้ทาง Serial Monitor
Serial.print("Soil Moisture = ");
Serial.println(moistureValue);
// ตรวจสอบเงื่อนไขเพื่อเปิด-ปิดปั๊มน้ำ
if (moistureValue > moistureThreshold) {
// ถ้าค่าความชื้นสูงกว่าที่กำหนด (ดินแห้ง)
Serial.println("Soil is dry, turning pump ON");
digitalWrite(relayPin, LOW); // สั่งให้ Relay ทำงาน (ปั๊มเปิด)
} else {
// ถ้าค่าความชื้นต่ำกว่าที่กำหนด (ดินเปียก)
Serial.println("Soil is wet, turning pump OFF");
digitalWrite(relayPin, HIGH); // สั่งให้ Relay หยุดทำงาน (ปั๊มปิด)
}
// หน่วงเวลา 2 วินาทีก่อนที่จะอ่านค่าครั้งต่อไป
delay(2000);
}
5. หลักการทำงานและวิธีทดสอบ
หลักการทำงาน
Arduino จะอ่านค่าความชื้นในดินแบบอนาล็อก (0-1023) จากขา A0 ตลอดเวลา โดยค่าที่อ่านได้จะแปรผกผันกับความชื้น (ดินแห้งค่าสูง, ดินเปียกค่าต่ำ) จากนั้นนำค่าที่ได้มาเทียบกับค่า `moistureThreshold` ที่เราตั้งไว้ หากค่าที่อ่านได้สูงกว่า แสดงว่าดินแห้ง Arduino ก็จะส่งสัญญาณ LOW ไปยังรีเลย์ ทำให้รีเลย์ทำงานและจ่ายไฟให้ปั๊มน้ำเริ่มรดน้ำ เมื่อดินชุ่มชื้นขึ้น ค่าที่อ่านได้จะลดลงจนต่ำกว่า `moistureThreshold` ระบบก็จะสั่งให้ปั๊มหยุดทำงาน วนแบบนี้ไปเรื่อยๆ
วิธีทดสอบ
-
หาค่า Threshold: อัปโหลดโค้ดลงบอร์ดแล้วเปิด Serial Monitor ขึ้นมา ทดลองนำเซนเซอร์ไปจุ่มในดินที่แห้งสนิท สังเกตค่าที่ได้ จากนั้นนำไปจุ่มในดินที่เปียกชุ่ม สังเกตค่าอีกครั้ง แล้วเลือกค่ากลางๆ หรือค่าที่เหมาะสมมาตั้งเป็น `moistureThreshold` ในโค้ด
-
ทดสอบปั๊ม: ขณะที่เซนเซอร์อยู่ในอากาศ (สถานะแห้ง) ปั๊มน้ำควรจะทำงาน (รีเลย์มีเสียง "คลิก" และไฟติด) เมื่อนำเซนเซอร์ไปจุ่มน้ำ ปั๊มน้ำควรจะหยุดทำงาน
-
ติดตั้งใช้งานจริง: นำเซนเซอร์ไปปักในกระถางต้นไม้ และนำปั๊มน้ำใส่ในภาชนะบรรจุน้ำเพื่อเริ่มใช้งานระบบรดน้ำอัตโนมัติ