Capacitive soil moisture probe in a potted plant wired to a small enclosure on a windowsill

ผู้เริ่มต้น

สร้างระบบตรวจสอบสภาพต้นไม้อัจฉริยะ

เซ็นเซอร์IoTระบบอัตโนมัติ

เรียนรู้วิธีที่เซ็นเซอร์วัดความจุในดินสามารถบอกเครื่องควบคุมได้อย่างแม่นยำว่าเมื่อไหร่ที่พืชต้องการน้ำจริง ๆ แทนที่จะคาดเดา

รวมชิ้นส่วนจริง 6 รายการ

ราคารวมชุดนี้: 1,474.00 ฿

ยังไม่รวมส่วนลดคำสั่งซื้อที่คุณอาจได้รับตอนชำระเงิน

สิ่งที่คุณต้องใช้

เป้าหมายของโครงการ

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

สิ่งที่ตัวควบคุมทำ

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

สิ่งที่เซ็นเซอร์วัดความชื้นในดินแบบ Capacitive ทำ

การตรวจจับแบบ Capacitive วัดความชื้นโดยไม่ต้องใช้โพรบโลหะเปล่าที่นำกระแสไฟฟ้าผ่านดิน ซึ่งเป็นสาเหตุที่ทำให้เซ็นเซอร์ดินแบบ Resistive เกิดการกัดกร่อนหลังจากสัมผัสกับดินเปียกอย่างต่อเนื่องเป็นเวลาหลายสัปดาห์ แผงวงจรพิมพ์ของเซ็นเซอร์แบบ Capacitive เคลือบไว้และตรวจจับการเปลี่ยนแปลงของความจุใกล้พื้นผิวแทน โดยรายงานสิ่งนั้นเป็นแรงดันไฟฟ้าอนาล็อกที่ตัวควบคุมอ่านบนหนึ่งในพินที่รองรับอนาล็อก - สูงขึ้นหรือต่ำลงขึ้นอยู่กับปริมาณความชื้นใกล้แผ่นตรวจจับ

การอ่านเซ็นเซอร์อนาล็อกและการตั้งค่าเกณฑ์

เนื่องจากเซ็นเซอร์สื่อสารเป็นแรงดันไฟฟ้าอนาล็อกดิบแทนที่จะเป็นค่าดิจิทัลที่แปลงไว้ล่วงหน้า ตัวแปลงอนาล็อกเป็นดิจิทัลของตัวควบคุมเองจึงทำการตีความ ในทางปฏิบัติหมายความว่า: อ่านค่าดิบ บันทึกสิ่งที่อ่านในดินที่แห้งจริงๆ และอีกครั้งในดินที่รดน้ำใหม่ และตั้งค่าเกณฑ์ของคุณไว้ที่ใดที่หนึ่งระหว่างสองขั้วนี้ แทนที่จะคาดเดาตัวเลขจากชุดเซ็นเซอร์อื่นหรือองค์ประกอบดินในกระถางอื่น

ทำไมโครงการนี้จึงต้องมีกล่องหุ้ม

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

แนวคิดซอฟต์แวร์และไลบรารี

เซ็นเซอร์จะมีโค้ดตัวอย่างที่ใช้งานได้สำหรับแพลตฟอร์มตัวควบคุมทั่วไป – เริ่มจากนั้น ยืนยันว่าคุณได้ค่าอ่านดิบที่สมเหตุสมผลด้วยตัวเอง แล้วจึงเพิ่มตรรกะเกณฑ์และเอาต์พุตใดๆ (การพิมพ์ซีเรียล, LED, หรือภายหลังรีเลย์) เก็บเกณฑ์ความแห้ง/เปียกของคุณเป็นค่าคงที่ที่มีชื่อใกล้ด้านบนของโค้ดของคุณ แทนที่จะเป็นตัวเลขเปล่าๆ ที่ซ่อนอยู่ในคำสั่ง if เพื่อให้การปรับเทียบใหม่ในภายหลังเป็นการเปลี่ยนแปลงบรรทัดเดียว

การทดสอบและการแก้ไขปัญหา

  • ไม่มีการอ่านเลย -- ตรวจสอบว่าเซ็นเซอร์เชื่อมต่อกับแหล่งจ่ายไฟและกราวด์อย่างถูกต้อง และยืนยันว่าโค้ดของคุณกำลังอ่านพินอนาล็อกที่ถูกต้อง
  • การอ่านไม่เคยเปลี่ยนแปลงไม่ว่าคุณจะทำอะไร -- ยืนยันว่าโพรบเสียบอยู่ในดินจริงๆ ไม่ได้อยู่ในอากาศ และตรวจสอบซ้ำว่าคุณเลือกพินอนาล็อกที่ถูกต้องในโค้ด ไม่ใช่แค่ GPIO ใดๆ
  • การอ่านสูงถึงขีดสุดและคงอยู่อย่างต่อเนื่อง -- โดยปกติหมายความว่าโพรบอยู่ในน้ำนิ่งแทนที่จะเป็นดิน; ควรเพิ่มการตรวจสอบความถูกต้องง่ายๆ ในโค้ดเพื่อแจ้งเตือนการอ่านที่อิ่มตัวอย่างไม่น่าเชื่อ แทนที่จะรายงานว่าเป็นเรื่องปกติ
  • การอ่านดูสมเหตุสมผล แต่ไม่เคยข้ามไป "เปียก" หลังจากรดน้ำ -- ตรวจสอบเกณฑ์ที่ปรับเทียบของคุณอีกครั้ง; องค์ประกอบของดินในกระถางแตกต่างกันมากพอที่เกณฑ์ที่กำหนดตายตัวซึ่งคัดลอกมาจากโครงการของคนอื่นอาจไม่ตรงกับของคุณ

