久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于 ESP32 與 Blynk 的智能水塔水位監(jiān)測(cè)系統(tǒng)設(shè)計(jì)

基于 ESP32 與 Blynk 的智能水塔水位監(jiān)測(cè)系統(tǒng)設(shè)計(jì)

作者: 時(shí)間:2025-11-14 來(lái)源: 收藏


1. 問(wèn)題背景:凌晨 5 點(diǎn)溢出的水

很多家庭都經(jīng)歷過(guò)類(lèi)似的場(chǎng)景:
某天凌晨 5 點(diǎn),樓頂水塔開(kāi)始往外溢水,水龍頭邊還能聽(tīng)見(jiàn)水泵嗡嗡作響——因?yàn)榍耙煌硗涥P(guān)電機(jī)。

這一小小的疏忽,帶來(lái)了一連串問(wèn)題:

  • 自來(lái)水被白白浪費(fèi);

  • 電機(jī)長(zhǎng)時(shí)間空轉(zhuǎn),電能被浪費(fèi);

  • 更嚴(yán)重的是:水泵可能因過(guò)載過(guò)熱而燒毀;

  • 這一情況在 家庭、宿舍、公寓樓、鄉(xiāng)村水塔 中每天都在重復(fù)發(fā)生。

與此同時(shí),我們正在談?wù)摍C(jī)器人、無(wú)人機(jī)、AI、云計(jì)算,但對(duì)自家水箱 “滿(mǎn)了沒(méi)”“快空了沒(méi)” 這樣簡(jiǎn)單的問(wèn)題,卻往往依賴(lài)人工去樓頂查看——這顯得有些“反差”。

因此,本文從一個(gè)真實(shí)的小痛點(diǎn)出發(fā),設(shè)計(jì)并實(shí)現(xiàn)了一個(gè) 基于 ESP32 的 IoT 智能水位監(jiān)測(cè)系統(tǒng),目標(biāo)是:

  • 實(shí)時(shí)監(jiān)測(cè)水塔水位,并在手機(jī)上可視化;

  • 當(dāng)水滿(mǎn)或水位過(guò)低時(shí)推送告警;

  • 可選:自動(dòng)關(guān)閉水泵,避免溢水和過(guò)載;

  • 使用常見(jiàn)器件(ESP32 + HC-SR04 + Blynk),成本低、易


2. 系統(tǒng)整體方案

整個(gè)系統(tǒng)的核心思路是:
用超聲波傳感器測(cè)量“水面距離傳感器的高度”,再換算成水位高度與百分比,通過(guò) Wi-Fi 上傳到 Blynk 云端,在手機(jī) App 上實(shí)時(shí)顯示和告警。

2.1 使用的主要硬件

  1. ESP32 開(kāi)發(fā)板

    • 集成 Wi-Fi,支持 Blynk IoT 平臺(tái);

    • 負(fù)責(zé)傳感器采集、數(shù)據(jù)處理和聯(lián)網(wǎng)通信。

  2. HC-SR04 超聲波測(cè)距傳感器

    • 安裝在水箱頂部,向下發(fā)射超聲波;

    • 測(cè)量“傳感器到水面”的距離,實(shí)現(xiàn)非接觸式水位檢測(cè)。

  3. 繼電器模塊(可選)

    • 由 ESP32 控制;

    • 通過(guò)繼電器控制水泵電源,實(shí)現(xiàn)自動(dòng)“斷電/開(kāi)機(jī)”。

  4. 智能手機(jī) + Blynk App

    • 作為 IoT 云平臺(tái)和人機(jī)界面;

    • 用于顯示實(shí)時(shí)水位、推送告警通知、遠(yuǎn)程控制水泵。

2.2 方案特點(diǎn)

  • 硬件簡(jiǎn)單、成本低、易于在家庭和鄉(xiāng)村環(huán)境部署;

  • 無(wú)需接觸水體,傳感器安裝和維護(hù)難度低;

  • 通過(guò)云平臺(tái)和手機(jī) App,全程無(wú)線(xiàn)化。


3. 工作原理與測(cè)量邏輯

系統(tǒng)的關(guān)鍵公式非常直觀:

水位高度 = 水箱總高度 ? 傳感器測(cè)得的距離

假設(shè):

  • 水箱深度(高度)為 TANK_DEPTH(單位 cm);

  • 超聲波測(cè)得傳感器到水面的距離為 distance

則有:

waterLevel = TANK_DEPTH - distance
waterPercent = (waterLevel / TANK_DEPTH) * 100%

為了保證數(shù)據(jù)合理,軟件會(huì)對(duì)結(jié)果做邊界限制:

  • 若計(jì)算結(jié)果 < 0,則歸零;

  • 若計(jì)算結(jié)果 > 100%,則按 100% 處理。


