เฟิร์นกระถางแขวน — ปัญหาที่เจอบ่อย
ต้นเฟิร์น (Fern) เป็นพืชที่ชอบความชื้นสม่ำเสมอ แต่ กระถางแขวน มีข้อจำกัด:
- ❌ เดินสายไฟลำบาก — ไม่มีปลั๊กใกล้ ๆ
- ❌ เช็คดินยาก — ต้องปีนหรือลดกระถางลงมา
- ❌ ลืมรดน้ำบ่อย — โดยเฉพาะเฟิร์นที่ต้องการน้ำเกือบทุกวัน
- ❌ รดน้ำเยอะไปก็แฉะ — รากเน่า
แนวทางแก้: ระบบตรวจเช็คความชื้นแบบไร้สาย ใช้แบตเตอรี่ อายุการใช้งานหลายเดือน แจ้งเตือนด้วย LED กระพริบเมื่อดินแห้ง
ระบบที่เราจะสร้าง
| ชิ้นส่วน | อุปกรณ์ | ราคา |
|---|---|---|
| 🧠 MCU | ATtiny85 หรือ ESP8266 (Deep Sleep) | ~30-80 บาท |
| 💧 เซ็นเซอร์ความชื้น | Capacitive Soil Moisture Sensor v1.2 | ~50-80 บาท |
| 🔴 ไฟแจ้ง | LED + Resistor 220Ω | ~5 บาท |
| 🔋 แบต | 18650 Li-Ion 3.7V 3,000mAh | ~80-150 บาท |
| 📦 กล่อง | กล่องกันน้ำเล็ก + ท่อหด | ~50 บาท |
| รวม | ~215-365 บาท |
ทำไมต้อง Capacitive Sensor?
YL-69 (Resistive) ที่มีบทความก่อนหน้านี้ — ใช้หลักการวัดความต้านทานระหว่างขั้วทองแดง 2 ขั้ว
ข้อเสีย: ทองแดง corrode ไวเพราะกระแสไฟฟ้าไหลผ่านดินชื้น → อายุสั้น (ไม่กี่เดือน)
Capacitive Sensor — วัดค่า capacitance ของดิน (ไม่มีขั้วเปลือย, เคลือบสารกันน้ำ)
- ✅ ไม่มีการสึกกร่อน — อยู่ได้นานหลายปี
- ✅ กินไฟน้อย — วัดทีเดียว (~5mA) แล้วปิด
- ✅ ทนทาน — เคลือบอีพ็อกซีกันน้ำ
วงจรและการต่อ
แบต 18650 3.7V ────[ TP4056 charge ]──── 5V USB
│
[HT7833 3.3V reg]
│
3.3V ──── ATtiny85 Pin 8 (VCC)
ATtiny85 Pin 4 (GND)
ATtiny85 Pin 7 (PB2) → LED + 220Ω → GND
ATtiny85 Pin 5 (PB0) → Capacitive Sensor AOUT
หรือใช้ ESP8266 (NodeMCU) ถ้าอยากได้ WiFi แจ้งเตือน:
NodeMCU (ESP8266): D1 (GPIO5) → Capacitive Sensor VCC (ควบคุมเปิด-ปิด) A0 → Capacitive Sensor AOUT D2 (GPIO4) → LED + 220Ω → GND Deep Sleep: GPIO16 → RST (เชื่อมต่อเพื่อ wake)
Source Code — ATtiny85 (ประหยัดแบตที่สุด)
// Fern Watch — ATtiny85 + Capacitive Soil Sensor + LED Alert
// ทำงานทุก 30 นาที วัดความชื้น ถ้าแห้ง → กระพริบ LED 10 ครั้ง
const int SENSOR_PIN = PB0; // AOUT
const int LED_PIN = PB2; // LED + 220Ω
const int DRY_THRESHOLD = 550; // ปรับตามเซ็นเซอร์ (0-1023)
const unsigned long SLEEP_MIN = 30; // ตรวจทุก 30 นาที
void setup() {
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
}
void loop() {
int moisture = readMoisture();
if (moisture > DRY_THRESHOLD) {
// ดินแห้ง — กระพริบ LED
for (int i = 0; i < 10; i++) {
digitalWrite(LED_PIN, HIGH);
delay(200);
digitalWrite(LED_PIN, LOW);
delay(200);
}
}
// Deep Sleep
sleep(SLEEP_MIN * 60000L); // แปลงนาทีเป็น ms
}
int readMoisture() {
// Capacitive sensor: ยิ่งชื้น → ยิ่งได้ค่าต่ำ
// ยิ่งแห้ง → ยิ่งได้ค่าสูง
int total = 0;
for (int i = 0; i < 5; i++) {
total += analogRead(SENSOR_PIN);
delay(10);
}
return total / 5; // ค่าเฉลี่ย
}
// ATtiny85 Deep Sleep — ใช้ Watchdog Timer
#include <avr/sleep.h>
#include <avr/wdt.h>
void sleep(unsigned long ms) {
int cycles = ms / 8000; // WDT สูงสุด 8 วินาที
for (int i = 0; i < cycles; i++) {
wdt_enable(WDTO_8S);
WDTCSR |= (1 << WDIE); // Enable interrupt mode
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_mode();
// กลับมาทำงานต่อเมื่อ WDT interrupt
sleep_disable();
wdt_disable();
}
}
// WDT Interrupt — ปลุก ATtiny85
ISR(WDT_vect) {
// แค่ปลุก — ไม่ต้องทำอะไร
}
Source Code — ESP8266 (มี WiFi แจ้ง LINE/Telegram)
// Fern Watch ESP8266 — เช็คความชื้น + Deep Sleep + (optional) WiFi alert
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
const int SENSOR_POWER = 5; // D1 — ควบคุม VCC เซ็นเซอร์
const int SENSOR_PIN = A0; // A0 — อ่านค่า
const int LED_PIN = 4; // D2 — LED
const int DRY_THRESHOLD = 550;
const int SLEEP_MIN = 60; // ตรวจทุก 1 ชม.
// WiFi (optional — ถ้าต้องการแจ้งเตือน)
const char* ssid = "HOME_WIFI";
const char* pass = "wifi_password";
void setup() {
pinMode(SENSOR_POWER, OUTPUT);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
// เปิดไฟเซ็นเซอร์เฉพาะตอนวัด
digitalWrite(SENSOR_POWER, HIGH);
delay(100);
int moisture = readMoisture();
// ปิดเซ็นเซอร์
digitalWrite(SENSOR_POWER, LOW);
if (moisture > DRY_THRESHOLD) {
// ดินแห้ง — กระพริบ LED
blinkLED(10);
// Optional: ส่งแจ้งเตือน WiFi
// sendAlert("🌿 เฟิร์นแห้ง! กรุณารดน้ำ");
}
// Deep Sleep
ESP.deepSleep(SLEEP_MIN * 60 * 1000000ULL);
}
void loop() {} // ไม่ได้ใช้ — Deep Sleep ตลอด
int readMoisture() {
int total = 0;
for (int i = 0; i < 5; i++) {
total += analogRead(SENSOR_PIN);
delay(10);
}
return total / 5;
}
void blinkLED(int times) {
for (int i = 0; i < times; i++) {
digitalWrite(LED_PIN, HIGH);
delay(200);
digitalWrite(LED_PIN, LOW);
delay(200);
}
}
void sendAlert(String msg) {
WiFi.begin(ssid, pass);
int tries = 0;
while (WiFi.status() != WL_CONNECTED && tries < 20) {
delay(500);
tries++;
}
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("https://api.telegram.org/botTOKEN/sendMessage");
http.addHeader("Content-Type", "application/json");
String body = "{\"chat_id\":\"CHAT_ID\",\"text\":\"" + msg + "\"}";
http.POST(body);
http.end();
}
}
อายุแบตเตอรี่ — ทำงานได้นานแค่ไหน?
ATtiny85 + CR2032 (แบตกระดุม)
กระแสตอน Deep Sleep: < 0.1 µA กระแสตอนวัด: ~5 mA (100ms) กระแสตอน LED กระพริบ: ~10 mA (4 วินาที 10 ครั้ง) แบต CR2032: ~220 mAh Scenario: เช็คทุก 30 นาที, แห้งวันละ 2 ครั้ง ต่อวัน: Deep Sleep 23 ชม. 59 นาที: 0.1µA × 24h = 0.0024 mAh วัด 48 ครั้ง/วัน: 5mA × 0.1s × 48 = 0.0067 mAh LED กระพริบ 2 ครั้ง/วัน: 10mA × 4s × 2 = 0.022 mAh รวม/วัน ≈ 0.03 mAh **CR2032 220 mAh อยู่ได้ ≈ 7,333 วัน ≈ 20 ปี!** 🤯
ในโลกจริง: Self-discharge ของ CR2032 (~1-2% ต่อปี) ทำให้อายุจริง ~5-8 ปี — ซึ่งมากเกินพอสำหรับเฟิร์นกระถางแขวน
ESP8266 + 18650 (พร้อม WiFi)
กระแส Deep Sleep: ~20 µA (ESP8266) กระแสวัด + WiFi: ~80 mA (10 วินาที) แบต 18650 3.7V 3,000 mAh Scenario: เช็คทุก 1 ชม., แห้งวันละ 1 ครั้ง (ส่งแจ้งเตือน) ต่อวัน: Deep Sleep 23 ชม. 59 นาที: 20µA × 24h = 0.48 mAh วัด 24 ครั้ง/วัน: 80mA × 10s × 24 = 5.33 mAh ส่งแจ้ง 1 ครั้ง: 80mA × 5s = 0.11 mAh รวม/วัน ≈ 6 mAh **18650 3,000 mAh อยู่ได้ ≈ 500 วัน = 1 ปี 4 เดือน** ✅
การติดตั้งสำหรับเฟิร์นกระถางแขวน
- ติดเซ็นเซอร์: เสียบ Capacitive Sensor ลงดินเฉียง 45° ห่างจากโคนต้น ~3-5 ซม. depth ~4-6 ซม.
- ยึดกล่อง: ใช้ Cable Tie รัดกล่องกันน้ำเข้ากับขากระถางหรือโซ่แขวน
- LED: เจาะรูเล็ก ๆ ที่กล่อง หรือใช้ Flashing LED สีแดง (กระพริบในตัว)
- สายเซ็นเซอร์: ถ้าต้องยาว ใช้สาย Siamese (VCC+GND+AOUT คู่กัน) หรือเพิ่มขด filter capacitor 0.1µF ที่หัวเซ็นเซอร์
- กันน้ำ: จุ่มข้อต่อสายด้วย Liquid Tape หรือ Tesa 4651 — โดยเฉพาะจุดต่อที่โดนน้ำรด
ปรับค่า Threshold สำหรับเฟิร์น
เฟิร์นชอบความชื้นสูง (อย่าให้แห้งสนิท) — ควรตั้งค่าให้แจ้งเตือนเมื่อดินเริ่มแห้ง ยังไม่ถึงขั้นแห้งสนิท
- 🔵 เปียกมาก: 200-350 — เพิ่งรดน้ำ ไม่ต้องทำอะไร
- 🟢 ชื้น: 350-500 — ยังโอเค เฝ้าดู
- 🟡 เริ่มแห้ง: 500-650 — แจ้งเตือน!
- 🔴 แห้ง: 650-800 — รีบรดน้ำ!
Tip: ทดสอบโดยจุ่มเซ็นเซอร์ในน้ำ แล้วค่อย ๆ ดึงขึ้นมา อ่านค่า analog → ตั้ง threshold ที่ 60-70% ของช่วง
Pro Tips สำหรับต้นเฟิร์น
- 🌿 เฟิร์นชอบความชื้นสูง แต่รากอย่าแช่น้ำ — กระถางต้องมีรูระบายน้ำ
- 💧 ถ้า LED กระพริบ — ให้รดน้ำ แบบช้า ๆ จนน้ำไหลออกก้นกระถาง
- ☀️ เฟิร์นชอบ แสงรำไร — ไม่ถูกแดดโดยตรง (จะทำให้ดินแห้งเร็ว)
- 🌬️ กระถางแขวนมักลมโกรก — ดินแห้งเร็วกว่าปกติ ตั้ง threshold ให้ไวขึ้นอีกหน่อย
- 🔋 ถ้าใช้ ATtiny85 + CR2032 — อายุแบตแทบไม่ต้องคิด ใส่แล้วลืมได้เลย
⚠️ หมายเหตุ: เนื้อหาค้นคว้าและเรียบเรียงโดย Hermes AI — ข้อมูลทางเทคนิคควรตรวจสอบก่อนนำไปใช้งานจริง