การอัปเกรดเสริมในอนาคต: การรดน้ำอัตโนมัติ

เมื่อตรรกะเกณฑ์ได้รับการพิสูจน์แล้วว่าเชื่อถือได้ การตัดสินใจเปิด/ปิดแบบเดียวกันนั้นสามารถขับเคลื่อนปั๊มน้ำขนาดเล็กผ่านรีเลย์หรือโมดูล MOSFET แทนที่จะรายงานระดับความชื้นเท่านั้น -- ดูโครงการสาธิตเทอร์โมสตัทดิจิทัลสำหรับตัวอย่างแนวคิดการควบคุมเกณฑ์เปิด/ปิดที่เหมือนกันนั้นนำไปใช้กับการวัดที่แตกต่างกันโดยสิ้นเชิง

การเดินสายไฟ

  • โมดูลเซ็นเซอร์ความชื้นในดิน VCC → ESP32-C3 3V3
  • โมดูลเซ็นเซอร์ความชื้นในดิน GND → ESP32-C3 GND
  • โมดูลเซ็นเซอร์ความชื้นในดิน AOUT → ESP32-C3 GPIO0 — พินอินพุตอนาล็อกที่รองรับ ADC อ่านด้วย `analogRead()`
  • พิน LED ออนบอร์ดของ ESP32-C3 → ใช้โดยตรงในโค้ด (ไม่ต้องเดินสาย) — ดูหมายเหตุด้านล่าง
  • ESP32-C3 SuperMini → สาย USB-C → คอมพิวเตอร์/พาวเวอร์แบงค์ (แหล่งจ่ายไฟ + การเขียนโปรแกรม)
  • กล่องหุ้ม: ติดตั้งโพรบเซ็นเซอร์เพื่อให้แผ่นคาปาซิทีฟอยู่ในดินในขณะที่บอร์ด ESP32-C3 และตัวเชื่อมต่ออยู่เหนือระดับดิน ป้องกันจากความชื้น

พิน LED บนบอร์ดจะแตกต่างกันไปตามการแก้ไขบอร์ด/ผู้จำหน่าย SuperMini — โค้ดด้านล่างจะใช้ GPIO8 เป็นค่าเริ่มต้น (ตำแหน่งที่รายงานบ่อยบนบอร์ดเหล่านี้) ภายใต้ `#define`; ยืนยันกับ silkscreen/วงจรของบอร์ดเฉพาะของคุณและเปลี่ยนหาก LED ไม่ตอบสนอง เซ็นเซอร์วัดความชื้นในดินแบบ Capacitive จะอ่านค่าอนาล็อกที่ต่ำกว่าเมื่อดินเปียกกว่าและสูงกว่าเมื่อดินแห้ง ดังนั้นตรรกะเกณฑ์แจ้งเตือนความแห้งจึงกลับด้านจากสิ่งที่รู้สึกเข้าใจง่าย — สิ่งนี้ระบุไว้อย่างชัดเจนในโค้ด ให้เซ็นเซอร์ปรับเทียบเป็นเวลาหนึ่งนาทีหลังจากการเปิดเครื่องครั้งแรกและทำการอ่านค่าพื้นฐานทั้งในดินที่แห้งสนิทและดินที่รดน้ำใหม่เพื่อปรับ `DRY_THRESHOLD` สำหรับพืช/กระถางเฉพาะของคุณ

แผนภาพการต่อสาย

VCC → 3V3 GND AOUT → GPIO0 ESP32-C3 Soil moisture sensor modu… used directly in code USB-C cable

โค้ดเริ่มต้น

// Smart Plant Monitor — ESP32-C3 SuperMini + capacitive soil moisture sensor
// No display in this build: readings go to Serial, with an onboard-LED low-moisture warning.

// --- Pins — adjust to match your board's silkscreen if different ---
#define SOIL_PIN 0          // ADC-capable GPIO
#define ONBOARD_LED_PIN 8   // many ESP32-C3 SuperMini boards use GPIO8 for the onboard LED —
                             // verify against your board; if it's wrong, the LED simply won't light

// Capacitive soil sensors read LOWER when WET, HIGHER when DRY (inverse relationship).
// Calibrate these two values for your specific sensor/soil before trusting the percentage.
const int WET_RAW = 1200;   // raw analogRead() value in fully wet soil (example — recalibrate)
const int DRY_RAW = 2800;   // raw analogRead() value in fully dry soil (example — recalibrate)
const int DRY_ALERT_RAW = 2400; // above this raw value, warn that soil is too dry

void setup() {
  Serial.begin(115200);
  pinMode(ONBOARD_LED_PIN, OUTPUT);
  digitalWrite(ONBOARD_LED_PIN, LOW);
}

void loop() {
  int raw = analogRead(SOIL_PIN);

  // Convert to an intuitive 0-100% moisture value (higher = wetter)
  int moisturePercent = map(raw, DRY_RAW, WET_RAW, 0, 100);
  moisturePercent = constrain(moisturePercent, 0, 100);

  bool tooDry = (raw >= DRY_ALERT_RAW);
  digitalWrite(ONBOARD_LED_PIN, tooDry ? HIGH : LOW);

  Serial.print("Raw: ");
  Serial.print(raw);
  Serial.print("  Moisture: ");
  Serial.print(moisturePercent);
  Serial.print("%  ");
  Serial.println(tooDry ? "-> LOW MOISTURE, WATER ME" : "-> OK");

  delay(2000);
}

ไม่แน่ใจขั้นตอนไหน? ถามเรา