電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>智能水表開(kāi)源分享

智能水表開(kāi)源分享

2022-10-27 | zip | 0.01 MB | 次下載 | 2積分

資料介紹

描述

1. 故事

雖然能源價(jià)格每天都在上漲,但與天然氣和電力相比,水的價(jià)格(仍然)適中。然而,節(jié)約用水是有充分理由的,例如,當(dāng)您意識(shí)到淋浴時(shí)會(huì)使用大量熱水并且加熱水會(huì)消耗能源時(shí)。換句話(huà)說(shuō):每天都有大量的能量被沖走。

雖然您可以在儀表本身上看到用水量,但它并不能告訴您淋浴或沖馬桶或澆灌花園里的植物所用的水量。

在互聯(lián)網(wǎng)上,您可以找到幾種出售的水表(有時(shí)價(jià)格不菲),也有一些 DIY 水表的出版物。這些 DIY 設(shè)計(jì)為制作提供了很好的指導(dǎo),但始終基于設(shè)計(jì)師的特定知識(shí)、技能和可用手段。

這就是為什么我開(kāi)始這個(gè)項(xiàng)目是為了自己設(shè)計(jì)和建造一個(gè)智能水表,當(dāng)然要考慮到其他人已經(jīng)發(fā)布的解決方案和信息感謝開(kāi)源社區(qū)。

這里描述的設(shè)計(jì)自然也是由我自己可用的手段和技能驅(qū)動(dòng)的,但我希望它可以幫助您構(gòu)建自己的版本,或者至少它可以激發(fā)您進(jìn)行自己的設(shè)計(jì)。

1.1 設(shè)計(jì)

智能水表的設(shè)計(jì)基于以下要求:

  • 它應(yīng)該提供以升為單位的每分鐘用水量以及每日和總用水量的在線(xiàn)數(shù)據(jù)
  • 數(shù)據(jù)應(yīng)在具有可選時(shí)間軸縮放的圖表中顯示,并且應(yīng)可通過(guò) PC/筆記本電腦、平板電腦或智能手機(jī)訪(fǎng)問(wèn)
  • 它應(yīng)該能夠測(cè)量以升/分鐘為單位的瞬時(shí)水流量
  • 它應(yīng)該在離家時(shí)提供水流警報(bào)
  • 它應(yīng)該被包裝成一個(gè)簡(jiǎn)單的夾在現(xiàn)有水表上,不需要對(duì)水表進(jìn)行任何物理修改。

這些要求是開(kāi)發(fā)完整智能水表的基礎(chǔ),因此產(chǎn)生了以下硬件產(chǎn)品

pYYBAGNX-g2AaseJAAGlWkyad9o106.png
?

嵌入式軟件已使用 ARDUINO IDE 進(jìn)行編程并閃存到 ESP32 微控制器,內(nèi)置于上述外殼中,該外殼只是作為現(xiàn)有水表的夾子制成。

該項(xiàng)目的一個(gè)基本要素是使用 BLYNK 作為 IOT 服務(wù)器。

使用 Blynk,該設(shè)備連接到 Internet,并創(chuàng)建了一個(gè) Web 儀表板以及在手機(jī)上使用的儀表板。因此,智能水表可以在世界任何地方進(jìn)行監(jiān)控。

在 PC/筆記本電腦或平板電腦上生成的 Blynk 儀表板示例如下所示:

pYYBAGNX-hOAZULGAALmY53kOro822.png
?

為了在手機(jī)上使用,創(chuàng)建了以下儀表板:

poYBAGNX-heAfhaOAAH9kp4gHrg154.png
?

在這兩種類(lèi)型的儀表板上,可以觀察到以升/分鐘為單位的瞬時(shí)水流以及目前使用的以升為單位的水量:

poYBAGNX-hqADYk9AACa5zMobhY750.png
?

如果您不在家并且有水流,可以生成警報(bào),作為平板電腦或手機(jī)上的推送通知:

pYYBAGNX-hyAC7FiAABK_pmCi50803.jpg
?

也可以在 Blynk 中進(jìn)行自動(dòng)化,例如當(dāng)今天的用水量超過(guò)每日平均值時(shí)發(fā)出警告(通過(guò)將年總消耗量除以 365 減去假期來(lái)計(jì)算):

pYYBAGNX-h6AKkbEAABeoGCFWek211.png
?

1.2 現(xiàn)有水表

我項(xiàng)目中使用的現(xiàn)有水表是SENSUS 620型號(hào),如下圖:

poYBAGNX-iGARMwPAAEgqdEZ35w820.png
?

