ยินดีต้อนรับเข้าสู่โปรเจคแรกของผมในฐานะนักพัฒนาอิเล็กทรอนิกส์มือใหม่! โปรเจคนี้เริ่มต้นจากความต้องการที่จะดูแลต้นไม้ในกระถางให้เติบโตได้อย่างสมบูรณ์แบบที่สุด โดยการนำเทคโนโลยีเซนเซอร์มาช่วยวัดระดับความชื้นในดิน และแสดงผลลัพธ์แบบ Real-time ผ่านหลอด LED และ Serial Monitor ของ Arduino IDE
ภาพรวมของโปรเจค (Project Overview)
จุดประสงค์หลักของอุปกรณ์ชิ้นนี้คือการช่วยให้เรา "สื่อสาร" กับต้นไม้ได้ โดยระบบจะทำการอ่านค่าความต้านทานไฟฟ้าในดินเพื่อประเมินปริมาณน้ำ และแจ้งเตือนสถานะออกมา 3 รูปแบบ:
- ดินแห้งเกินไป (Too Dry): แจ้งเตือนด้วย LED สีเหลือง เพื่อบอกว่าถึงเวลาต้องรดน้ำแล้ว
- ความชื้นเหมาะสม (Perfect): แจ้งเตือนด้วย LED สีน้ำเงิน (หรือสีเขียว) แสดงถึงสภาวะที่เหมาะสมที่สุดสำหรับพืช
- ดินแฉะเกินไป (Too Wet): แจ้งเตือนด้วย LED สีแดง เพื่อป้องกันรากเน่าจากการรดน้ำที่มากเกินความจำเป็น
เจาะลึกอุปกรณ์และหลักการทำงานทางวิศวกรรม
หัวใจสำคัญของโปรเจคนี้คือชุดเซนเซอร์ YL-38 ที่ทำงานร่วมกับโพรบวัดความชื้น YL-69 (Soil Moisture Sensor Probe)
- หลักการทำงานของเซนเซอร์: โพรบ YL-69 จะทำงานด้วยหลักการวัดความต้านทาน (Resistive Soil Moisture Sensing) โดยตัวโพรบจะปล่อยกระแสไฟฟ้าไหลผ่านดินระหว่างง่ามโลหะทั้งสองข้าง
- ดินแห้ง: จะมีความต้านทานไฟฟ้าสูง เนื่องจากมีน้ำที่เป็นตัวนำไฟฟ้าน้อย ค่าแรงดันไฟฟ้า (Analog Value) ที่ส่งกลับมายัง Arduino จึงมีค่าสูง (เข้าใกล้ 1023)
- ดินเปียก: จะมีความต้านทานไฟฟ้าต่ำ เนื่องจากน้ำช่วยให้กระแสไฟฟ้าไหลผ่านได้สะดวก ค่าแรงดันไฟฟ้าที่ส่งกลับมาจึงมีค่าน้อยลง
- ชุดวงจรเปรียบเทียบ YL-38: ทำหน้าที่แปลงสัญญาณที่ได้จากโพรบให้เสถียรขึ้น และส่งต่อข้อมูลไปยังพิน Analog (A1) ของ Arduino เพื่อประมวลผลด้วยตัวแปลงสัญญาณ Analog เป็น Digital (ADC) ขนาด 10 บิต
การวิเคราะห์ซอร์สโค้ดและลอจิกของโปรแกรม (Source Code Analysis)
ในส่วนของโปรแกรม ผมได้ออกแบบให้ระบบมีการตรวจสอบเงื่อนไขอย่างต่อเนื่อง (Loop) โดยใช้โครงสร้างภาษา C++ สำหรับ Arduino ดังนี้:
1. ส่วนการตั้งค่า (Setup Phase): เรากำหนดความเร็วการสื่อสาร Serial ที่ 9600 bps เพื่อส่งข้อมูลสถานะกลับมายังคอมพิวเตอร์ และตั้งค่าพิน Digital 2, 3 และ 4 ให้ทำหน้าที่เป็น Output สำหรับควบคุม LED
2. ส่วนการประมวลผล (Main Loop): ลอจิกของโปรแกรมถูกแบ่งออกเป็น 3 ส่วนหลัก ดังนี้:
- การอ่านค่า (Data Acquisition): ใช้คำสั่ง
analogRead(A1)เพื่ออ่านค่าจากเซนเซอร์ ซึ่งจะได้ค่าตัวเลขในช่วง 0 ถึง 1023 - การควบคุมฮาร์ดแวร์ (Output Control):
- หากค่าเซนเซอร์ $\ge 1000$: สั่งให้พิน 2 (สีเหลือง) ติดสว่าง หมายถึง ดินแห้งมาก
- หากค่าเซนเซอร์อยู่ระหว่าง $901 - 999$: สั่งให้พิน 3 (สีน้ำเงิน) ติดสว่าง หมายถึง ความชื้นพอดี
- หากค่าเซนเซอร์ $\le 900$: สั่งให้พิน 4 (สีแดง) ติดสว่าง หมายถึง ดินแฉะเกินไป
- การหน่วงเวลา (Stability): มีการใช้
delay(500)เพื่อให้ค่าที่อ่านได้มีความนิ่งและลดสัญญาณรบกวนในขณะแสดงผลบน Serial Monitor
//V1.0 Soil_Humidity_Tester Enjoy!
void setup() {
// เริ่มต้นการสื่อสาร Serial ที่ความเร็ว 9600 bits per second:
Serial.begin(9600);
// กำหนดโหมดให้พินควบคุม LED เป็น Output
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
}
void loop() {
// กำหนดตัวแปรสำหรับ LED และอ่านค่าจาก Analog Pin A1
int yellow = 2;
int blue = 3;
int red = 4;
int sensorValue = analogRead(A1);
// รีเซ็ตสถานะ LED ให้ดับทั้งหมดก่อนการตรวจสอบเงื่อนไขใหม่
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
// Logic Loop สำหรับควบคุมการเปิด-ปิด LED ตามค่าความชื้น
if (sensorValue >= 1000) (digitalWrite(yellow, HIGH));
else if ((sensorValue <= 999) && (sensorValue >=901)) (digitalWrite(blue, HIGH));
else if (sensorValue <= 900) (digitalWrite(red, HIGH));
// แสดงผลข้อความแจ้งเตือนผ่าน Serial Monitor
if (sensorValue >= 1000) (Serial.print("SOIL IS TOO DRY!!!!! "));
else if ((sensorValue <= 999) && (sensorValue >=901)) (Serial.print("SOIL IS PERFECT!!!!! "));
else if (sensorValue <= 900) (Serial.print("SOIL IS TOO WET!!!!! "));
// แสดงค่าดิบ (Raw Value) ที่อ่านได้เพื่อใช้ในการ Calibrate
Serial.print("Marijuana Soil Humidity is: ");
Serial.println(sensorValue);
delay(500); // หน่วงเวลา 0.5 วินาทีเพื่อความเสถียรของระบบ
}
คำแนะนำในการปรับแต่ง (Calibration Tips)
เนื่องจากดินแต่ละชนิด (ดินร่วน, ดินทราย, หรือดินเหนียว) มีคุณสมบัติการนำไฟฟ้าที่ต่างกัน ผมแนะนำให้คุณทำการ Calibrate ค่าใน Code ก่อนใช้งานจริง:
- เสียบเซนเซอร์ในดินที่แห้งสนิท เพื่อดูค่าสูงสุดที่อ่านได้
- จุ่มเซนเซอร์ลงในน้ำโดยตรง เพื่อดูค่าต่ำสุด
- ทดลองรดน้ำในระดับที่คุณคิดว่าพอดี แล้วนำค่านั้นมาใส่ในเงื่อนไข
sensorValueของพินสีน้ำเงิน (Blue LED) เพื่อความแม่นยำสูงสุดสำหรับพืชของคุณ
โปรเจคนี้เป็นพื้นฐานที่ดีเยี่ยมสำหรับการต่อยอดไปสู่ระบบรดน้ำอัตโนมัติ (Automatic Watering System) โดยการเพิ่ม Relay และปั๊มน้ำขนาดเล็กในอนาคตครับ!