4. 硬件安裝:傳感器與水箱布局

  1. 超聲波傳感器安裝位置

    • 探頭正對(duì)水面中央,避免壁面干擾;

    • 與水面之間沒(méi)有管道、浮球等遮擋物;

    • 傳感器高度盡可能接近水箱頂面,以便把水箱總高度設(shè)為常數(shù)。

    • 將 HC-SR04 固定在水箱頂部?jī)?nèi)側(cè),探頭朝下;

    • 盡量保證:

  2. 電氣連接

    • 繼電器線(xiàn)圈電壓與觸點(diǎn)額定電壓;

    • 水泵電源屬于高壓部分,必須安全接線(xiàn)。

    • HC-SR04 的 TRIGECHO 分別連接到 ESP32 的 GPIO:

      #define TRIG_PIN  5
      #define ECHO_PIN  18
    • ESP32 通過(guò) USB 或穩(wěn)壓電源供電;

    • 若使用繼電器控制水泵,需要額外注意:


5. 軟件設(shè)計(jì)與 Blynk 云平臺(tái)

5.1 核心功能

  • 周期性觸發(fā)超聲波測(cè)距(每 1 秒一次);

  • 計(jì)算距離 → 換算水位高度 → 換算水位百分比;

  • 將數(shù)據(jù)發(fā)送到 Blynk 虛擬引腳(例如 V0、V1);

  • 在串口輸出調(diào)試信息;

  • 設(shè)置“水滿(mǎn)”“水位偏低”的閾值,觸發(fā)手機(jī)通知與電機(jī)控制。

5.2 Blynk 端數(shù)據(jù)映射

在示例代碼中:

  • V0:顯示水位百分比(0–100%);

  • V1:顯示水位高度(單位:cm)。

在手機(jī)端 Blynk App 上可以:

  • 放置 Gauge(儀表盤(pán))組件 顯示百分比水位;

  • Label/Value Display 顯示精確高度。

  • 配置 事件通知 / Automation,實(shí)現(xiàn):

    • 水位 ≥ 95%:推送“水箱已滿(mǎn),電機(jī)已關(guān)閉”;

    • 水位 ≤ 10%:推送“水位過(guò)低,請(qǐng)開(kāi)啟電機(jī)”。


6. 完整代碼解析(ESP32 + HC-SR04 + Blynk)

下面是你給出的完整代碼,已經(jīng)可以實(shí)現(xiàn) 水位測(cè)量 + Blynk 實(shí)時(shí)上報(bào)。在文章中可以直接作為“參考實(shí)現(xiàn)”。

/************* Smart Water Level Monitoring System *************
   Hardware: ESP32, HC-SR04 Ultrasonic Sensor, Blynk App
   Features:
   ? Measure water level in tank
   ? Send percentage to Blynk App
   ? Show water level on Serial Monitor
   ? Automatically detect tank full or empty
   ? Motor control can be added easily
****************************************************************/

#define BLYNK_TEMPLATE_ID "Your_Template_ID"
#define BLYNK_TEMPLATE_NAME "Water Level Monitor"
#define BLYNK_AUTH_TOKEN "Your_Blynk_Auth_Token"

#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

// Wi-Fi Credentials
char ssid[] = "Your_WiFi_Name";
char pass[] = "Your_WiFi_Password";

// Ultrasonic Sensor Pins
#define TRIG_PIN  5
#define ECHO_PIN  18

// Tank Dimensions (in cm)
const int TANK_DEPTH = 100; // Tank height in centimeters

long duration;
float distance, waterLevel, waterPercent;

BlynkTimer timer;

/***************** Function to Measure Water Level *****************/
void measureWaterLevel() {
  // Send ultrasonic pulse
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  // Read echo time
  duration = pulseIn(ECHO_PIN, HIGH);

  // Calculate Distance (cm)
  distance = duration * 0.034 / 2;

  // Calculate water level
  waterLevel = TANK_DEPTH - distance;

  // Calculate percentage
  waterPercent = (waterLevel / TANK_DEPTH) * 100.0;

  if (waterPercent < 0) waterPercent = 0;
  if (waterPercent > 100) waterPercent = 100;

  // Send data to Blynk
  Blynk.virtualWrite(V0, waterPercent);  // Water Level in %
  Blynk.virtualWrite(V1, waterLevel);    // Water Level in cm

  // Print on Serial Monitor
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.print(" cm | Water Level: ");
  Serial.print(waterLevel);
  Serial.print(" cm | Tank Filled: ");
  Serial.print(waterPercent);
  Serial.println(" %");
}