該模型最顯著的特點(diǎn)是:

  • 最小計(jì)量單位是 1 升(見(jiàn)小紅圈)
  • 升指示器上有一塊金屬板(1轉(zhuǎn)為1升)
  • 透明蓋上有 2 個(gè)“存根”(藍(lán)色箭頭)
  • 最大流量 2.5m3 每小時(shí)(2500/60= 41, 6 Lit/min or 0, 6944 lit/sec)

旋轉(zhuǎn)表盤(pán)上的金屬板是這個(gè)項(xiàng)目最重要的項(xiàng)目,因?yàn)樗_(kāi)啟了在設(shè)計(jì)中使用以下傳感器的可能性:

poYBAGNX-iOAOd5YAACMV3c9bck936.png
電感式接近傳感器 LJ18A3-8-Z/BX
?

這是一款能夠在距離頂部最大 8 毫米處感應(yīng)金屬的傳感器。

它最重要的特點(diǎn)是:

  • 3 線(xiàn)連接(+ 電源,- 電源或 GND,數(shù)據(jù))
  • 電源:5V DC(這是我訂購(gòu)的,但收到的是 6V-36V 型號(hào),幸好它也可以在 5V 上工作,所以我可以保持電子設(shè)計(jì)簡(jiǎn)單,并使用 5V 手機(jī)充電器作為電源)
  • 數(shù)據(jù)引腳給出一個(gè)信號(hào),當(dāng)傳感器附近檢測(cè)到金屬時(shí)為“高”,沒(méi)有時(shí)為“低”
  • 直徑:18 毫米
  • 螺紋 (M18) 長(zhǎng)度 45 毫米

我在自行設(shè)計(jì)的 3D 打印支架中構(gòu)建傳感器。支架可以放在現(xiàn)有水表的“2根”頂部。對(duì)于初始實(shí)驗(yàn),傳感器連接到帶有 Mini ESP32 TTGO T7 V1.3 的面包板設(shè)置。

一個(gè)重要方面是傳感器與旋轉(zhuǎn)金屬板的正確對(duì)齊。為此,支架設(shè)計(jì)有一個(gè)槽,可以將傳感器定位在支架內(nèi)。為了正確的檢測(cè)行為,傳感器不應(yīng)正好位于旋轉(zhuǎn)板上方。

傳感器的軸心應(yīng)稍微偏離升數(shù)刻度盤(pán)的旋轉(zhuǎn)軸:

poYBAGNX-iaAXWD-AAFhp-Gym7I230.png
?

此圖在 Fusion360 中制作,構(gòu)成傳感器支架的基礎(chǔ)草圖。

設(shè)計(jì)的 3D 打印結(jié)果如下所示:

pYYBAGNX-iiADI0YAAEZq_Q3gEU807.png
傳感器安裝在現(xiàn)有儀表上
?

為了測(cè)試正確的定位,可以將傳感器連接到 5V DC 并監(jiān)控當(dāng)升表盤(pán)的金屬部分從下方通過(guò)時(shí)傳感器頂部的紅色 LED 是否閃爍。

2. 事情

下圖顯示了智能水表使用的項(xiàng)目:

poYBAGNX-iuATSqAAAL1iQbWQ-8449.jpg
用于智能水表的項(xiàng)目
?

不可見(jiàn)的是帶電纜的 5V USB 適配器。應(yīng)切割焊板以適合 3D 打印外殼。

3. 第 1 步:系統(tǒng)設(shè)計(jì)

水表設(shè)備將通過(guò) Mini ESP32 微控制器 (MCU) 的板載 Wi-Fi 功能持續(xù)連接到互聯(lián)網(wǎng)。因此,在此應(yīng)用中使用電池并不是一個(gè)非常實(shí)用的解決方案。傳感器和 MCU 的功率要求很低,因此使用 1A(最大電流)的 5V DC USB 充電器綽綽有余。在測(cè)試期間使用連接到 USB 充電器的簡(jiǎn)單 USB 功率計(jì)顯示,在正常情況下電流低于 10 mA。在通過(guò) WiFi 測(cè)量和傳輸數(shù)據(jù)流期間,在 20mA 和最大 50mA 之間會(huì)有短暫的波動(dòng)。

該系統(tǒng)的主要元件是 ESP32 微控制器 (MCU)、接近傳感器和 5V 電源。

藍(lán)色 LED 用于指示與最近的接入點(diǎn) (AP) 的 Wi-Fi 連接狀態(tài)。紅色 LED 用作開(kāi)機(jī)指示燈,黃色 LED 將指示傳感器何時(shí)被觸發(fā)。

