出國度假花花草草沒人澆水枯掉,應該是每個有陽台的人都遇過的困擾。這個專案其實是Maker圈CP值很高的入門實作,材料不貴,而且真的解決生活問題。
YL-69跟電容式感測器怎麼選
YL-69這種電阻式感測器便宜,但長期插在土裡會因為電化學反應加速氧化,通常撐不了太久就要換;電容式土壤濕度感測器貴一點,但耐腐蝕、壽命長很多,長期使用(這種本來就是要一直插在土裡的應用)強烈建議直接上電容式版本,不要為了省小錢之後一直換感測器。
系統邏輯設計
- 讀取土壤濕度類比值,設定一個門檻(實際數值要自己測試校正,因為土壤種類、盆栽大小都會影響讀值範圍)
- 低於門檻→觸發繼電器啟動抽水馬達幾秒→停止→等待一段時間再重新偵測,不要偵測到就一直澆,土壤含水量的變化需要時間
- 如果用ESP32做主控,可以額外加上WiFi通知功能,澆水的時候推播一則訊息到手機,出國在外也能掌握家裡植物的狀況
馬達抽水管建議走虹吸原理架設(水桶位置略高於植物,或至少不要讓馬達長時間空轉),抽水馬達最怕的就是乾抽燒毀,程式邏輯裡一定要有「水桶沒水就不動作」的保護判斷,這個小細節很多教學會漏掉。
材料清單(BOM)
| 品項 | 數量 | 備註 |
|---|---|---|
| ESP32 開發板 | 1 | 本篇教學使用的開發板 |
| 電容式土壤濕度感測器 | 1 | 耐腐蝕,長期插土建議首選 |
| 一路5V繼電器模組 | 1 | |
| 抽水馬達(潛水式小型水泵) | 1 | 依實際水泵規格自備 |
| 水管與水桶 | 1組 |
腳位接線對照表
| 開發板腳位 | 模組腳位 | 說明 |
|---|---|---|
| 3.3V | 土壤濕度感測器 VCC | 感測器供電(電容式多為寬電壓3.3-5V) |
| GND | 土壤濕度感測器 GND | 共地 |
| GPIO34 | 土壤濕度感測器 AOUT | 類比訊號輸入(ESP32的ADC腳位) |
| 5V | 繼電器 VCC | 繼電器供電 |
| GND | 繼電器 GND | 共地 |
| GPIO26 | 繼電器 IN | 繼電器觸發訊號 |
📷 〔照片預留位:請在這裡插入實際接線/組裝照片〕
完整程式碼
// 土壤濕度自動澆花系統(ESP32版)
const int SOIL_PIN = 34; // 類比輸入(ESP32的ADC腳位)
const int RELAY_PIN = 26;
const int DRY_THRESHOLD = 2600; // 乾燥門檻,務必依實際感測器與土壤自行測試校正
const unsigned long PUMP_DURATION = 5000; // 抽水持續時間(毫秒)
const unsigned long CHECK_INTERVAL = 3600000; // 偵測間隔,這裡設1小時,避免頻繁澆水
void setup() {
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
Serial.begin(115200);
}
void loop() {
int soilValue = analogRead(SOIL_PIN);
Serial.print("土壤濕度讀值:");
Serial.println(soilValue);
// 提醒:抽水馬達最怕乾抽燒毀,若水桶容易見底,
// 建議加裝水位/浮球開關,在程式邏輯裡多一層「沒水就不動作」的保護判斷
if (soilValue > DRY_THRESHOLD) {
Serial.println("土壤偏乾,啟動抽水");
digitalWrite(RELAY_PIN, HIGH);
delay(PUMP_DURATION);
digitalWrite(RELAY_PIN, LOW);
Serial.println("抽水結束");
// 這裡可以接上WiFi推播通知,出國在外也能掌握家裡植物的狀況
} else {
Serial.println("土壤濕度足夠,不動作");
}
delay(CHECK_INTERVAL); // 不要偵測到就一直澆,土壤含水量的變化需要時間
}