/***************** Setup Function *****************/
void setup() {
  Serial.begin(115200);

  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);

  // Connect to Blynk
  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);

  // Timer runs every 1 second
  timer.setInterval(1000L, measureWaterLevel);
}

/***************** Main Loop *****************/
void loop() {
  Blynk.run();
  timer.run();
}

可以按以下思路向讀者解釋關(guān)鍵部分(如果你準(zhǔn)備寫(xiě)成系列文章,可以在后續(xù)篇章展開(kāi)):

  • 超聲波測(cè)距
    pulseIn(ECHO_PIN, HIGH) 返回高電平持續(xù)時(shí)間(單位:微秒);
    聲速約為 340 m/s,即 0.034 cm/μs;
    距離 = 時(shí)間 × 聲速 / 2(往返距離除以 2)。

  • 定時(shí)任務(wù)
    使用 BlynkTimer 每秒調(diào)用一次 measureWaterLevel();
    避免在 loop() 中使用 delay(),保證 Blynk 連接穩(wěn)定。

  • 云端通信
    Blynk.virtualWrite(V0, waterPercent) 將數(shù)據(jù)推送至虛擬引腳 V0;
    Blynk App 中將儀表盤(pán)綁定到 V0 即可實(shí)時(shí)顯示。

如需擴(kuò)展自動(dòng)控制水泵,只需:

  • 增加一個(gè) RELAY_PIN,設(shè)置為輸出;

  • measureWaterLevel() 中加入邏輯:

    • waterPercent >= 95digitalWrite(RELAY_PIN, LOW) 關(guān)閉水泵;

    • waterPercent <= 10 → 根據(jù)需求提示或自動(dòng)開(kāi)啟水泵。


7. 實(shí)際使用體驗(yàn)

部署完成后,典型的使用體驗(yàn)包括:

  • 無(wú)論在家還是出門(mén),只要手機(jī)聯(lián)網(wǎng),就能隨時(shí)查看水塔水位;

  • 在水位接近 100% 前,手機(jī)自動(dòng)收到“水滿(mǎn)”的提醒,有條件可以自動(dòng)關(guān)泵;

  • 在水位過(guò)低前收到“水不足”提醒,避免臨時(shí)無(wú)水可用;

  • 再也不需要凌晨爬樓檢查水塔,也避免了長(zhǎng)期溢水和水泵過(guò)載。

從用戶(hù)反饋來(lái)看,“減少了水和電的浪費(fèi),也減少了心理上的‘擔(dān)心’”,是一類(lèi)非常貼近日常生活的小而實(shí)用的 IoT 應(yīng)用。


8. 應(yīng)用價(jià)值與擴(kuò)展方向

從工程和應(yīng)用角度,這一項(xiàng)目具有以下意義:

  • 節(jié)水與節(jié)能
    通過(guò)自動(dòng)檢測(cè)和告警,減少大量日常水浪費(fèi)和水泵空轉(zhuǎn)耗電。

  • 設(shè)備保護(hù)
    通過(guò)自動(dòng)斷泵可降低水泵因長(zhǎng)期過(guò)載而損壞的風(fēng)險(xiǎn)。

  • 可擴(kuò)展性強(qiáng)
    可以進(jìn)一步擴(kuò)展成:

    • 多水箱、多點(diǎn)水位監(jiān)測(cè);

    • 接入 LoRa/4G,實(shí)現(xiàn)遠(yuǎn)程鄉(xiāng)村供水系統(tǒng)監(jiān)控;

    • 與家庭用水統(tǒng)計(jì)、漏水監(jiān)測(cè)等場(chǎng)景結(jié)合。


9. 結(jié)語(yǔ)

技術(shù)并不只屬于大型工業(yè)系統(tǒng)或復(fù)雜的 AI 算法,它同樣可以落地到家庭水箱、鄉(xiāng)村水塔這樣的“小地方”。

基于 ESP32 + 超聲波傳感器 + Blynk 的 智能水位監(jiān)測(cè)系統(tǒng),就是一個(gè)典型示例:
通過(guò)簡(jiǎn)單的硬件、開(kāi)源的開(kāi)發(fā)環(huán)境和成熟的 IoT 平臺(tái),就能解決長(zhǎng)期存在的日常小問(wèn)題,實(shí)現(xiàn)更節(jié)水、更省心的用水方式。

如果你愿意,我們下一步可以在這篇文章基礎(chǔ)上,繼續(xù)完善:

  • 加上系統(tǒng)框圖、接線(xiàn)示意圖;

  • 增補(bǔ)帶閾值控制的繼電器控制代碼版本;

  • 寫(xiě)一份“安裝與標(biāo)定步驟”,方便讀者直接照做。



關(guān)鍵詞: DIY

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