除 5V 充電器外,所有電子設(shè)備都將構(gòu)建在 3D 打印外殼內(nèi)。外殼有一個(gè)開(kāi)口,用于將微型 USB 插頭連接到 MCU,以便在需要時(shí)修改軟件。

4.第2步:制作智能水表

4.1 使用的東西

智能水表使用以下材料:

pYYBAGNX-i6AM2N4AACNZVaplCM225.jpg
?

4.2 電子設(shè)計(jì)

電子設(shè)計(jì)如下圖所示:

poYBAGNX-jCANxYiAAB_zpnA98I700.png
智能水表電路圖
?

上圖是使用 EasyEDA 制作的。

請(qǐng)注意,ESP32 的管腳布局,如上圖所示,與實(shí)際不同。它已被修改以使圖表更易于理解。實(shí)際管腳分配如下圖所示:

pYYBAGNX-jOAISkyAAFNEEjv6cs299.png
ESP32 TTGO T7 V1.3 管腳分配
?

請(qǐng)注意,引腳 27 實(shí)際上是 GPIO27(而不是打印的 GPIO17)

用于使用 ARDUINO IDE 測(cè)試和構(gòu)建軟件的面包板設(shè)置如下圖所示:

poYBAGNX-jaAUE5LAALnoxrDRrA992.jpg
面包板設(shè)置
?

仔細(xì)看看迷你 ESP32:

pYYBAGNX-jmACtf2AAF1ctQy80Q119.png
迷你ESP32 TTGO T7 V1.3
?

4.2.1 電路圖的一些特定方面

讓我們仔細(xì)看看結(jié)合光電耦合器(PC817)的電感式接近傳感器LJ18A3-8ZBX(檢測(cè)金屬或不檢測(cè)金屬)金屬傳感器。

電路圖的相關(guān)部分如下所示。

poYBAGNX-juAH5eeAABy2D7uA-U069.png
?

如果沒(méi)有金屬檢測(cè),傳感器的數(shù)據(jù)輸出將為LOW ,這意味著在 PCF817 光耦合器內(nèi)部,IR 二極管將不會(huì)輻射,因此 IR 接收“晶體管”將不會(huì)導(dǎo)通。由于 GPIO 04 使用“上拉”電阻進(jìn)行編程,因此 ESP32 MCU 上運(yùn)行的固件會(huì)將 GPIO 04 視為高電平。

當(dāng)有金屬檢測(cè)時(shí),會(huì)發(fā)生相反的過(guò)程。換句話(huà)說(shuō),當(dāng)水表中的刻度盤(pán)順時(shí)針旋轉(zhuǎn)時(shí),GPIO 04 的狀態(tài)會(huì)從 HIGH 變?yōu)?LOW,然后過(guò)一會(huì)兒又回到 HIGH。

可以使用特定的 Arduino 代碼以微秒為單位測(cè)量?jī)纱无D(zhuǎn)換之間的持續(xù)時(shí)間。該持續(xù)時(shí)間取決于刻度盤(pán)的旋轉(zhuǎn)速度,因此是瞬時(shí)水流(流速)的量度。

此屬性可用于確定以升/秒或升/分鐘為單位的瞬時(shí)水流量!

當(dāng)然,同時(shí)可以通過(guò)計(jì)算 GPIO 04 從 HIGH 變?yōu)?LOW 的次數(shù)來(lái)測(cè)量用水量(以升為單位)。

這種方法有一個(gè)問(wèn)題,那就是當(dāng)表盤(pán)停止旋轉(zhuǎn),傳感器下方的金屬板時(shí),GPIO04 保持低電平。

幸運(yùn)的是,這可以在軟件中解決。

同時(shí),光耦有助于解決傳感器數(shù)據(jù)輸出端5V高電平的問(wèn)題。當(dāng)直接連接到 ESP32 GPIO 引腳時(shí),5V 會(huì)立即炸掉該 GPIO。光耦合器將 5V 電平降至 3.3V,可由 GPIO 引腳(使用內(nèi)部 PULLUP 編程)處理。

另一個(gè)需要注意的方面是 RST 引腳和 GND 之間的 10uF 電容。當(dāng)將新代碼從 PC 上的 Arduino IDE 刷新到 ESP32 時(shí),這將啟用啟動(dòng)過(guò)程(無(wú)需按下其板載啟動(dòng)按鈕)。

4.3 機(jī)電組裝

可焊接原型板 (5 * 7 cm) 可安裝在外殼內(nèi):

