กลับไปหน้ารวมไฟล์
yl-38-moisture-meter-yl-69-sensor-65de27.md

ยินดีต้อนรับเข้าสู่โปรเจคแรกของผมในฐานะนักพัฒนาอิเล็กทรอนิกส์มือใหม่! โปรเจคนี้เริ่มต้นจากความต้องการที่จะดูแลต้นไม้ในกระถางให้เติบโตได้อย่างสมบูรณ์แบบที่สุด โดยการนำเทคโนโลยีเซนเซอร์มาช่วยวัดระดับความชื้นในดิน และแสดงผลลัพธ์แบบ Real-time ผ่านหลอด LED และ Serial Monitor ของ Arduino IDE

ภาพรวมของโปรเจค (Project Overview)

จุดประสงค์หลักของอุปกรณ์ชิ้นนี้คือการช่วยให้เรา "สื่อสาร" กับต้นไม้ได้ โดยระบบจะทำการอ่านค่าความต้านทานไฟฟ้าในดินเพื่อประเมินปริมาณน้ำ และแจ้งเตือนสถานะออกมา 3 รูปแบบ:

  1. ดินแห้งเกินไป (Too Dry): แจ้งเตือนด้วย LED สีเหลือง เพื่อบอกว่าถึงเวลาต้องรดน้ำแล้ว
  2. ความชื้นเหมาะสม (Perfect): แจ้งเตือนด้วย LED สีน้ำเงิน (หรือสีเขียว) แสดงถึงสภาวะที่เหมาะสมที่สุดสำหรับพืช
  3. ดินแฉะเกินไป (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 ก่อนใช้งานจริง:

  1. เสียบเซนเซอร์ในดินที่แห้งสนิท เพื่อดูค่าสูงสุดที่อ่านได้
  2. จุ่มเซนเซอร์ลงในน้ำโดยตรง เพื่อดูค่าต่ำสุด
  3. ทดลองรดน้ำในระดับที่คุณคิดว่าพอดี แล้วนำค่านั้นมาใส่ในเงื่อนไข sensorValue ของพินสีน้ำเงิน (Blue LED) เพื่อความแม่นยำสูงสุดสำหรับพืชของคุณ

โปรเจคนี้เป็นพื้นฐานที่ดีเยี่ยมสำหรับการต่อยอดไปสู่ระบบรดน้ำอัตโนมัติ (Automatic Watering System) โดยการเพิ่ม Relay และปั๊มน้ำขนาดเล็กในอนาคตครับ!

ข้อมูล Frontmatter ดั้งเดิม

title: "YL-38 Moisture Meter (YL-69 Sensor)"
description: "Read the soil moisture level (Dry-Perfect-Wet) and display results on a corresponding LED."
author: "chocochunks"
category: "Sensors & Environment"
tags:
  - "yl-38"
  - "yl-69"
  - "moisture"
views: 36940
likes: 8
price: 699
difficulty: "Easy"
components:
  - "1x Solder Flux, Soldering"
  - "1x Solder Wire, Lead Free"
  - "1x 5 mm LED: Green"
  - "1x YL-38 Controller and Sensor YL-69"
  - "1x 5 mm LED: Yellow"
  - "3x Resistor 100 ohm"
  - "1x Arduino UNO"
  - "1x Soldering iron (generic)"
  - "1x 5 mm LED: Red"
tools: []
apps:
  - "1x Arduino IDE"
downloadableFiles:
  - "https://projects.arduinocontent.cc/852dccda-37b9-4de2-a851-1954a9c11e56.ino"
documentationLinks: []
passwordHash: "da50388105bcc3c0095a1e8296aee73b22ac64930c1443e59ccac4007305cdee"
encryptedPayload: "U2FsdGVkX187a9i8AkT6cVHCwKOM65uuqNGWFVFS6p8LzKtfzaf3aqk7J9Hb3pNljFNQ0stYnlT/KOJ71+XH2n8Och2hO7aEEygLkGMrepU="
seoDescription: "Arduino project using YL-38 Moisture Meter and YL-69 Sensor to read soil moisture and display Dry-Perfect-Wet status on LED."
videoLinks: []
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/yl-38-moisture-meter-yl-69-sensor-65de27_cover.jpg"
lang: "en"