該項目演示了如何構(gòu)建一個連接互聯(lián)網(wǎng)的流量計,該流量計可以連續(xù)測量河流的流量并在線向用戶提供實時數(shù)據(jù)。
該系統(tǒng)可以通過一次性設(shè)置部署到偏遠(yuǎn)的河流,并且可以自行運行,自動收集數(shù)據(jù)而無需用戶在場。可以在整個河流中放置多個儀表以收集許多數(shù)據(jù)點。
測量數(shù)據(jù)通過系統(tǒng)的蜂窩網(wǎng)絡(luò)連接推送到云端,由 Soracom Global SIM 卡啟用,并可通過 Soracom Harvest 在線查看。AWS IoT 和 CloudWatch 服務(wù)用于在河流流量達(dá)到臨界水平時向用戶發(fā)送電子郵件通知。
河流的流速測量隨著時間流過特定點的水量。隨著降雨中的水流入和流出河流系統(tǒng),該速率會上升和下降。
測量河流的流速可以為各種目的提供有價值的信息:
水文:流速的長期趨勢可以深入了解為河流供水的流域系統(tǒng)及其隨時間的變化。
生態(tài):河水的流速決定了它是否可以養(yǎng)活不同種類的植物或動物。
洪水預(yù)警:流量峰值可以為即將到來的洪水提供早期預(yù)警,并且可以與降雨報告相關(guān)聯(lián)。
娛樂安全:實時測量可以警告獨木舟/皮劃艇運動員沿河旅行是否安全。
目前,測量偏遠(yuǎn)河流地區(qū)的流量是一個非常實際的過程。測量員需要攜帶他們的測量設(shè)備徒步到感興趣的河流,設(shè)置它,進(jìn)行測量,拆卸它,然后徒步返回。
由于收集測量值需要付出努力,因此僅對某些河流定期進(jìn)行。如果沒有持續(xù)監(jiān)控,流量提供的許多洞察力就會丟失。
該項目旨在通過使流量數(shù)據(jù)更容易收集和更容易為需要它的用戶提供來解決這個問題。
如何運行
物聯(lián)網(wǎng)流量計由傳感器和電子設(shè)備組成,連接到 PVC 管道支撐結(jié)構(gòu),可部署到河流以收集流量數(shù)據(jù)。
流量計傳感器以可調(diào)節(jié)的高度連接到結(jié)構(gòu)的垂直管道,該管道被浸沒在水下。電子設(shè)備包含在水外結(jié)構(gòu)頂部的上部外殼中。
該系統(tǒng)采用 YF-S201 液體流量計傳感器,其中包含一個由進(jìn)水旋轉(zhuǎn)的磁性風(fēng)車。
隨著更多的水進(jìn)入傳感器,輪子旋轉(zhuǎn)得更快,這個旋轉(zhuǎn)速度(Hz)可以用來計算每分鐘有多少升水流過傳感器(L/min),稱為流量。
注意:此流量僅表示通過傳感器本身的水升數(shù),而不是整條河流。傳感器的流量與河流的實際流量密切相關(guān),但不是直接測量的。物聯(lián)網(wǎng)流量計僅提供傳感器的流量,并將其用作整條河流的近似值。
一個 3D 打印的支架用于將傳感器連接到 PVC 管道結(jié)構(gòu)上,一個 3D 打印的漏斗將河水引導(dǎo)到傳感器的入口。
該系統(tǒng)的電子設(shè)備包括一個 Raspberry Pi、帶有 Soracom Global SIM 的 3G USB 調(diào)制解調(diào)器和外部電池,這些都包含在一個 3D 打印的外殼中。傳感器通過水封跨接線連接到 Pi,這些跨接線將垂直管道的長度延伸到外殼中。
Pi 運行 Python 腳本,每分鐘都會從傳感器收集流量測量值,并使用調(diào)制解調(diào)器和 SIM 卡提供的蜂窩連接將其推送到云端。
該腳本向 Soracom 的統(tǒng)一端點發(fā)出 HTTP POST 請求,該端點將數(shù)據(jù)轉(zhuǎn)發(fā)到兩個服務(wù):Soracom Harvest 和 Soracom Funnel。
Soracom Harvest 允許對傳入數(shù)據(jù)進(jìn)行輕松的實時可視化。控制臺顯示一個實時圖表,顯示更新的數(shù)據(jù)值,因為它們流入。用戶可以監(jiān)控數(shù)據(jù)在選定的時間窗口內(nèi)如何變化。
Soracom Funnel 獲取數(shù)據(jù)并通過將其發(fā)送到 AWS IoT 端點進(jìn)一步轉(zhuǎn)發(fā),然后使用 AWS IoT 規(guī)則將數(shù)據(jù)推送到 AWS CloudWatch。
CloudWatch 警報配置為監(jiān)控流量何時超過臨界值,并自動向任何訂閱用戶發(fā)送電子郵件通知,讓他們知道警報已被觸發(fā)。此功能允許用戶隨時了解河流流量的重要變化,而無需實時監(jiān)控。
架構(gòu)和卓越運營
物聯(lián)網(wǎng)流量計旨在解決傳統(tǒng)上需要更多動手、昂貴的設(shè)備來收集數(shù)據(jù)的問題。雖然這個原型已經(jīng)表明它可以派上用場并提供結(jié)果,但在轉(zhuǎn)向生產(chǎn)版本時還有更多的事情需要考慮。
成本:該系統(tǒng)的總成本約為 120 美元,其中最大的開支是 Raspberry Pi(35 美元)和 3G 調(diào)制解調(diào)器(60 美元)。這個價格可能會隨著批量供應(yīng)而下降。考慮到使用此物聯(lián)網(wǎng)設(shè)備而不是支付測量員/工程師手動收集測量值所節(jié)省的工時,這個總成本是合理的。
可擴(kuò)展性:系統(tǒng)可以根據(jù)需求擴(kuò)展到更多單元。通過過渡到包含所有必要電子設(shè)備的預(yù)制電路并開發(fā)更好的預(yù)組裝管道結(jié)構(gòu),構(gòu)建大量單元將變得更加容易。
如果擴(kuò)展到全球運行的 1000 臺設(shè)備,Soracom 和 AWS IoT 仍可能是數(shù)據(jù)收集和分發(fā)方式的支柱。可能需要為每個用戶設(shè)置個人賬戶和訪問權(quán)限,AWS IoT 可以通過 IAM 用戶組來實現(xiàn)這一點,IAM 用戶組僅向特定用戶授予查看/編輯數(shù)據(jù)的權(quán)限。
可靠性:反映實際流量的一致和準(zhǔn)確的測量對于這個問題很重要。需要進(jìn)行更多測試以更好地了解可能影響傳感器讀數(shù)的不同影響,例如深度和河流中的位置。
該系統(tǒng)還依賴于可靠的蜂窩網(wǎng)絡(luò)。目前,如果由于網(wǎng)絡(luò)超時而對 Soracom 的請求嘗試失敗,則該數(shù)據(jù)將丟失。該工具的進(jìn)一步更新將包括備份測量結(jié)果,以便在重新建立連接時將其保存并推送到云端。
安全性:物聯(lián)網(wǎng)流量計設(shè)計為無人值守,這使其物理安全面臨風(fēng)險。目前,如果系統(tǒng)離線或丟失,無法確定系統(tǒng)會發(fā)生什么情況,但未來的版本可能會包含一個 GPS 模塊,該模塊包含系統(tǒng)在每次數(shù)據(jù)推送時的當(dāng)前坐標(biāo)。這將有助于隨時跟蹤系統(tǒng)的位置。
構(gòu)建說明
以下是有關(guān)如何原型化、構(gòu)建和接收來自 IoT 流量計的通知的說明。
通過首先構(gòu)建一個原型電路來測試液體流量計的功能、啟用互聯(lián)網(wǎng)連接并將測量結(jié)果推送到云端,開始這個項目。接下來構(gòu)建管道結(jié)構(gòu)并附加組件,以便可以部署。最后,設(shè)置 AWS CloudWatch 并在出現(xiàn)關(guān)鍵流量時訂閱電子郵件警報。
這些說明假設(shè)您可以通過 SSH 或鍵盤/鼠標(biāo)/顯示器設(shè)置訪問 Rasberry Pi 的終端。Pi 還必須通過 WiFi 或以太網(wǎng)連接互聯(lián)網(wǎng)以進(jìn)行初始設(shè)置。
原型電路
第 1 步:設(shè)置測試電路
使用公對母跳線,從 YF-S201 液體流量計的電線到 Raspberry Pi GPIO 引腳進(jìn)行以下連接:
紅色(直流電源)到引腳 1 (3.3V)
黑色(接地)到引腳 6(接地)
黃色(輸出)到引腳 7 (GPIO4)
第 2 步:測試傳感器測量值
可以運行 Python 腳本以從現(xiàn)在連接的傳感器獲取讀數(shù)。打開 Raspberry Pi 終端并輸入以下命令以創(chuàng)建并導(dǎo)航到Pi 桌面上將存儲腳本的flowmeter目錄:
使用 Python 的 IDLE 或其他文本編輯器,復(fù)制以下 Python 代碼并將其保存flowmeter.py在剛剛創(chuàng)建的文件夾中:
import json
import time
from datetime import datetime
import RPi.GPIO as GPIO
class FlowMeter():
''' Class representing the flow meter sensor which handles input pulses
and calculates current flow rate (L/min) measurement
'''
def __init__(self):
self.flow_rate = 0.0
self.last_time = datetime.now()
def pulseCallback(self, p):
''' Callback that is executed with each pulse
received from the sensor
'''
# Calculate the time difference since last pulse recieved
current_time = datetime.now()
diff = (current_time - self.last_time).total_seconds()
# Calculate current flow rate
hertz = 1. / diff
self.flow_rate = hertz / 7.5
# Reset time of last pulse
self.last_time = current_time
def getFlowRate(self):
''' Return the current flow rate measurement.
If a pulse has not been received in more than one second,
assume that flow has stopped and set flow rate to 0.0
'''
if (datetime.now() - self.last_time).total_seconds() > 1:
self.flow_rate = 0.0
return self.flow_rate
def main():
''' Main function for repeatedly collecting flow rate measurements
and sending them to the SORACOM API
'''
# Configure GPIO pins
INPUT_PIN = 7
GPIO.setmode(GPIO.BOARD)
GPIO.setup(INPUT_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Init FlowMeter instance and pulse callback
flow_meter = FlowMeter()
GPIO.add_event_detect(INPUT_PIN,
GPIO.RISING,
callback=flow_meter.pulseCallback,
bouncetime=20)
# Begin infinite loop
while True:
# Get current timestamp and flow meter reading
timestamp = str(datetime.now())
flow_rate = flow_meter.getFlowRate()
print('Timestamp: %s' % timestamp)
print('Flow rate: %f' % flow_rate)
# Delay
time.sleep(5)
if __name__ == '__main__':
main()
該腳本定義了一個FlowMeter()對象類,用于跟蹤在其風(fēng)車旋轉(zhuǎn)時從傳感器接收到的脈沖并計算當(dāng)前流量。
每個新脈沖都會觸發(fā)該pulseCallback()方法,其中每秒脈沖的速率 (Hz) 除以常數(shù)以計算以升/分鐘 (L/min) 為單位的流速。這種轉(zhuǎn)換在傳感器的數(shù)據(jù)表中定義。該getFlowRate()方法返回當(dāng)前流量。
該main()函數(shù)在腳本啟動時調(diào)用,定義傳感器使用的 GPIO 引腳,并啟動類的實例FlowMeter()。
進(jìn)入一個無限循環(huán),每次通過時都會收集流速測量值及其時間戳并將其打印到控制臺。控制循環(huán)之間延遲的time.sleep(5)語句設(shè)置為 5 秒。循環(huán)將持續(xù)運行,直到被用戶取消。
在將最終的 IoT 流量計部署到河流之前,請編輯此腳本以將此睡眠時間調(diào)整為您想要收集河流測量值的頻率。值 60 將每隔一分鐘進(jìn)行一次測量。
使用以下命令啟動 Python 腳本:
流速測量值和時間戳每 5 秒打印一次到控制臺:
當(dāng)傳感器的風(fēng)車停止時,流速應(yīng)為零。嘗試向傳感器吹氣以旋轉(zhuǎn)輪子并觀察流速值如何變化。
按Ctrl+C停止腳本。
第 3 步:啟用蜂窩連接
隨著傳感器的工作,下一步是將其讀數(shù)發(fā)送到云端。這是通過帶有 Soracom Global SIM 卡的 3G USB 調(diào)制解調(diào)器實現(xiàn)的,該 SIM 卡插入 Pi 和 Soracom 的 Harvest 服務(wù)。
Soracom 自己的IoT 狀態(tài)機(jī)套件教程提供了有關(guān)使用 Soracom 帳戶進(jìn)行設(shè)置、配置 USB 調(diào)制解調(diào)器和啟用 Harvest 服務(wù)的良好說明。從他們的教程中完成以下部分:
設(shè)置您的 Soracom 帳戶
設(shè)置 3G USB 調(diào)制解調(diào)器
啟用 Soracom Harvest
第 4 步:將數(shù)據(jù)發(fā)送到 Soracom Harvest
該flowmeter.py腳本現(xiàn)在可以使用額外的代碼更新發(fā)送測量Soracom收獲。
首先安裝requestsPython 包,它允許從 Python 發(fā)出 HTTP 請求,使用以下命令:
打開flowmeter.py并將以下行添加到導(dǎo)入語句列表中:
main()在語句上方的函數(shù)內(nèi)添加以下代碼time.sleep(5):
此附加代碼將時間戳和流速值包裝到 JSON 字符串中,并使用 POST 請求將其發(fā)送到 Soracom 統(tǒng)一端點。
本教程附有一個完整的版本flowmeter.py。使用以下命令再次運行腳本:
隨著 Harvest 控制臺打開,您應(yīng)該開始看到數(shù)據(jù)流入。流量數(shù)據(jù)繪制在圖表上,每次收到新值時都會更新。
第 5 步:在啟動時運行腳本
在此項目的最終設(shè)置中,Raspberry Pi 將與顯示器、鼠標(biāo)和鍵盤斷開連接,并由外部電池供電。因此,Python 腳本有必要在沒有用戶交互的情況下自動啟動。
通過編輯文件將 Pi 配置為在啟動時運行腳本/etc/rc.local。使用以下命令編輯此文件:
在文件的最后一行上方添加以下行exit 0:
按Ctrl+X、Y和Enter保存并關(guān)閉文件。
flowmeter.py需要完整路徑,因為 Pi 在flowmeter啟動時不會在目錄中。在行尾包含&確保腳本作為自己的進(jìn)程運行,并且在運行時不會阻塞其他啟動進(jìn)程。
斷開 Pi 與任何顯示器、鍵盤和鼠標(biāo)的連接,并將外部電池組插入 Pi 的微型 USB 端口。Pi 啟動和 USB 調(diào)制解調(diào)器連接可能需要一些時間。連接后,打開 Soracom Harvest 控制臺以查看傳入數(shù)據(jù)。
組裝結(jié)構(gòu)
第 1 步:構(gòu)建結(jié)構(gòu)基礎(chǔ)
PVC 管結(jié)構(gòu)將組件固定在適當(dāng)?shù)奈恢茫箓鞲衅鞅3衷谒拢娮釉O(shè)備保持在水面上。
首先使用手鋸將 PVC 管道切割成四個 15.5 英寸的部分和兩個 7 英寸的部分。使用三通接頭,將它們組裝到結(jié)構(gòu)的“H”型底座中。
使用一根 5‘ 英尺的 PVC 管作為插入“H”型底座中心的垂直條。
第 2 步:防水傳感器
由于流量傳感器將浸沒在水下,因此需要保護(hù)它免受任何水損壞。其連接線的長度也需要延長,以將垂直管道向上延伸到電子設(shè)備外殼中。
首先從連接線上切斷端蓋。然后,使用三根 4 英尺長的跳線,將直流電源(紅色)、接地(黑色)和輸出(黃色)線的末端焊接在一起,從而延長它們的長度。使用小型熱縮管單獨包裹每個焊接連接。
全長電線的末端應(yīng)分別連接到母跳線端蓋,以便它們可以輕松連接到 Raspberry Pi 的 GPIO 引腳。剪下 3 根公對母跳線并將母跳線端蓋焊接到三根全長電線上。用熱縮管單獨包裹每個連接。
使用 4 英尺長的熱縮管來包裹現(xiàn)在從傳感器出來的所有三根全長電線。確保管道一直延伸到傳感器底部,有助于防止水進(jìn)入傳感器外殼。
將傳感器連接到 3D 支架上,方法是從傳感器上擰下面板螺絲,將傳感器放入支架內(nèi),然后使用相同的螺絲將其連接到支架壁上。
硅膠填縫劑應(yīng)放置在傳感器的外觀和電線開口周圍,以增加防水保護(hù)。
將支架和傳感器連接到垂直管道結(jié)構(gòu)上,并使用尼龍扎帶將延長線固定在管道上。將 3D 打印的漏斗放在傳感器的嘴上。
第 3 步:電子外殼
電子外殼 3D 打印后,使用剛性導(dǎo)管帶和 1/4“ 六角螺栓和螺母將其連接到垂直管道的頂部。螺栓將穿過外殼背面的帶孔。
準(zhǔn)備好部署傳感器后,將 Rasberry Pi、電池、USB 延長線和 3G USB 調(diào)制解調(diào)器放入外殼并打開 Raspberry Pi 電源。將傳感器的熱縮接線送入外殼底部的孔中,并連接到 Pi 的引腳。
使用 4-40 1/2” 螺釘將面板連接到外殼盒上。
該結(jié)構(gòu)現(xiàn)在已準(zhǔn)備好放入河中。找一個能讓房屋保持在水面之上的地方,以及一個底部相對平坦的地方,這樣結(jié)構(gòu)才能保持穩(wěn)定。
電子郵件通知
第 1 步:在 AWS 中創(chuàng)建新的托管用戶
首先創(chuàng)建一個新的托管用戶,該用戶將被授予以編程方式訪問 AWS IoT 的權(quán)限。Soracom Funnel 將通過該用戶訪問 AWS IoT。
打開 AWS IAM 管理控制臺并單擊左側(cè)菜單中的“用戶”,然后單擊“添加用戶”。
輸入“用戶名”(例如漏斗)并在“訪問類型”部分選中“程序訪問”,然后單擊“下一步:權(quán)限”。
單擊“直接附加現(xiàn)有策略”并在搜索框中鍵入“iotdata”。從結(jié)果中,檢查“AWSIoTDataAccess”權(quán)限。在接下來的頁面中單擊“下一步:標(biāo)簽”,然后單擊“下一步:審核”和“創(chuàng)建用戶”。
在下一頁上,將“訪問密鑰 ID”和“秘密訪問密鑰”復(fù)制到文本文件中。
第2步:獲取 AWS IoT 終端節(jié)點
打開AWS IoT 控制臺并單擊左側(cè)菜單中的“設(shè)置”。從“自定義端點”部分復(fù)制“端點”URL。
第 3 步:配置 Soracom 漏斗
打開Soracom 用戶控制臺并單擊用于該項目的 SIM 卡的組名稱。在“Soracom 漏斗”部分中,通過單擊切換按鈕以“開啟”來啟用該服務(wù)。
選擇“AWS IoT”作為“服務(wù)”。
將“Destination”設(shè)置為“ 《your_custom_endpoint》 /funnel/ flowmeter ”,替換上一步復(fù)制的自定義 url(不帶引號)。這是數(shù)據(jù)將被轉(zhuǎn)發(fā)到的端點和 AWS 主題(漏斗/流量計)。
單擊“+”按鈕注冊新的憑據(jù)集。
在彈出窗口中,將“憑證集 ID”設(shè)置為新 ID(例如 Soracom)并填寫“描述”(例如 AWS IoT 中的 Soracom IAM 用戶)。
選擇“AWS 憑證”作為“類型”并將從步驟 1 復(fù)制的 AWS 訪問密鑰 ID 和 AWS 秘密訪問密鑰粘貼到相應(yīng)的字段中。
單擊“注冊”按鈕。
從“憑證集”下拉列表中,選擇剛剛注冊的憑證(例如 Soracom(AWS IoT 中的 Soracom IAM 用戶))。
單擊“保存”按鈕。
第 4 步:查看 AWS IoT 中的數(shù)據(jù)
通過訂閱我們在上一步中分配的主題,驗證數(shù)據(jù)是否從 Soracom Funnel 轉(zhuǎn)發(fā)到 AWS IoT。
打開AWS IoT 控制臺并單擊左側(cè)菜單中的“測試”。在 MQTT 客戶端窗口中輸入“漏斗/流量計”作為“訂閱主題”,然后單擊“訂閱主題”。
從漏斗發(fā)布到該主題的消息應(yīng)該開始出現(xiàn)。這些消息包含來自傳感器的原始有效負(fù)載,以及來自 Soracom 的一些額外元數(shù)據(jù)。
第 5 步:將數(shù)據(jù)發(fā)送到 CloudWatch
下一步是將此傳入數(shù)據(jù)作為自定義指標(biāo)發(fā)送到 AWS CloudWatch。CloudWatch 允許可視化指標(biāo)和通知。
打開AWS IoT 控制臺,然后單擊左側(cè)菜單中的“Act”。在以下屏幕上單擊“創(chuàng)建”。
從“創(chuàng)建規(guī)則”菜單中,輸入規(guī)則“名稱”(例如 CloudWatch)和“描述”。
在“規(guī)則查詢語句”中輸入以下語句:SELECT * FROM ’funnel/flowmeter‘。此語句將將此規(guī)則應(yīng)用于發(fā)送到“漏斗/流量計”主題的所有消息。
單擊“添加操作”。在下一個屏幕上選擇“將消息數(shù)據(jù)發(fā)送到 CloudWatch”,然后單擊“配置操作”。
在下一個菜單中填寫以下內(nèi)容:
指標(biāo)名稱: flow_rate
指標(biāo)命名空間: flowmeter
單元: None
價值: ${payloads.flow_rate}
單擊“創(chuàng)建角色”并鍵入新角色的名稱(例如 CloudWatchRole),再次單擊“創(chuàng)建角色”,然后使用“選擇”按鈕從下拉菜單中選擇新創(chuàng)建的角色。
單擊“添加操作”按鈕。來自傳入消息的flow_rate數(shù)據(jù)將轉(zhuǎn)發(fā)到 CloudWatch。
第 6 步:設(shè)置通知
打開AWS CloudWatch 控制臺,單擊左側(cè)菜單中的“指標(biāo)”。在“自定義命名空間”下單擊“流量計”。
點擊“沒有維度的指標(biāo)”,然后選擇“flow_rate”。CloudWatch 圖表將填充所選時間窗口的流速值。可以將圖表設(shè)置為自動更新,以便在流入時繪制新數(shù)據(jù)。
單擊“鈴鐺圖標(biāo)”為該指標(biāo)設(shè)置警報。在下一個屏幕上填寫警報“名稱”(例如 FlowRateAlarm)和“描述”。
“警報詳細(xì)信息”部分定義度量值何時處于警報狀態(tài)。對于這個項目,這意味著當(dāng) flow_rate 達(dá)到一個讓用戶知道的重要值時。對于此示例,選擇了 1.0 的值,但可以通過查看傳入數(shù)據(jù)來確定更實際的數(shù)字,以確定正常河流流量生成的流量,并將其設(shè)置為高于該數(shù)字。
在“操作”部分中,選擇“新列表”并輸入新通知列表組的名稱(例如 cloudwatch_alarm)。選擇該列表并輸入您希望包含在此列表中的任何電子郵件地址。
將向這些地址發(fā)送一封確認(rèn)電子郵件,以確認(rèn)他們訂閱通知。
單擊“創(chuàng)建警報”按鈕。
現(xiàn)在警報已創(chuàng)建,CloudWatch 將持續(xù)監(jiān)控此指標(biāo)的傳入數(shù)據(jù),如果它進(jìn)入警報狀態(tài)(例如 flow_rate 》= 1.0),它將向訂閱用戶發(fā)送一封通知電子郵件。
-
互聯(lián)網(wǎng)
+關(guān)注
關(guān)注
54文章
11158瀏覽量
103339 -
流量計
+關(guān)注
關(guān)注
10文章
1491瀏覽量
53619
發(fā)布評論請先 登錄
相關(guān)推薦
評論