poYBAGNX-j6AKeAGAAKMGVGs_1E648.jpg
?

面包板上的組件被轉(zhuǎn)移到一個(gè)小的(5 * 7 厘米)單面原型板上,然后安裝在 3D 打印外殼內(nèi)。

pYYBAGNX-kGAOUWjAAJFuZWVcK0476.jpg
所有組件都放在原型面包板上并內(nèi)置在外殼中
?

然后用 2 個(gè)螺釘將外殼和傳感器支架固定在一起,并定位在現(xiàn)有水表的 2 個(gè)短柱上。

?
?
?
poYBAGNX-kSAbIlgAALEtiM4LTk015.jpg
?
1 / 2 ?電子外殼和傳感器支架的組裝
?

4.4 軟件設(shè)計(jì)

該項(xiàng)目的關(guān)鍵要素是使用 BLYNK 作為物聯(lián)網(wǎng)服務(wù)器。

使用 Blynk,您可以將您的設(shè)備連接到 Internet,并創(chuàng)建移動(dòng)和 Web 儀表板,以便從世界任何地方控制您的設(shè)備。

設(shè)備通常是 ESP32、Arduino 等微控制器 (MCU)。它們可以使用 Wi-Fi 連接到 Internet。您可以將傳感器和執(zhí)行器連接到此 MCU,并使用 Blynk 遠(yuǎn)程監(jiān)控或控制它們。

如果您是 Blynk 的新手,則需要?jiǎng)?chuàng)建一個(gè) Blynk 帳戶(hù)才能將其用于此項(xiàng)目。免費(fèi)的 Blynk 帳戶(hù)使您可以使用其基本功能和最多 2 個(gè)在線(xiàn)設(shè)備(這對(duì)于本項(xiàng)目中的應(yīng)用程序來(lái)說(shuō)已經(jīng)足夠了)。

事實(shí)上,你可以用 Blynk 做一些令人驚奇的事情,它有很好的文檔記錄,甚至還有一個(gè)示例代碼生成器可以幫助你快速入門(mén)。

成為有經(jīng)驗(yàn)的用戶(hù)后,有可能以合理的費(fèi)用獲得很多額外的功能。

此后,您應(yīng)該對(duì)儀表板上的模板、設(shè)備、數(shù)據(jù)流和小部件之間的關(guān)系有更多的了解。

復(fù)制模板 ID、設(shè)備名稱(chēng)和身份驗(yàn)證令牌并將數(shù)據(jù)存儲(chǔ)在臨時(shí) TXT 文件中,保存此文件以備后用。

現(xiàn)在打開(kāi)為此項(xiàng)目提供的 Arduino 草圖,并在創(chuàng)建自己的模板時(shí)填寫(xiě)前 3 行代碼,其中包含從 Blynk 獲得的日期:

#define BLYNK_TEMPLATE_ID "Own TMPL-code"            // put here your own template code as obtained from BLYNK
#define BLYNK_DEVICE_NAME "My Smart Watermeter"      // put here the name of your own device 
#define BLYNK_AUTH_TOKEN "My template token code"    // put here your TOKEN code

此后,Arduino 中包含以下庫(kù):

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

接下來(lái),您必須在 Arduino 草圖中填寫(xiě)以下幾行:

char auth[] = BLYNK_AUTH_TOKEN;       // variable using the above defined TOKEN code specific to your device
char ssid[] = "my WIFI";              // your own WiFi credentials
char pass[] = "my password";          // Set the password of your own WiFi, set as "" for an open netwerk

下表給出了為您的智能水表制作的數(shù)據(jù)流的數(shù)據(jù),這些數(shù)據(jù)與 Arduino Sketch 中使用的代碼相匹配。

必須先定義這些數(shù)據(jù)流,然后才能開(kāi)始使用自己的 Web 儀表板版本。

poYBAGNX-kmAPKDxAACS6YM1-Cs579.png
?

下面是我為自己的智能水表創(chuàng)建的儀表板示例。我沒(méi)有找到制作儀表板副本并將其作為文件提供的方法,因此這是您必須自己完成的工作。習(xí)慣 UI 需要一些時(shí)間,但經(jīng)過(guò)一段時(shí)間的使用后,您會(huì)發(fā)現(xiàn)制作漂亮的儀表板實(shí)際上是多么容易(您可以在世界任何地方的筆記本電腦或平板電腦上看到) )。在這里您可以找到制作自己的儀表板所需的所有信息:https ://docs.blynk.io/en/getting-started/template-quick-setup

示例 Web 儀表板。

pYYBAGNX-hOAZULGAALmY53kOro822.png
?

