該項目的目標是為低成本設(shè)備創(chuàng)建一個原型,以使用蜂窩數(shù)據(jù)監(jiān)測遠程位置工業(yè)設(shè)備的壓力。物聯(lián)網(wǎng)設(shè)備使用蜂窩數(shù)據(jù)遠程監(jiān)控壓力 (0-150 psi)。獲取高于/低于高/低設(shè)定點的壓力通知。
項目步驟
以下是項目的逐步構(gòu)建,該項目遵循從壓力傳感器到由附加到 Google 表格的腳本生成的電子郵件通知的數(shù)據(jù)流。
第 1 步:Uno 的壓力傳感器
壓力傳感器將壓力轉(zhuǎn)換為模擬電信號。
Arduino Uno 將來自壓力傳感器的模擬信號轉(zhuǎn)換為壓力 (psi)。
第 2 步:Uno 到 MKR GSM 1400 通過串行
通過 Serial 在兩個 Arduino 設(shè)備之間進行通信時:
將設(shè)備 #1 上的 RX 連接到設(shè)備 #2 上的 TX
將設(shè)備 #1 上的 TX 連接到設(shè)備 #2 上的 RX
這些設(shè)備必須有一個共同的接地
數(shù)據(jù)傳輸頻率(Uno 到 MKR GSM 1400)
NORMAL:每隔 30 分鐘(傳輸頻率),Uno 將串行打印數(shù)據(jù)到 MKR GSM 1400,然后將數(shù)據(jù)傳輸?shù)皆贫恕?/p>
HIGH/LOW TRIGGER:如果壓力超過 40 psi (highTrigger) 或低于 20 psi (lowTrigger) 并停留超過 2 分鐘 (dtLastTriggerLimit),Uno 會將數(shù)據(jù)串行打印到 MKR GSM 1400,后者將傳輸數(shù)據(jù)到云端。
DEMAND POLL:如果 Uno 上的引腳 A1 被推高,它將串行打印數(shù)據(jù)到 MKR GSM 1400,然后將數(shù)據(jù)傳輸?shù)皆贫恕W⒁猓阂_ A1 在 Uno 的草圖中被命名為“buttonPin”。Uno 上的引腳 A1 有兩種方式可以被推高。(1) 面包板上有一個按鈕。(2) 如果 MKR GSM 1400 上的引腳 A3 為高電平,它將推動引腳 A1 為高電平。由于引腳 A3 由 Arduino Cloud 中的輸入控制,因此可以隨時遠程獲取當前壓力,而無需等待定期安排的數(shù)據(jù)傳輸。
筆記
可以修改 Uno 的草圖,以便在當前版本中除了壓力之外,還可以使用高低設(shè)定點監(jiān)控溫度、濕度、電池電壓等多個輸入。
用于將來自壓力傳感器的模擬信號轉(zhuǎn)換為壓力 (psi) 的代碼基于以下 YouTube 視頻中給出的說明:https ://www.youtube.com/watch?v=AB7zgnfkEi4
Arduino 論壇上的以下關(guān)于“串行輸入基礎(chǔ)知識”的帖子在編寫代碼以使用串行數(shù)據(jù)從一個設(shè)備到另一個設(shè)備進行通信時非常有幫助:https ://forum.arduino.cc/index.php?topic =288234.0
第 3 步:MKR GSM 1400 通過蜂窩網(wǎng)絡(luò)連接到 Arduino Cloud
MKR GSM 1400 處理來自 Arduino Uno 的串行數(shù)據(jù),并使用蜂窩數(shù)據(jù)將數(shù)據(jù)傳輸?shù)?Arduino Cloud。
值得注意的是,在 MKR GSM 1400 的代碼中,您會看到Serial1.read而不是Serial.read 。Arduino 網(wǎng)站上的參考資料給出了很好的解釋。下圖中的表格顯示了通過 Serial1 訪問 MKR 板上的 TX/RX 引腳。
Arduino Cloud
該項目在 Arduino Cloud 中設(shè)置了 2 個變量。下圖顯示了這些變量如何顯示在 Arduino Cloud 的儀表板中。
第一個名為“dataStringCloud”的變量實際上是來自設(shè)備的所有數(shù)據(jù)的一個包。采用這種方法,而不是每個值一個變量,以簡化 Google 表格中的數(shù)據(jù)處理。使用單獨的變量名稱,很難區(qū)分保持不變的值和未更新的值。此包中的數(shù)據(jù)在 Google 表格中進行解析。
第二個名為“pinCloud”的變量用于從 Arduino Cloud 控制 MKR GSM 1400。草圖中有一個開關(guān)功能,根據(jù) pinCloud 的值控制動作。當 pinCloud = 1 時,引腳 A1 被推高,導致板上的 LED 亮起。當 pinCloud = 2 時,引腳 A3 被推高,導致 Arduino Uno 如上所述發(fā)送當前數(shù)據(jù)。
第 4 步:Arduino Cloud 通過 Webhook 到 Google 表格
使用 webhook 將數(shù)據(jù)從 Arduino Cloud 傳輸?shù)?Google Sheets。
webhook 的核心是用 Google 表格文件的腳本編寫的 doPost 函數(shù)。
以下是如何設(shè)置 webhook 的快速摘要:
創(chuàng)建一個新的 Google 表格文件
單擊工具欄上的“工具”并在下拉菜單中選擇“腳本編輯器”
使用doPost 函數(shù)編寫代碼(參考本項目附帶的 GoogleSheetsScript.js)
單擊工具欄上的“發(fā)布”并在下拉列表中選擇“部署為 Web 應(yīng)用程序。。.”
一個對話框?qū)⒊霈F(xiàn) 3 個字段。
(1)項目版本:始終使用下拉菜單選擇“新建”。第一次更新后,默認為當前版本的#;如果您不使用下拉菜單選擇“新建”,則更改不會生效。
(2)執(zhí)行 App 為:“me (youremail@gmail.com)”
(3)誰可以訪問應(yīng)用程序:“任何人,甚至是匿名的”
驗證 3 個字段中的值后按部署
將出現(xiàn)第二個對話框,其中包含“當前 Web 應(yīng)用程序 URL”。這是您將復(fù)制并粘貼到 Arduino Cloud 上的 webhook 選項卡中的 URL。值得注意的是,無論項目版本如何,此 URL 都保持不變。
單擊確定,您就完成了!
第 5 步:使用 Google 表格解析數(shù)據(jù)
使用 Google Sheets 解析 dataStringCloud 中的單個值并顯示從 Arduino Cloud 傳輸?shù)奈ㄒ挥涗?/p>
下面的鏈接指向最近用于設(shè)備測試的 Google 表格文件。此文件中的單元格根據(jù)它們的填充方式進行著色,如每張紙上的圖例所示。
https://docs.google.com/spreadsheets/d/1XwCir2Llw8RvGPGgZI3Yk6U5a3LeIfUACNuO1Gr_LFQ/edit?usp=sharing
第 6 步:使用 Google 表格發(fā)送通知
您可能已經(jīng)注意到,在上面第 4 步中引用的此項目 (GoogleSheetsScript.js) 的 JavaScript 文件中有兩個函數(shù)。
doPost 函數(shù) - 從 Arduino Cloud Webhook 傳輸數(shù)據(jù)。它在 Arduino Cloud 上有新數(shù)據(jù)時運行。
sendEmail 函數(shù) - 根據(jù)從項目的 Google 表格文件中名為“數(shù)據(jù)”的表格中提取的值發(fā)送電子郵件。它根據(jù)觸發(fā)器設(shè)置中的設(shè)置每分鐘運行一次。
為 sendEmail 函數(shù)設(shè)置觸發(fā)器的步驟
打開谷歌表格文件
點擊工具欄中的“工具”
在下拉列表中選擇“腳本編輯器”
從腳本編輯器窗口繼續(xù):
點擊工具欄中的“編輯”
在下拉列表中選擇“當前項目的觸發(fā)器”
選擇窗口右下角的“添加觸發(fā)器”
在出現(xiàn)的對話框中選擇運行 sendEmail 功能。
注意:在時間驅(qū)動的基礎(chǔ)上運行觸發(fā)器可以在設(shè)備停止更新時生成電子郵件通知。
電池壽命
~24 小時
這可以通過關(guān)閉或移除顯示器來優(yōu)化。另一種選擇是移除非必要的傳感器,如 DHT22 和 DS3231。
數(shù)據(jù)使用
~0.7 兆字節(jié)/天
這可以通過減少數(shù)據(jù)傳輸?shù)拇笮』蝾l率來優(yōu)化。例如:為了減小尺寸,只發(fā)送壓力而不是壓力、溫度、濕度和時間。為了降低頻率,僅每小時更新一次,而不是每 30 分鐘一次。
所需材料
Arduino MKR GSM 1400
Arduino Uno
2 節(jié) 3.7V 鋰聚合物電池
2 個 LED 顯示屏
耐候塑料盒
壓力傳感器
溫度/濕度傳感器 - DHT22
RTC 模塊 - DS3231
邏輯電平轉(zhuǎn)換器
雜項 - LED、電阻器、接線等
評論
查看更多