ESP32, IOT物聯網

【ESP32教學】第十四篇:水位感測器應用 類比讀取與 RGB LED 水位警報燈實作

一、 實驗說明:監測水位變化與液體洩漏警報!

在智慧農業、自動化澆水、集水坑監測或是居家防漏水警報等 IoT 物聯網專題中,水位感測器(Water Level Sensor / 雨滴感測器) 是非常實用且便宜易用的模組。此款感測器不僅可以偵測水滴(雨水),也能用來測量水位高度、監測集水坑狀態或液體洩漏狀況。

本實驗米羅將帶大家使用 ESP32 開發板 搭配水位感測器與 RGB LED,透過類比訊號讀取水位高度變化,並結合前一篇學到的 RGB LED 混色控制,打造一套具備「高、中、低」三段水位警報指示的物聯網監測系統!

 

二、 實驗材料準備清單

本篇實作 ESP32 水位感測器警報專案所需的硬體元件如下:

  • ESP32 開發板

  • 麵包板 (Breadboard)

  • 水位感測器 (Water Level Sensor)

  • RGB LED 模組

  • 杜邦跳線若干

  • USB 傳輸線

 

🛒 一次備齊創客工具!

歡迎直接購買米羅科技的  ESP32 物聯網應用學習套件,免去東奔西跑湊零件的煩惱。內含 RGB LED 模組、各類感測器及基礎電子元件,是學校課堂教學與個人專案開發的最佳首選!

 

三、 核心知識:水位感測器工作原理與腳位定義

1. 水位感測器(Water Level Sensor)的工作原理

水位感測器表面印有平行鋪設的導電線路。當感測器浸入水中時,水作為導體會改變這些線路之間的電阻值。浸入水中的深度越深(接觸面積越大),導電性越好,輸出的類比電壓也會隨之改變。

2. ESP32 與感測器及 RGB LED 接線對照表

水位感測器的訊號腳位需連接至 ESP32 的 ADC(類比數位轉換器) 腳位。請依照下表進行電路接線:

S (信號):Pin 是一個類比輸出,需要連接到ESP32上的一個類比輸入腳位。

+ (VCC):為感測器供電。建議使用 3.3V – 5V 為傳感器供電。請注意,類比輸出將根據為感測器提供的電壓而變化。

– (接地):接地連接。

 

四、 實作實驗程式碼:讀取水位與 RGB 警報燈控制

請將以下程式碼複製到 Arduino IDE 中並上傳至 ESP32 開發板:

1. 範例程式碼

▼注意:假如使用下列程式碼發生編譯錯誤,則表示您目前安裝的ESP32函式庫較為新版,請務必將「#include <analogWrite.h>」這一行移除並重新編譯,則可編譯成功並正常運行。

#include <analogWrite.h> 

int redPin = 15;     // R 紅色LED控制腳 連接到ESP32的 GPIO15
int greenPin = 17;   // G 綠色LED控制腳 連接到ESP32的 GPIO17
int bluePin = 16;    // B 藍色LED控制腳 連接到ESP32的 GPIO16 
int water_sensor=36; // 水位感測器S信號腳 連接到ESP32的 GPIO36 

void setup()    
{   
  pinMode(redPin, OUTPUT);     //設置redPin對應的腳GPIO15為輸出
  pinMode(greenPin, OUTPUT);   //設置greenPin對應的腳GPIO17為輸出
  pinMode(bluePin, OUTPUT);    //設置bluePin對應的腳GPIO16為輸出
  pinMode(water_sensor,INPUT); //設置water_sensor對應的腳GPIO36為輸入
}    
      
void loop()  
{    
  int val=analogRead(water_sensor); //從水位感測器讀出類比數值 
  if (val>2500){ 
      color(255, 0, 0); //當水位值>2500:红色亮
   }else if (val>800){
      color(255,255,0); //當水位值介於2500~800:黄色亮
   }else{
      color(0,255, 0);  //當水位值小於800:綠色亮   
   }
} 

//顏色控制函數
void color (unsigned char red, unsigned char green, unsigned char blue)
{    
        analogWrite(redPin, red);   
        analogWrite(greenPin,green); 
        analogWrite(bluePin, blue); 
} 

 

2. 燒錄與操作測試

  1. 點擊 Arduino IDE 的 「上傳 (Upload)」 按鈕。

  2. 開啟 「序列埠監控視窗 (Serial Monitor)」(鮑率設為 9600)。

  3. 將水位感測器逐步放入水中測試高低水位變化,觀察數值與 RGB LED 的燈號切換:

    • 高水位 (數值 > 2500): RGB LED 亮紅色發出警報。

    • 中水位 (數值 800 ~ 2500): RGB LED 亮黃色作為提示。

    • 低水位 (數值 < 800): RGB LED 亮綠色代表安全或乾旱狀態。

 

五、 初學者常見卡關問題與排錯指南(Troubleshooting)

1. 點擊上傳編譯時,出現 #include <analogWrite.h> 的 fatal error 錯誤?

  • 解決方案: 代表您目前電腦中的 ESP32 開發板函式庫版本較新,新版的核心已自帶 analogWrite() 函式。請直接刪除或註解掉程式碼第一行 #include <analogWrite.h> 即可順利通過編譯。

 

 2. 感測器沒碰到水,序列埠讀值卻一直很高或跳動劇烈?

  • 電源與接地檢查: 請確認感測器的 + 與 - 針腳是否有確實接在 3.3V (或 5V) 與 GND 上。

  • 腳位選擇問題: 建議優先使用 GPIO 36 (ADC1)。若誤用 ADC2 通道腳位,當 ESP32 啟動 Wi-Fi 時會導致 ADC2 讀數失真或無法運作。

 

 3. 感測器放入水中,但 RGB LED 切換的顏色不對?

  • 腳位接法確認: 請重新檢查 RGB LED 的 R、G、B 控制腳位是否與程式定義一致(GPIO 15 接綠、GPIO 16 接藍、GPIO 17 接紅)。

  • 水質影響導電度: 不同品質的水(純淨水、自來水、雨水)導電度有所不同。您可以透過序列埠監控視窗觀測實際讀到的數值,手動修改程式碼中的 2500 與 800 閾值判斷條件。

 

六、 結語與下一篇教學

恭喜你!成功掌握了 ESP32 讀取水位感測器類比訊號並結合 RGB LED 實作多階段警告燈號的技術。掌握了水位與雨滴的偵測後,就能延伸應用在智慧農場自動排水、家庭防水患告警等實用專題上!下一篇教學,我們將帶大家結合聲音播放模組,實作更震撼的聲光警報器專題!

👈 上一篇回顧: 【ESP32教學】第十三篇:酷炫多彩 RGB LED 燈控制:PWM 調光與色彩混色實作

👉 下一篇預告: 【ESP32教學】第十五篇:MQ-2氣體感測器與ISD1820語音錄放音模組 異味與煙霧語音警報器實作

▼【ESP32教學】教學總索引頁面

 

相關文章