移動(dòng)儀表板示例

為了在手機(jī)上使用,Blynk 中還有另一個(gè)工具“Mobile Dashboard”,它使您能夠創(chuàng)建一個(gè)適合手機(jī)小顯示屏的漂亮儀表板。這個(gè)工具使用起來(lái)有點(diǎn)困難,但是經(jīng)過(guò)一段時(shí)間的演奏,您將能夠獲得良好的結(jié)果。

poYBAGNX-k-AQ-asAAC3YFJrBrw559.jpg
?

在 Blynk 中,還可以進(jìn)行“自動(dòng)化”,例如,可用于向您的手機(jī)發(fā)送推送通知和/或向您在 Blynk 個(gè)人資料中設(shè)置的電子郵件地址發(fā)送電子郵件。例如,如果在 Web Dashboard 中設(shè)置了離開(kāi)家的開(kāi)關(guān)按鈕時(shí)檢測(cè)到水流。

推送通知示例

pYYBAGNX-hyAC7FiAABK_pmCi50803.jpg
?

或者這個(gè):

poYBAGNX-lSASUY0AABiQdZ7uQI263.png
?

示例電子郵件

pYYBAGNX-laAeZ2pAADmZWTcvTM316.png
?

4.4.1 Arduino 草圖

現(xiàn)在是時(shí)候仔細(xì)看看 Arduino Sketch。

使用以下常量:

const int Liter_count_Pin = 4; 
const int B_LEDPin = 27; 
const int Or_LEDPin = 25; 
float Flowrate_factor = 288330.00;

前 3 個(gè)用于將所需的 GPIO 引腳分配給命名參數(shù)。Flowrate_factor 是一個(gè)數(shù)字,用于計(jì)算以升/秒或升/分鐘為單位的正確水流量。正確校準(zhǔn)后,需要調(diào)整此數(shù)字。這是如何完成的,將進(jìn)一步解釋。

接下來(lái)定義以下全局變量:

int LitCount = 0; 
int PastMinuteUse = 0; 
int PrevLitCount = 0;  
int Stopcount = 0; 
float FlowLitPerSec = 0.00; 
float FlowLitPerMin = 0.00; 
int UpTimeMin = 0;   
double UpTimeHr = 0.00;  
double UpTimeDay = 0.00; 
int DayCount = 1;   
int TodayUse = 0;     
int PastDayUse = 0;  
int PrevDayLitCount = 0;  
int PastYearCub = 0; 
boolean WaterFlow_state = false;  
boolean Home = true; 
unsigned long Count_Duration = 0.00;  
BlynkTimer timer;  

Arduino Sketch 中列出的注釋更詳細(xì)地進(jìn)一步闡明了這些變量的目的和含義。

最重要的變量是最后一個(gè)變量:“ Count_Duration ”,它將保持“ Liter_count_Pin ”變?yōu)椤?LOW ”和再次返回“ HIGH ”之間的時(shí)間(以微秒為單位)。

這個(gè)測(cè)量的時(shí)間在草圖中用于計(jì)算以升/秒為單位的瞬時(shí)水流。這是一種獨(dú)特的方法,因?yàn)樗梢约磿r(shí)測(cè)量水流量,從而計(jì)算“ FlowLitPerSec ”和“ FlowLitPerMin ”的值。

同時(shí),當(dāng)檢測(cè)到從 HIGH 到 LOW 時(shí),將通過(guò)將變量“ LitCount ”增加 +1 來(lái)計(jì)算一升水。

接下來(lái),將創(chuàng)建一個(gè) Blynk Timer 對(duì)象:

BlynkTimer timer;

這似乎是一個(gè)簡(jiǎn)單的陳述,但實(shí)際上它是 BLYNK 巨大優(yōu)勢(shì)的關(guān)鍵,即能夠?yàn)樵S多不同的功能創(chuàng)建單獨(dú)的計(jì)時(shí)器。

在此草圖中,以下計(jì)時(shí)器用于以下功能:

timer.setInterval(10000L, MEASUREWATER);          // Set the function MEASUREWATER to excute every 10 seconds
timer.setInterval(60000L, SendPeriodicWaterUse);  // Set the function SendPeriodicWaterUse to excute every 60s
timer.setInterval(86400000L, SendDailyUseData);   // Set the function SendDailyUseData to excute every 24 hours

函數(shù)“ MEASUREWATER ”每 10 秒調(diào)用一次,同樣,函數(shù)“ SendPeriodicWaterUse ”每 60 秒調(diào)用一次,函數(shù)“ SendDailyUseData ”每 24 小時(shí)(或 86400000 毫秒)調(diào)用一次。

