污水管理是市政基礎設施的一個重要方面,毫無疑問,它會影響我們的日常衛(wèi)生。污水/排水管理不善會導致城市洪水,這在擁擠的城市中最為常見。這個問題可以通過使用基于物聯(lián)網和傳感器技術的智能污水管理設備來解決。
在本文中,我們將構建一個智能設備,它可以感知排水系統(tǒng)何時堵塞,如果水因堵塞而溢出,我們將通知市政當局采取必要的行動。此外,使用Android應用程序,可以實時監(jiān)控排水系統(tǒng)的狀態(tài)。
所需組件
HCSR04超聲波傳感器
浮子傳感器/導電電極
面包板電源
連接線
引領
12V、1 AMP DC 適配器
污水監(jiān)測項目工作
在該項目中,使用了兩個傳感器作為輸入設備,即用于檢測堵塞的超聲波傳感器和用于檢測溢水的水位傳感器。來自這些傳感器的信息在 ESP8266 中接收和處理,ESP8266作為微控制器和 WiFi 模塊。下圖代表我們項目的框圖。
ESP8266 在內部執(zhí)行所有邏輯和數(shù)學運算,并將適當?shù)?a target="_blank">信號發(fā)送到 Blynk 云以執(zhí)行必要的操作。在這里,實時超聲波距離被發(fā)送到 Blynk 應用程序,并且在阻塞或溢出的情況下也會向移動設備發(fā)送推送通知。
基于物聯(lián)網的污水監(jiān)測電路圖
首先,可以按照下圖污水監(jiān)測裝置的電路圖連接電路。
在這里,兩個導體被用作水位檢測器,也可以以類似的方式用浮子傳感器代替。我已將電路焊接在穿孔板上,如下所示。
然后為了外部保護,它被封裝在一個塑料外殼中,最終組裝如下所示:
設置用于遠程污水監(jiān)測的 Blynk 應用程序
Blynk 是一款可以在 Android 和 iOS 設備上運行的應用程序,可以使用我們的智能手機控制任何物聯(lián)網設備。我們可以創(chuàng)建自己的圖形用戶界面來設計我們的物聯(lián)網應用程序 GUI。您還可以查看我們之前構建的所有其他Blynk IoT 項目。在這里,我們將為這個項目設置我們的 Blynk 應用程序來監(jiān)控污水狀態(tài)。
設置前,請從 Google Play 商店下載 Blynk 應用程序(iOS 用戶可從 App Store 下載)。安裝后,使用您的電子郵件 ID 和密碼進行注冊。
在 Blynk 上創(chuàng)建一個新項目:
成功安裝后,打開應用程序,您將看到一個帶有“新建項目”選項的屏幕。單擊此處,將彈出一個新屏幕,我們需要在其中設置項目名稱、板和連接類型等參數(shù)。在此項目中,選擇設備為NodeMCU,連接類型為 Wi-Fi,然后單擊“創(chuàng)建”。
成功創(chuàng)建項目后,我們將在我們的注冊電子郵件中獲得一個Authenticate ID 。保存驗證 ID 以供將來參考。
創(chuàng)建圖形用戶界面:
在 Blynk 中打開項目,單擊“+”號,我們將在其中獲取可以在該項目中使用的小部件。這里選擇了一個“儀表”小部件來顯示間隙距離,并選擇一個“通知”小部件來接收來自 NodeMCU 的通知。在 Gauge 設置中,可以進行必要的更改,如參數(shù)名稱、本項目中的 V1 引腳號。
為污水監(jiān)測編程 NodeMCU
要將代碼上傳到 NodeMCU,請按照以下步驟操作:
1. 打開 Arduino IDE,然后轉到File--》Preferences--》Settings。
2.在 “Additional Board Manager URL ”字段中輸入https://arduino.esp8266.com/stable/package_esp8266com_index.json并單擊“Ok”。
3.現(xiàn)在轉到Tools--》 Board--》 Boards Manager。在 Boards Manager 窗口中,在搜索框中鍵入ESP 8266,選擇最新版本的板并單擊安裝。
4.安裝完成后,進入Tools-->Board-->選擇NodeMCU 1.0(ESP-12E Module)?,F(xiàn)在,您可以使用 Arduino IDE 對 NodeMCU 進行編程。
完成上述 NodeMCU 編程設置后,我們必須將完整代碼上傳到 ESP8266 NodeMCU。首先,我們必須在代碼中包含所有必需的庫文件。
通過在代碼中包含所有必需的庫文件來啟動代碼,例如用于ESP8266板的 ESP8266WiFi.h 等。
這里“?BlynkSimpleEsp8266.h”用于將 Blynk 與 ESP8266 模塊集成。要下載包,打開 Arduino IDE,然后轉到選項卡Sketch并單擊選項Include Library--> Manage Libraries。然后在搜索框中搜索 Blynk 并下載并安裝適用于 ESP8266 的 Blynk 包。
?
#define BLYNK_PRINT 序列號 #include#include
?
接下來,定義用于超聲波傳感器和 LED 的引腳。
?
常數(shù) trigPin1 = D3; 常量 echoPin1 = D2; #define redled D4
?
現(xiàn)在,定義了將 NodeMCU 與互聯(lián)網連接所需的網絡憑據(jù),即 SSID 和密碼。然后定義先前保存的 Blynk 帳戶憑據(jù),例如身份驗證 ID。確保您已編輯個人憑據(jù)以代替這些變量。
?
charauth[]="aX3Cded2oXXXXXXXXoo9bAVEGt1U"; charssid[] = "管理員"; 字符傳[] = "123456789"; void setup() { pinMode(trigPin1, OUTPUT); pinMode(echoPin1,輸入); pinMode(A0,輸入); 數(shù)字寫入(A0,輸出); pinMode(紅色,輸出); 數(shù)字寫入(紅色,低); 序列號.開始(9600); Blynk.begin(auth, ssid, pass); }
?
接收并存儲來自水流傳感器的模擬數(shù)據(jù)以供進一步使用。
?
int float1=analogRead(A0);
?
為了計算距離,我們需要通過超聲波傳感器的觸發(fā)引腳向傳感器提供輸入脈沖。在這里,根據(jù) HC-SR04 數(shù)據(jù)表,給出一個 2 微秒的脈沖,然后從回波引腳讀取傳感器的輸出脈沖,并以厘米為單位計算距離。
?
數(shù)字寫入(trigPin1,低); 延遲微秒(2); 數(shù)字寫入(trigPin1,高); 延遲微秒(10); 數(shù)字寫入(trigPin1,低); 持續(xù)時間1 = 脈沖輸入(echoPin1,高); 距離1 = 持續(xù)時間1 * 0.034 / 2;
?
要將距離數(shù)據(jù)發(fā)送到 Blynk,使用如下所示的Blynk.virtualWrite函數(shù),其中需要定義特定的虛擬引腳。
?
Blynk.virtualWrite(V1,distance1);
?
然后,為溢出或阻塞條件下的 LED 指示寫入 if-else 條件。在這里,根據(jù)我的設置,我以 5 厘米作為參考。您必須根據(jù)現(xiàn)有設置進行更改。要發(fā)送通知,請使用Blynk.notify函數(shù),如下所示。
?
if(distance1<=5) { Blynk.notify("阻塞警報!"); 數(shù)字寫入(紅色,高); } else if(float1<=800) { Blynk.notify("溢出警報!"); 數(shù)字寫入(紅色,高); } else { digitalWrite(redled, LOW); } blynk.run(); }
?
污水監(jiān)測系統(tǒng)的工作
完成設置后,只需將代碼上傳到您的 NodeMCU,您的項目就可以進行測試了。我的設置如下所示。
#define BLYNK_PRINT Serial
#include
#include
const int trigPin1 = D3;
常量 int echoPin1 = D2;
#define redled D4
char auth[]="aX3Cded2oxBxxxxx9bAVEGt1U";
字符 ssid[] = "管理員";
字符傳[] = "123456789";
國際持續(xù)時間1,距離1;
整數(shù)計數(shù)=0;
void setup()
{
? pinMode(trigPin1, OUTPUT);
? pinMode(echoPin1,輸入);
? pinMode(A0,輸入);
? 數(shù)字寫入(A0,輸出);
? pinMode(紅色,輸出);
? 數(shù)字寫入(紅色,低);
? 序列號.開始(9600);
? Blynk.begin(auth, ssid, pass);
}
無效循環(huán)()
{
? int float1=analogRead(A0);
? 數(shù)字寫入(trigPin1,低);
? 延遲微秒(2);
? 數(shù)字寫入(trigPin1,高);
? 延遲微秒(10);
? 數(shù)字寫入(trigPin1,低);
? 持續(xù)時間1 = 脈沖輸入(echoPin1,高);
? 距離1 = 持續(xù)時間1 * 0.034 / 2;
? Serial.println(float1);
?? Blynk.virtualWrite(V1,distance1);
?? if(distance1<=5)
?? {
??? Blynk.notify("阻塞警報!");
??? 數(shù)字寫入(紅色,高);
?? }
?? else if(float1<=800)
?? {
??? Blynk.notify("溢出警報!");
???? 數(shù)字寫入(紅色,高);
?? }
????? 其他
?? {
??? 數(shù)字寫入(紅色,低);
?? }
??? blynk.run();
?? }
評論
查看更多