在智慧農業、環境監測與智慧居家專案中,水位感測器(Water Level / Raindrops Sensor) 是非常經典且低成本的液體檢測模組。
不論是監測植物自動澆水系統的水箱水位、魚缸水階高度、漏水警報,還是作為雨水感測器使用,這款模組都能輕鬆勝任。本篇文章將帶您了解水位感測器的導電運作原理,並手把手教您如何使用 Arduino 讀取類比訊號!
什麼是水位感測器?(工作原理介紹)
這款水位感測器模組表面印有平行鋪設的導電銅軌(PCB 跡線)。其運作核心建立在 「水的導電性」與「分壓原理」 上:
平行導線路徑: 板上分為電源線與信號感知線,兩者交錯交織但並未直接相連。
水作為導體: 當感測器浸入水中時,水滴或水體會充當導電介質,使電源線與信號線之間產生電阻通路線路。
水位與電阻關係: 浸入水中的深度越深(接觸面積越大),導電通路的電阻就越低,輸出腳位(S)獲得的類比電壓值就越高。
水位感測器引腳定義(Pinout)
水位感測器模組結構非常簡潔,僅需 3 Pin 連接:
S (信號):Pin 是一個類比輸出,需要連接到Arduino上的一個類比輸入腳位。
+ (VCC):為感測器供電。建議使用 3.3V – 5V 為傳感器供電。請注意,類比輸出將根據為感測器提供的電壓而變化。
– (接地):接地連接。
💡 小貼士: 類比輸出的電壓大小會隨著您供給的 VCC 電壓而變化。若接 5V,完全浸水時讀值接近 1023;若接 3.3V,完全浸水時讀值接近 675。
實驗所需硬體材料
進行本實驗前,請先準備以下電子零件(點擊連結可直接前往商城選購):
Arduino Uno R3 開發板 x 1
USB 數據傳輸線 x 1
水位感測器模組 (Water Level Sensor) x 1
實驗麵包板 x 1
杜邦跳線(母對公 / 公對公) x 若干
盛水容器(如水杯,用於測試)
🛍️ 準備好你的硬體工具了嗎? 推薦選購:米羅科技 – Arduino 程式學習爆款套件組(包含豐富驅動專案模組)
硬體電路接線圖解
請參考下方接線表,將水位感測器與 Arduino Uno 進行連接:
S (訊號腳) 連接至 Arduino A0 類比輸入腳位
+ (VCC 電源) 連接至 Arduino 5V(或 3.3V)
– (GND 地線) 連接至 Arduino GND
完整 Arduino 程式碼範例
本程式透過 analogRead() 函式讀取 A0 腳位的類比訊號,並將當前水位對應的數值(0 ~ 1023)實時輸出至序列埠視窗(Serial Monitor)。
int water_sensor=0;
int val=0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val=analogRead(water_sensor);
Serial.println(val);
delay(100);
}
程式碼重點剖析
int water_sensor = A0;:設定變數指定類比輸入 Pin 位,此處連接至 Arduino 類比腳位 A0。Serial.begin(9600);:啟動與電腦間的序列埠溝通,通訊速率為 9600 baud。val = analogRead(water_sensor);:Arduino 的 ADC(類比轉數位轉換器)將 0~5V 的電壓訊號轉換為0 ~ 1023的整數數值。delay(100);:適當設置延遲時間,確保序列埠傳送品質穩定。
成果驗證與測試步驟
將水位感測器正確接線至 Arduino Uno 上,並透過 USB 線將程式燒錄至開發板。
開啟 Arduino IDE 的 序列埠監控視窗(Serial Monitor),並確定右下角鮑率設定為 9600 baud。
乾燥狀態測試: 在完全沒接觸水的情況下,序列埠輸出的數值應為 0(或接近 0 的微弱雜訊)。
浸水測試: 準備一杯水,將水位感測器由淺至深慢慢放入水中:
接觸水面/微量水滴: 數值約上升至 100 ~ 300。
浸入半深: 數值約來到 400 ~ 600。
幾乎完全浸沒(注意不要超過電路頂端元件): 數值可達 600 ~ 800+。
▼ 下載程序完成後,打開序列埠監控視窗,並將水位感測器慢慢放入水中並觀察水位感測器數值的變化。
常見問題與除錯指南(FAQ)
Q1:如何防止水位感測器長期浸水導致銅軌電解腐蝕?
金屬導電線路在通電並接觸水份時,會產生電解腐蝕效應,導致銅線快速氧化壞死。
解決方案: 平時不要將 VCC 長時間接在 5V 上!改將感測器的 VCC 接到 Arduino 的數位輸出腳位(如 Pin 7)。只有需要讀取資料前,才將 Pin 7 設為 HIGH 通電,讀取完成後立即設為 LOW 斷電,這能大幅延長感測器壽命。
Q2:如何設定閾值來製作「淹水警報器」或「水位控制」?
可以在 loop() 中加入條件判斷(If-Else)。例如:
if (val > 400) {
// 水位超過預設安全值,觸發蜂鳴器或亮紅燈警報
}Q3:為什麼在不同液體中測出來的數值不一樣?
因為該模組是依賴「液體導電度」進行測量。純水、自來水、鹽水或不同化學液體的導電率各有不同,因此在不同液體中測量時,需重新進行校正與數值設定。