在每個(gè)函數(shù)中,許多全局變量都會(huì)收到一個(gè)新值。這些變量被分配給所謂的“虛擬引腳”編號(hào),例如LitCount ”的“ V5 ” ,然后發(fā)送到 BLYNK 云進(jìn)行定期更新。

4.4.2 測(cè)量水功能

此功能是草圖中最重要的功能。它檢測(cè)是否有水流,以升/秒和升/分鐘為單位計(jì)算流量,并在云端設(shè)置“不在家”指示器時(shí)觸發(fā)“水警報(bào)”。

函數(shù)的第一部分,負(fù)責(zé)升數(shù)和流量計(jì)算:

pYYBAGNX-lmAZUuYAACl8xfteH8108.png
?

這個(gè)函數(shù)的一個(gè)重要部分是這一行:

Count_Duration = pulseInLong(Liter_count_Pin, LOW, 9000000);

在這種情況下,函數(shù)將讀取 Liter_count_Pin 上的脈沖(變?yōu)榈碗娖剑?/font>該函數(shù)測(cè)量引腳轉(zhuǎn)換為低電平和再次變?yōu)楦唠娖街g的時(shí)間(以微秒為單位)。當(dāng)引腳在 9 秒(9000000 微秒)的超時(shí)限制內(nèi)沒(méi)有變?yōu)楦唠娖綍r(shí),函數(shù)將放棄并返回值 0。:

