智能灌溉系統利用物聯網技術實現自動化澆水,通過土壤傳感器監測濕度,結合 ESP8266 模塊進行數據處理和無線通信,從而提高農業效率、減少水資源浪費。本系統開發基於常見硬件(如 NodeMCU 開發板)和軟件(Arduino IDE),部署簡單,適用於小型農田或温室。下面我將逐步解釋開發與部署過程,確保內容真實可靠。

1. 系統概述

智能灌溉系統的核心是實時監測土壤濕度,並根據預設閾值自動控制水泵。系統工作流程如下:

  • 土壤傳感器採集濕度數據。
  • ESP8266 讀取數據,通過 Wi-Fi 上傳或本地處理。
  • 如果濕度低於閾值 $T$(例如 $T = 30%$),則觸發繼電器啓動水泵灌溉。
  • 系統可擴展遠程監控(如通過手機APP)。

關鍵公式:

  • 土壤濕度計算:傳感器輸出為模擬電壓值,需轉換為百分比濕度。假設傳感器輸出範圍對應 ADC 值(0-1023),濕度 $h$ 可表示為:
    $$ h = \frac{ADC_{value}}{1023} \times 100% $$
    其中 $ADC_{value}$ 是模擬到數字轉換值,需校準(如通過實測調整係數)。
  • 控制決策:當 $h < T$ 時,系統激活水泵;否則關閉。閾值 $T$ 可基於作物類型設置。
2. 硬件準備

所需組件(常見且低成本):

  • ESP8266 開發板:如 NodeMCU,提供 Wi-Fi 連接和微控制器功能。
  • 土壤濕度傳感器:如 FC-28 或類似模塊,輸出模擬信號。
  • 繼電器模塊:用於控制水泵電源(高電壓隔離)。
  • 水泵:小型直流潛水泵(12V)。
  • 電源:適配器或電池(為 ESP8266 和水泵供電)。
  • 其他:杜邦線、麪包板(用於測試)、防水外殼(部署用)。

連接方式:

  • 土壤傳感器:VCC 接 3.3V,GND 接 GND,信號線接 ESP8266 的模擬輸入引腳(如 A0)。
  • 繼電器:IN 引腳接 ESP8266 數字輸出引腳(如 D1),COM 和 NO 接水泵電源。
  • ESP8266:通過 USB 連接電腦編程,部署時用外部電源。
3. 軟件開發(使用 Arduino IDE)

開發環境設置:

  1. 安裝 Arduino IDE(從官網下載)。
  2. 添加 ESP8266 支持:在 IDE 中,通過“文件”>“首選項”添加開發板管理器 URL,然後安裝“esp8266”包。
  3. 選擇開發板:工具 > 開發板 > NodeMCU 1.0。

代碼編寫:實現讀取傳感器、計算濕度、控制決策。以下是一個基礎示例代碼(基於 C++),包括註釋説明。

#include <ESP8266WiFi.h> // 引入 ESP8266 Wi-Fi 庫

// 定義引腳
const int sensorPin = A0;    // 土壤傳感器接 A0
const int relayPin = D1;     // 繼電器接 D1
const float threshold = 30.0; // 濕度閾值 T = 30%

void setup() {
  Serial.begin(9600);       // 初始化串口通信
  pinMode(relayPin, OUTPUT); // 設置繼電器引腳為輸出
  digitalWrite(relayPin, LOW); // 初始關閉水泵
  WiFi.begin("your_SSID", "your_password"); // 連接 Wi-Fi(可選,用於遠程監控)
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected!");
}

void loop() {
  int sensorValue = analogRead(sensorPin); // 讀取傳感器 ADC 值
  float humidity = (sensorValue / 1023.0) * 100.0; // 計算濕度 h,公式: h = (ADC_value / 1023) * 100%
  
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.println("%");

  // 控制邏輯:如果 h < T,啓動水泵;否則關閉
  if (humidity < threshold) {
    digitalWrite(relayPin, HIGH); // 打開繼電器,水泵啓動
    Serial.println("Pump ON - Irrigating");
  } else {
    digitalWrite(relayPin, LOW); // 關閉繼電器,水泵停止
    Serial.println("Pump OFF");
  }
  
  delay(5000); // 每 5 秒檢測一次
}

代碼解釋

  • setup() 函數初始化引腳和 Wi-Fi(如果添加遠程功能)。
  • loop() 函數循環讀取傳感器值,計算濕度 $h$,並與閾值 $T$ 比較。
  • 公式 $h = \frac{ADC_{value}}{1023} \times 100%$ 直接嵌入代碼,實際中需校準:例如,如果傳感器輸出非線性,可添加校準方程如 $h = m \times ADC_{value} + c$,其中 $m$ 和 $c$ 通過實驗確定。
  • 控制決策使用簡單 if 語句:當 $h < T$ 時,輸出高電平觸發繼電器。
4. 系統部署

部署步驟:

  1. 測試階段
  • 在室內連接所有組件,上傳代碼到 ESP8266。
  • 使用串口監視器(Arduino IDE 中)查看濕度值和泵狀態。
  • 校準傳感器:將傳感器插入乾燥和濕潤土壤,記錄 ADC 值,調整公式係數。例如,如果實測濕度 0% 對應 ADC=200,100% 對應 ADC=800,則公式改為 $$ h = \frac{ADC_{value} - 200}{800 - 200} \times 100% $$。
  1. 田間安裝
  • 將傳感器埋入土壤(深度約 5-10cm,根據作物根部)。
  • ESP8266 和繼電器放入防水盒,固定在支架上。
  • 水泵連接水源(如水桶或管道),確保電源穩定。
  • 測試 Wi-Fi 信號:如果添加遠程監控,使用 ESP8266 的 Wi-Fi 客户端發送數據到雲平台(如 ThingSpeak 或 Blynk)。
  1. 優化與維護
  • 電源管理:添加太陽能板或電池延長工作時間。
  • 遠程監控:擴展代碼,使用 MQTT 協議上傳數據到手機 APP,實時查看濕度和控制狀態。
  • 安全保護:在代碼中添加超時邏輯(如水泵最多運行 10 分鐘),防止過灌溉。
  • 維護:定期檢查傳感器清潔和校準,避免泥土堵塞。
5. 注意事項
  • 成本與可靠性:總成本約 100-200 元,組件易購於電商平台。確保使用防水傳感器和外殼,提高户外耐久性。
  • 擴展性:可集成更多傳感器(如温度、光照),或添加機器學習算法優化閾值 $T$(例如,基於歷史數據動態調整)。
  • 常見問題
  • 傳感器誤差:定期校準,使用平均值濾波(在代碼中取多次讀數平均)。
  • Wi-Fi 斷連:添加重連邏輯,或使用本地存儲(如 SD 卡)緩存數據。
  • 功耗:ESP8266 進入深度睡眠模式(添加 ESP.deepSleep() 函數),減少能耗。