Soil Moisture Sensor คืออะไร? วิธีใช้งานกับ Arduino
เซ็นเซอร์วัดความชื้นในดิน (Soil Moisture Sensor) เป็นอุปกรณ์อิเล็กทรอนิกส์ที่นิยมใช้ในโปรเจกต์ Smart Farm, ระบบรดน้ำต้นไม้อัตโนมัติ, และงานอดิเรกด้านพืชสวน เพราะสามารถทำงานร่วมกับ Arduino ได้ง่าย, ราคาถูก, และเป็นจุดเริ่มต้นที่ดีในการเรียนรู้ระบบควบคุมอัตโนมัติ
หลักการทำงาน
เซนเซอร์ประเภทนี้ทำงานโดยอาศัยหลักการวัด **ค่าความต้านทานไฟฟ้าของดิน** ซึ่งแปรผันตามปริมาณน้ำ:
-
ดินแห้ง: มีความต้านทานสูง (นำไฟฟ้าได้ไม่ดี)
-
ดินชื้น: มีความต้านทานต่ำ (นำไฟฟ้าได้ดีขึ้น)
โมดูลจะแปลงค่าความต้านทานนี้เป็นระดับแรงดันไฟฟ้า แล้วส่งออกมาเป็นสัญญาณ 2 รูปแบบ คือ Analog (ค่าต่อเนื่อง) และ Digital (มี/ไม่มี)
สเปคของ Soil Moisture Sensor
แรงดันไฟเลี้ยง |
3.3V – 5V |
กระแสที่ใช้ |
ประมาณ 10-20 mA |
สัญญาณเอาต์พุต |
Analog (A0) และ Digital (D0) |
โครงสร้าง |
Probe 2 ขาสำหรับเสียบลงดิน และบอร์ดแปลงสัญญาณ |
การปรับค่า |
มี Potentiometer (VR) สำหรับปรับจุดตัด (Threshold) ของสัญญาณ Digital |
การใช้งานกับ Arduino
1. การต่อสาย
ขาบนโมดูลเซนเซอร์ |
ต่อกับขาบน Arduino |
VCC |
5V |
GND |
GND |
A0 (Analog Output) |
A0 (หรือขา Analog อื่นๆ) |
D0 (Digital Output) |
ขา Digital ใดก็ได้ (เช่น D2) |
2. การอ่านค่าแบบ Analog (แนะนำวิธีนี้)
การอ่านค่าแบบ Analog ให้ข้อมูลที่ละเอียดกว่า ทำให้เราสามารถกำหนดระดับความชื้นได้หลายระดับ
const int sensorPin = A0; // กำหนดขา A0 สำหรับอ่านค่าจากเซนเซอร์
void setup() {
Serial.begin(9600); // เริ่มการสื่อสารแบบ Serial
}
void loop() {
int moistureValue = analogRead(sensorPin); // อ่านค่าอนาล็อก (0-1023)
Serial.print("Soil Moisture Value: ");
Serial.println(moistureValue);
delay(1000); // รอ 1 วินาที ก่อนอ่านค่าครั้งต่อไป
}
การแปลผลค่า Analog:
-
ค่าสูง (เช่น 800-1023): หมายถึงดินมีความต้านทานสูง = ดินแห้ง
-
ค่าต่ำ (เช่น 100-300): หมายถึงดินมีความต้านทานต่ำ = ดินชื้น/เปียก
เราสามารถนำค่านี้ไปใช้ตั้งเงื่อนไขในโปรเจกต์รดน้ำต้นไม้อัตโนมัติได้ เช่น `if (moistureValue > 700) { // สั่งรดน้ำ }`
3. การอ่านค่าแบบ Digital
การอ่านค่าแบบ Digital จะให้ผลลัพธ์แค่ 2 สถานะ คือ "ชื้น" หรือ "แห้ง" ซึ่งเราสามารถปรับจุดตัดได้ที่ตัว Potentiometer บนโมดูล
const int sensorDigitalPin = 2; // กำหนดขา D2 สำหรับอ่านค่า Digital
void setup() {
pinMode(sensorDigitalPin, INPUT); // กำหนดขาเป็น Input
Serial.begin(9600);
}
void loop() {
int digitalValue = digitalRead(sensorDigitalPin);
// โดยทั่วไป โมดูลจะส่ง LOW เมื่อดินชื้น และ HIGH เมื่อดินแห้ง
if (digitalValue == LOW) {
Serial.println("สถานะ: ดินชื้น");
} else {
Serial.println("สถานะ: ดินแห้ง");
}
delay(1000);
}
เคล็ดลับเพิ่มเติม (Pro Tips)
-
การกัดกร่อน: เซนเซอร์แบบนี้ไม่ควรเสียบแช่ในดินและจ่ายไฟตลอดเวลา เพราะจะทำให้ผิวของ Probe เกิดการกัดกร่อน (สนิม) ได้เร็ว ควรเขียนโค้ดให้จ่ายไฟเฉพาะตอนที่ต้องการวัดเท่านั้น (โดยใช้ขา Digital อีกขามาควบคุมไฟเลี้ยง)
-
การนำไปใช้งาน: สามารถใช้ค่าที่อ่านได้ไปสั่งงาน โมดูลรีเลย์ (Relay Module) เพื่อควบคุมปั๊มน้ำหรือวาล์วไฟฟ้าสำหรับระบบรดน้ำอัตโนมัติ
-
เซนเซอร์ทางเลือก: หากต้องการความแม่นยำและทนทานที่สูงกว่า แนะนำให้ลองใช้ Capacitive Soil Moisture Sensor ซึ่งวัดความชื้นโดยอาศัยหลักการของค่าประจุไฟฟ้าและไม่มีส่วนของโลหะที่สัมผัสดินโดยตรง ทำให้ทนทานและไม่ขึ้นสนิม