else if (Count_Duration == 0) {

這種情況可能發(fā)生在低于 33 毫升/秒 (2 L/min) 的非常低的水流旋轉(zhuǎn)升刻度盤(pán)停止在傳感器下方的情況下,

if (digitalRead(Liter_count_Pin) == LOW) {

這很容易發(fā)生。在這兩種情況下,這種效果都會(huì)導(dǎo)致 1 升被計(jì)算一次:

if (Stopcount == 0) {

為了指示一升的計(jì)數(shù),橙色 LED(連接到 GPIO25 的 330 歐姆的黃色 LED)通過(guò)以下方式“打開(kāi)”:

digitalWrite(Or_LEDPin,HIGH);

并在函數(shù)結(jié)束時(shí)切換到“關(guān)閉”:

digitalWrite(Or_LEDPin,LOW);

每次向 Blynk 傳輸數(shù)據(jù)之前,藍(lán)色 LED 都會(huì)“打開(kāi)”,其中:

digitalWrite(B_LEDPin,HIGH);

并在此類(lèi)傳輸結(jié)束時(shí)“關(guān)閉”。

“ MEASUREWATER ”功能的第二部分負(fù)責(zé)設(shè)置水流警報(bào)。:

if (!Home && WaterFlow_state ) {   
    Blynk.virtualWrite(V4, true);
    Blynk.logEvent("WaterAlarm", "There is waterflow and nobody is home");}  
    else 
    {Blynk.virtualWrite(V4, false); }

如果檢測(cè)到水流,(“ WaterFlow_state ” == “ true ”),而布爾“ Home ”為“ 0 ”,換句話(huà)說(shuō),當(dāng)條件“ !Home ”(不是 Home )== “ true ”時(shí),在 Blynk 云中, Virtual Pin V4將設(shè)置為“true”。

將創(chuàng)建一個(gè) logEvent 以使 Blynk 能夠向智能水表的所有者發(fā)送推送通知或電子郵件。

如果“Home”為“true”或“WaterFlow_state”為“false”,V4將設(shè)置為“false”

“Home”狀態(tài)如下:

使用 Blynk 控制臺(tái)構(gòu)建 Blynk 儀表板時(shí),可以將“切換”小部件添加到儀表板。

poYBAGNX-luARFfiAAAzTzo6j5Y657.jpg
?

完成后,轉(zhuǎn)到小部件的“設(shè)置”并設(shè)置以下屬性:

pYYBAGNX-l2AGAqXAABMwX4atI0626.png
?

不要忘記“保存并應(yīng)用”更改。

現(xiàn)在“ V0 ”的值已經(jīng)與DataStream名稱(chēng)“Home”連接,可以控制為“Home”或“Not Home”,并賦予值“1”或“0”。

在 Arduino Sketch 中,您將看到以下代碼行:

BLYNK_WRITE(V0) {
  int value = param.asInt();          // assign incomming value of pin V0 to variable "value"
if(value == 1)                        // excute this code in case value is "1" (meaning Home is on)
  { Home = true; }                    // make boolean Home true
  else                                // excute this code in case value is "0" (meaning Home is off)
  { Home = false; }                   // make boolean Home false
  Blynk.virtualWrite(V1, value);      // Update Home state on the Blynk dashboard
}

此代碼的效果是,每當(dāng)通過(guò) PC/筆記本電腦或平板電腦上的 Blynk 儀表板更改開(kāi)關(guān)狀態(tài)時(shí),V0 的更改值將發(fā)送到智能水表設(shè)備,其布爾變量“Home”的值將進(jìn)行相應(yīng)修改。

如果完成,更改將通過(guò)虛擬引腳“ V1 ”報(bào)告回 Blynk 云。在儀表板上,分配給 V1 的“LED”小部件將更改其狀態(tài)(在本示例中,從“綠色”變?yōu)椤鞍咨?,反之亦然?/font>

在“測(cè)量水”功能結(jié)束時(shí),橙色 LED 和藍(lán)色 LED 都將關(guān)閉

digitalWrite(Or_LEDPin,LOW);   
digitalWrite(B_LEDPin,LOW);

4.4.3 SendPeriodicWaterUse函數(shù)

這個(gè)函數(shù)負(fù)責(zé)每分鐘向 Blynk 發(fā)送最重要的數(shù)據(jù):

poYBAGNX-mGAILPxAACdx1-tQuo915.png
?

“UpTimeMin”,即設(shè)備上線(xiàn)后(或重置后)經(jīng)過(guò)的時(shí)間,使用毫秒 () / 60000 計(jì)算,從而導(dǎo)致正常運(yùn)行時(shí)間分鐘數(shù)。

UpTimeHr 和 UpTimeDay 的后續(xù)計(jì)算應(yīng)該是顯而易見(jiàn)的。

過(guò)去一分鐘使用的升量計(jì)算如下:

PastMinuteUse = LitCount - PrevLitCount;

其中 LitCount 是自設(shè)備啟動(dòng)以來(lái)計(jì)算的總升數(shù),PrevLitCount 是 1 分鐘前的總數(shù)量。

到目前為止,今天使用的金額是通過(guò)以下方式計(jì)算的:

TodayUse = TodayUse + PastMinuteUse;

此后,所有的數(shù)據(jù)都一個(gè)接一個(gè)地發(fā)送到 Blynk。

4.4.4 SendDailyUseData 函數(shù)

最后,函數(shù) SendDailyUseData 負(fù)責(zé)向 Blynk 發(fā)送關(guān)于過(guò)去 24 小時(shí)內(nèi)使用的公升總量 (PastDayUse) 的每日?qǐng)?bào)告。

pYYBAGNX-mSAJF27AACXDlzJ7BQ597.png
?

變量“ DayCount ”在此函數(shù)中起著重要作用。

365 天過(guò)去后,計(jì)算過(guò)去一年的總用水量并作為V13發(fā)送到 Blynk 。只有在整年未重置設(shè)備時(shí)才會(huì)發(fā)生這種情況(因此不會(huì)斷電)。當(dāng)前版本的 Sketch 還沒(méi)有針對(duì)這種情況的內(nèi)置補(bǔ)救措施,但這可以通過(guò)添加額外的代碼來(lái)完成,該代碼在斷電后從 Blynk 讀取最新值。根據(jù)功率下降持續(xù)的時(shí)間,將不考慮更多或更少的數(shù)據(jù)(升)。

另一種可能性是使用 ESP32 的內(nèi)置 EEPROM 存儲(chǔ)器或 SPIFFS。

4.5 校準(zhǔn) WaterFlow 功能

在“ MEASUREWATER ”函數(shù)的代碼中,您可以找到以下行:

FlowLitPerSec = Flowrate_factor/Count_Duration ;

Flowrate_factor 的值最初設(shè)置為:

float Flowrate_factor = 300000.00;

這意味著如果 Count_Duration 測(cè)量值為 300 毫秒 (=300000 μSec),“FlowLitPerSec”的值將為 1 l/S(相當(dāng)于 60 升/分鐘),這是一個(gè)相當(dāng)高的流速,通常甚至無(wú)法達(dá)到?jīng)_馬桶時(shí)。

然而,300000 的“Flowrate_factor”是一個(gè)估計(jì)值,需要通過(guò)校準(zhǔn)來(lái)驗(yàn)證。該估計(jì)是基于假設(shè)水表升刻度盤(pán)上的金屬板約為 . 一整圈時(shí)間的 1/3(對(duì)于 1 升)位于傳感器頭下方。

