土壤濕度感測器應用:智慧農業的入門實例
土壤濕度感測器能精準量測土壤含水量,協助農業專案提升灌溉效率與作物品質。本文介紹土壤濕度感測器的種類、應用場景與 Arduino 入門實驗,適合智慧農業研究、教育專題與自動灌溉系統設計。
什麼是土壤濕度感測器
常見兩種類型:
- 電阻式:以電阻變化判斷乾濕,價格低、適合教學。
- 電容式:受鹽分影響較小,訊號穩定,較適合長期監測。
應用場景
入門示警(本文示範)
根據乾濕程度點亮 LED 或鳴叫蜂鳴器,方便學生或研究人員快速觀察變化。
教學與專題
可搭配 Arduino/ESP32 完成量測、記錄、可視化與簡易自動化控制,適合科展或課程實作。
進階延伸(選配)
加入水流量感測器(如 YF-S201、G1/2、G3/4 等規格),在開啟閥門或手動澆水時,確認是否真的有水流通過,以避免「以為澆到水但其實沒流量」的情況。
所需材料清單
- Arduino Uno 或相容開發板
- 土壤濕度感測器模組(電容式或電阻式)
- 繼電器模組或 NPN 電晶體模組(用於驅動蜂鳴器等外部負載)
- LED 與限流電阻、有源蜂鳴器(二擇一或都裝)
- 杜邦線與麵包板
- 水流量感測器,用於進階偵測有無水流(選配)
接線示意
- 土壤濕度感測器訊號腳 → A0(類比輸入)
- 繼電器或電晶體控制腳 → D7(數位輸出)
- LED 示警(若不用繼電器):D6 → 電阻 → LED → GND
- VCC 依模組規格接 3.3V 或 5V;GND 共地
- (選配)水流量感測器訊號腳 → D2(數位輸入)
程式範例:可調整閾值+相容高/低電位觸發
// 土壤濕度入門示範(LED/蜂鳴器示警,無水泵)
// 可調整乾濕閾值,並相容「高/低電位觸發」的繼電器或電晶體模組
const int SOIL_PIN = A0; // 土壤濕度讀取腳
const int ALERT_PIN = 7; // 繼電器/電晶體或蜂鳴器控制腳
const int LED_PIN = 6; // LED 示警(若不用可忽略)
const int DRY_THRESHOLD = 400; // 低於此值視為偏乾,請依實測調整
// 若你的繼電器/電晶體是低電位觸發(常見),請設為 true
// 若為高電位觸發,請設為 false
const bool ACTIVE_LOW = true;
void setup() {
pinMode(ALERT_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
digitalWrite(ALERT_PIN, ACTIVE_LOW ? HIGH : LOW); // 初始化為關閉
digitalWrite(LED_PIN, LOW);
Serial.begin(9600);
}
void setAlert(bool on) {
// 將「是否啟動」轉為正確的電位輸出
if (ACTIVE_LOW) {
digitalWrite(ALERT_PIN, on ? LOW : HIGH);
} else {
digitalWrite(ALERT_PIN, on ? HIGH : LOW);
}
digitalWrite(LED_PIN, on ? HIGH : LOW);
}
void loop() {
int soil = analogRead(SOIL_PIN);
Serial.print("Soil raw: ");
Serial.println(soil);
bool isDry = (soil < DRY_THRESHOLD);
setAlert(isDry); // 偏乾則啟動蜂鳴器/繼電器與 LED
delay(1000);
}
如何校正乾濕閾值
- 先將探針完全置於乾燥土壤,記錄數值(約 600~900,依模組而異)。
- 再將探針置於濕潤土壤,記錄數值(約 200~500)。
- 以兩者中間或實際需求設定 DRY_THRESHOLD,例如 400。
加入水流量感測器(選配)
若要確認「澆水時是否真的有流量」,可讀取水流量感測器的脈波訊號做簡單判定。以下為概念化範例(不同型號腳位與係數略有差異)。
// 範例:偵測是否有水流(僅作為概念示意)
const int FLOW_PIN = 2;
volatile unsigned long pulseCount = 0;
unsigned long lastMillis = 0;
void IRAM_ATTR onFlowPulse() { // 某些板子不需 IRAM_ATTR,依平台調整
pulseCount++;
}
void setupFlow() {
pinMode(FLOW_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(FLOW_PIN), onFlowPulse, FALLING);
lastMillis = millis();
}
void checkFlowOncePerSecond() {
if (millis() - lastMillis >= 1000) {
unsigned long pulses = pulseCount;
pulseCount = 0;
lastMillis = millis();
// 只做有無流量判斷:有脈波即代表有水流
bool hasFlow = (pulses > 0);
Serial.print("Flow pulses/s: ");
Serial.println(pulses);
// 可依 hasFlow 做提示或記錄
}
}
常見實作重點
- 探針插拔次數不宜過多,易磨損或氧化;電容式較耐用。
- 室外長期部署建議做防水與防腐蝕處理,並加遮雨結構。
- 若要資料長期記錄,可加入 SD 卡、雲端或藍牙/Wi-Fi 上傳。
入門可先完成「土壤濕度偵測+LED/蜂鳴器提示」,熟悉後再加入水流量感測器、雲端上傳或低功耗無線傳輸。
