安全设备/系统
该项目的目标是为低成本设备创建一个原型,以使用蜂窝数据监测远程位置工业设备的压力。物联网设备使用蜂窝数据远程监控压力 (0-150 psi)。获取高于/低于高/低设定点的压力通知。
项目步骤
以下是项目的逐步构建,该项目遵循从压力传感器到由附加到 Google 表格的脚本生成的电子邮件通知的数据流。
第 1 步:Uno 的压力传感器
压力传感器将压力转换为模拟电信号。
Arduino Uno 将来自压力传感器的模拟信号转换为压力 (psi)。
第 2 步:Uno 到 MKR GSM 1400 通过串行
通过 Serial 在两个 Arduino 设备之间进行通信时:
将设备 #1 上的 RX 连接到设备 #2 上的 TX
将设备 #1 上的 TX 连接到设备 #2 上的 RX
这些设备必须有一个共同的接地
数据传输频率(Uno 到 MKR GSM 1400)
NORMAL:每隔 30 分钟(传输频率),Uno 将串行打印数据到 MKR GSM 1400,然后将数据传输到云端。
HIGH/LOW TRIGGER:如果压力超过 40 psi (highTrigger) 或低于 20 psi (lowTrigger) 并停留超过 2 分钟 (dtLastTriggerLimit),Uno 会将数据串行打印到 MKR GSM 1400,后者将传输数据到云端。
DEMAND POLL:如果 Uno 上的引脚 A1 被推高,它将串行打印数据到 MKR GSM 1400,然后将数据传输到云端。注意:引脚 A1 在 Uno 的草图中被命名为“buttonPin”。Uno 上的引脚 A1 有两种方式可以被推高。(1) 面包板上有一个按钮。(2) 如果 MKR GSM 1400 上的引脚 A3 为高电平,它将推动引脚 A1 为高电平。由于引脚 A3 由 Arduino Cloud 中的输入控制,因此可以随时远程获取当前压力,而无需等待定期安排的数据传输。
笔记
可以修改 Uno 的草图,以便在当前版本中除了压力之外,还可以使用高低设定点监控温度、湿度、电池电压等多个输入。
用于将来自压力传感器的模拟信号转换为压力 (psi) 的代码基于以下 YouTube 视频中给出的说明:https ://www.youtube.com/watch?v=AB7zgnfkEi4
Arduino 论坛上的以下关于“串行输入基础知识”的帖子在编写代码以使用串行数据从一个设备到另一个设备进行通信时非常有帮助:https ://forum.arduino.cc/index.php?topic =288234.0
第 3 步:MKR GSM 1400 通过蜂窝网络连接到 Arduino Cloud
MKR GSM 1400 处理来自 Arduino Uno 的串行数据,并使用蜂窝数据将数据传输到 Arduino Cloud。
值得注意的是,在 MKR GSM 1400 的代码中,您会看到Serial1.read而不是Serial.read 。Arduino 网站上的参考资料给出了很好的解释。下图中的表格显示了通过 Serial1 访问 MKR 板上的 TX/RX 引脚。
Arduino Cloud
该项目在 Arduino Cloud 中设置了 2 个变量。下图显示了这些变量如何显示在 Arduino Cloud 的仪表板中。
第一个名为“dataStringCloud”的变量实际上是来自设备的所有数据的一个包。采用这种方法,而不是每个值一个变量,以简化 Google 表格中的数据处理。使用单独的变量名称,很难区分保持不变的值和未更新的值。此包中的数据在 Google 表格中进行解析。
第二个名为“pinCloud”的变量用于从 Arduino Cloud 控制 MKR GSM 1400。草图中有一个开关功能,根据 pinCloud 的值控制动作。当 pinCloud = 1 时,引脚 A1 被推高,导致板上的 LED 亮起。当 pinCloud = 2 时,引脚 A3 被推高,导致 Arduino Uno 如上所述发送当前数据。
第 4 步:Arduino Cloud 通过 Webhook 到 Google 表格
使用 webhook 将数据从 Arduino Cloud 传输到 Google Sheets。
webhook 的核心是用 Google 表格文件的脚本编写的 doPost 函数。
以下是如何设置 webhook 的快速摘要:
创建一个新的 Google 表格文件
单击工具栏上的“工具”并在下拉菜单中选择“脚本编辑器”
使用doPost 函数编写代码(参考本项目附带的 GoogleSheetsScript.js)
单击工具栏上的“发布”并在下拉列表中选择“部署为 Web 应用程序。。.”
一个对话框将出现 3 个字段。
(1)项目版本:始终使用下拉菜单选择“新建”。第一次更新后,默认为当前版本的#;如果您不使用下拉菜单选择“新建”,则更改不会生效。
(2)执行 App 为:“me (youremail@gmail.com)”
(3)谁可以访问应用程序:“任何人,甚至是匿名的”
验证 3 个字段中的值后按部署
将出现第二个对话框,其中包含“当前 Web 应用程序 URL”。这是您将复制并粘贴到 Arduino Cloud 上的 webhook 选项卡中的 URL。值得注意的是,无论项目版本如何,此 URL 都保持不变。
单击确定,您就完成了!
第 5 步:使用 Google 表格解析数据
使用 Google Sheets 解析 dataStringCloud 中的单个值并显示从 Arduino Cloud 传输的唯一记录
下面的链接指向最近用于设备测试的 Google 表格文件。此文件中的单元格根据它们的填充方式进行着色,如每张纸上的图例所示。
https://docs.google.com/spreadsheets/d/1XwCir2Llw8RvGPGgZI3Yk6U5a3LeIfUACNuO1Gr_LFQ/edit?usp=sharing
第 6 步:使用 Google 表格发送通知
您可能已经注意到,在上面第 4 步中引用的此项目 (GoogleSheetsScript.js) 的 JavaScript 文件中有两个函数。
doPost 函数 - 从 Arduino Cloud Webhook 传输数据。它在 Arduino Cloud 上有新数据时运行。
sendEmail 函数 - 根据从项目的 Google 表格文件中名为“数据”的表格中提取的值发送电子邮件。它根据触发器设置中的设置每分钟运行一次。
为 sendEmail 函数设置触发器的步骤
打开谷歌表格文件
点击工具栏中的“工具”
在下拉列表中选择“脚本编辑器”
从脚本编辑器窗口继续:
点击工具栏中的“编辑”
在下拉列表中选择“当前项目的触发器”
从 G Suite 开发者中心窗口继续:
选择窗口右下角的“添加触发器”
在出现的对话框中选择运行 sendEmail 功能。
注意:在时间驱动的基础上运行触发器可以在设备停止更新时生成电子邮件通知。
电池寿命
~24 小时
这可以通过关闭或移除显示器来优化。另一种选择是移除非必要的传感器,如 DHT22 和 DS3231。
数据使用
~0.7 兆字节/天
这可以通过减少数据传输的大小或频率来优化。例如:为了减小尺寸,只发送压力而不是压力、温度、湿度和时间。为了降低频率,仅每小时更新一次,而不是每 30 分钟一次。
所需材料
Arduino MKR GSM 1400
Arduino Uno
2 节 3.7V 锂聚合物电池
2 个 LED 显示屏
耐候塑料盒
压力传感器
温度/湿度传感器 - DHT22
RTC 模块 - DS3231
升压转换器
逻辑电平转换器
杂项 - LED、电阻器、接线等
全部0条评论
快来发表一下你的评论吧 !