Basic Tutorial for Arduino, 感測器 Sensor, 進階篇

【Arduino 進階教學】水位感測器 (Water Level Sensor) 實作:電路接線、類比數值讀取與積水監控應用

在智慧農業、環境監測與智慧居家專案中,水位感測器(Water Level / Raindrops Sensor) 是非常經典且低成本的液體檢測模組。

不論是監測植物自動澆水系統的水箱水位、魚缸水階高度、漏水警報,還是作為雨水感測器使用,這款模組都能輕鬆勝任。本篇文章將帶您了解水位感測器的導電運作原理,並手把手教您如何使用 Arduino 讀取類比訊號!

什麼是水位感測器?(工作原理介紹)

這款水位感測器模組表面印有平行鋪設的導電銅軌(PCB 跡線)。其運作核心建立在 「水的導電性」與「分壓原理」 上:

  1. 平行導線路徑: 板上分為電源線與信號感知線,兩者交錯交織但並未直接相連。

  2. 水作為導體: 當感測器浸入水中時,水滴或水體會充當導電介質,使電源線與信號線之間產生電阻通路線路。

  3. 水位與電阻關係: 浸入水中的深度越深(接觸面積越大),導電通路的電阻就越低,輸出腳位(S)獲得的類比電壓值就越高。

水位感測器引腳定義(Pinout)

水位感測器模組結構非常簡潔,僅需 3 Pin 連接:

引腳標示功能描述連接 Arduino 位置說明
S (Signal)類比訊號輸出Analog Pin (如 A0)輸出 0 ~ 5V 的類比電壓訊號
+ (VCC)電源正極5V 或 3.3V為感測器提供工作電源(建議 3.3V ~ 5V)
– (GND)電源負極(接地)GND建立共同接地電位

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 程式學習爆款套件組(包含豐富驅動專案模組)

👍爆款推薦:程式學習套件組 

購買網址:shop.mirotek.com.tw

硬體電路接線圖解

請參考下方接線表,將水位感測器與 Arduino Uno 進行連接:

  1. S (訊號腳) 連接至 Arduino A0 類比輸入腳位

  2. + (VCC 電源) 連接至 Arduino 5V(或 3.3V)

  3. – (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);
}

程式碼重點剖析

  1. int water_sensor = A0;:設定變數指定類比輸入 Pin 位,此處連接至 Arduino 類比腳位 A0。

  2. Serial.begin(9600);:啟動與電腦間的序列埠溝通,通訊速率為 9600 baud。

  3. val = analogRead(water_sensor);:Arduino 的 ADC(類比轉數位轉換器)將 0~5V 的電壓訊號轉換為 0 ~ 1023 的整數數值。

  4. delay(100);:適當設置延遲時間,確保序列埠傳送品質穩定。

 

成果驗證與測試步驟

  1. 將水位感測器正確接線至 Arduino Uno 上,並透過 USB 線將程式燒錄至開發板。

  2. 開啟 Arduino IDE 的 序列埠監控視窗(Serial Monitor),並確定右下角鮑率設定為 9600 baud

  3. 乾燥狀態測試: 在完全沒接觸水的情況下,序列埠輸出的數值應為 0(或接近 0 的微弱雜訊)。

  4. 浸水測試: 準備一杯水,將水位感測器由淺至深慢慢放入水中:

    • 接觸水面/微量水滴: 數值約上升至 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:為什麼在不同液體中測出來的數值不一樣?

因為該模組是依賴「液體導電度」進行測量。純水、自來水、鹽水或不同化學液體的導電率各有不同,因此在不同液體中測量時,需重新進行校正與數值設定。

延伸學習與推薦教學