如果估計(jì)正確,那么 1 秒內(nèi) 1 升(1 轉(zhuǎn))將導(dǎo)致“Count_Duration”為 333333 μSec。

“Flowrate_factor”取決于傳感器相對(duì)于帶有金屬板的旋轉(zhuǎn)刻度盤(pán)的精確位置。甚至金屬板的尺寸和形狀也會(huì)產(chǎn)生影響。

獲得正確“Flowrate_factor”值的最佳方法是校準(zhǔn)。

為此,取一桶 10 升水,將其放在水龍頭下,并使用秒表記錄注滿(mǎn) 10 升水所需的時(shí)間(在恒定的最大水流量下)。

在 Blynk 儀表板上,您應(yīng)該看到當(dāng)前測(cè)量的流量(以 lit/min 為單位)(在 10 秒的響應(yīng)時(shí)間之后)。將此值記為“measuredFlow”

在裝滿(mǎn)水桶后,還要檢查儀表板上的升數(shù)是否確實(shí)增加了 10。(如果沒(méi)有,請(qǐng)驗(yàn)證您的傳感器位置并根據(jù)需要進(jìn)行調(diào)整)。

10 升的時(shí)間(以秒為單位)用于計(jì)算實(shí)際水流量,如下所示:

RealFlow (X) = 10 / time in seconds (in L/sec)

“adjustedFlowrate_factor”現(xiàn)在可以計(jì)算如下:

“adjustedFlowrate_factor” = (measuredFlow * 300000) / RealFlow (X)

校準(zhǔn)后,Excel 工作表中的計(jì)算結(jié)果如下所示:

poYBAGNX-maAXSulAAAON8hzgRk518.png
?

這會(huì)導(dǎo)致調(diào)整后的 Flowrate_factor,然后將其作為 288330.00 放入 Arduino 代碼中。現(xiàn)在您的系統(tǒng)已校準(zhǔn)!

將修改后的代碼閃爍到您的智能水表后,現(xiàn)在應(yīng)該在 Blynk 儀表板上盡可能準(zhǔn)確地生成瞬時(shí)水流。如有疑問(wèn),只需再次運(yùn)行校準(zhǔn)過(guò)程。

4.6 完整的 ARDUINO 草圖

智能水表的完整 ARDUINO 草圖包含 188 行代碼。完整清單包含在本教程中,ARDUINO 代碼提供了大量注釋?zhuān)兄诶斫獬绦颉?/font>草圖提供英文注釋或選擇荷蘭文注釋。

在整個(gè) Sketch 中包含了許多打印命令,以便在開(kāi)發(fā)過(guò)程中提供幫助并能夠在 Arduino IDE(在 PC 上運(yùn)行)的串行監(jiān)視器上監(jiān)控過(guò)程。如果您想在 Arduino IDE 的串行監(jiān)視器上監(jiān)控進(jìn)程,請(qǐng)取消注釋這些行。

5. 第三步:使用說(shuō)明

當(dāng)正確安裝在現(xiàn)有水表頂部并連接到 5V 充電器并與您的 Wi-Fi 接入點(diǎn)建立連接時(shí),設(shè)備應(yīng)該可以啟動(dòng)并運(yùn)行。在 Blynk 中構(gòu)建美觀的儀表板或在手機(jī)上使用的儀表板取決于您自己的創(chuàng)造力。

可以通過(guò)斷開(kāi) 5V 充電器的連接并重新插入來(lái)重置系統(tǒng)。

6. 最后的話(huà)

這是一個(gè)非常有趣的項(xiàng)目,開(kāi)發(fā)和構(gòu)建它很有趣,尤其是當(dāng)您在漂亮的 Blynk Dashboard 上看到結(jié)果時(shí)。

通過(guò) ESP32 TTGO T7 建立的 Wi-Fi 連接效果很好,但我必須承認(rèn)我的水表設(shè)備靠近接入點(diǎn)。

當(dāng)然,總是有改進(jìn)的余地。我想到的一些改進(jìn)是:

  • 介紹在重置后設(shè)置現(xiàn)有水表的實(shí)際讀數(shù)的可能性,以便在 Blynk Dashboard 上也可以提供實(shí)際準(zhǔn)備好的水表。
  • 添加對(duì) ESP32 固件進(jìn)行無(wú)線(xiàn)更新的可能性
  • 創(chuàng)造避免硬編碼 Wi-Fi 憑據(jù)的可能性

為您編寫(xiě)本教程也是一件令人愉快的事情。

享受閱讀和/或制作自己的智能水表的樂(lè)趣!


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開(kāi)發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)