如何建立一个室内空气质量监测器
扫描二维码
随时随地手机看文章
如果你在办公室工作,你…在办公室里。不管是不是在你家里,我都要大胆猜测,它也是在室内——在室内长时间没有良好通风的空间会导致空气质量低(理论上是健康问题)。
现在,我不想传播恐惧,让你们都认为自己会因为吸入同事的呼气而慢慢死亡。然而,我在这里展示一个简单的方法来建立一个云连接的室内空气质量系统:
•各种Adafruit空气质量传感器。
•一个blue Notecard通过LTE连接将项目云连接起来。
•Adafruit IO将空气质量数据可视化,并与其他服务集成。
•飞利浦Hue LED灯条,为低空气质量警报提供实时视觉效果.
注意:这个项目最初出现在Adafruit Playground上。
硬件组成
让我们从采购和组装不同的硬件组件开始。
空气质量传感器来自Adafruit
Adafruit是我制作新项目原型时的首选组件来源。因此,受TJ VanToll项目的启发,我开始使用Adafruit SCD40传感器来测量温度、湿度和二氧化碳水平。
接下来,我想找到一种简单的方法来测量VOC(挥发性有机化合物)的含量。Adafruit的SGP40气体传感器提供了这一点,支持的库可以访问“原始”气体水平和输出VOC指数的算法。
顺便说一句,我还使用了一个7段显示器来显示最近计算的VOC指数,本地:
来自blue的云连接
我知道我需要的不仅仅是在7段显示器上显示单个值的本地显示。我想创建一个真正的云连接系统,让我可以使用像Adafruit IO这样的云服务来可视化数据,发送警报,并与其他“智能家居”设备进行交互。
这段旅程以布鲁斯和笔记卡手机开始并结束。
虽然说到“cellular”这个词可能会让一些人感到害怕,但Blues通过将古老的AT命令语法隐藏在健壮的基于json的API后面来简化cellular。更不用说,使用Notecard无需每月支付SIM卡费用——只需一次性支付硬件费用,包括在140多个国家/地区使用500MB的数据和服务。
主MCU和载波板
为了将所有组件组合在一起,我选择使用基于stm32的主机MCU(与feather兼容的Blues Cygnet)和另一个blue提供的组件Notecarrier F。Notecarrier F提供了一个(物理)开发平台,您可以在该平台上安装Notecard(基于feather的主MCU),并连接传感器和其他外围设备。
最终硬件结果
连接7段显示器就像提供电源和连接地线,SDA和SCL线一样简单。由于STEMMA QT/Qwiic连接器的便利性,其他两个Adafruit空气质量传感器通过几根电缆连接:
写入固件
我通常在编写Arduino/C和CircuitPython之间来回切换。对于这个项目,我选择了Arduino/C -只是因为CircuitPython对Blues Cygnet的支持还没有完全准备好。然而,无论哪种方式,Adafruit传感器库和Blues Python或Blues Arduino sdk都提供了对两种语言的强大支持。
完整的源代码可以在GitHub上找到。然而,这里有一些亮点:
空气质量传感器数据
除了一些必要的仪式来初始化空气质量传感器,实际提取的值是几个命令的问题:
蜂窝连接编码
同样,Blues使云连接这个项目变得非常容易。实际上,只需要两个命令就可以将本地传感器数据发送到云端。
我们数据的第一个目的地是Blues云服务Notehub,它作为Notecard的安全云代理,最终将收集到的传感器数据路由到Adafruit IO。
1)使用枢纽。集合API:
的中心。set API告诉Notecard它应该向哪个Notehub云项目发送数据。
在设置了一个(免费的)Notehub项目后,你会得到一个全局唯一的ProductUID:
以及支持的代码块:
2)使用笔记。添加API
每次我们想要将积累的传感器数据与云同步时,我们都会调用note。添加API。这将创建一个充满我们所有传感器数据的事件(或蓝调术语中的注释)。
结果数据显示在Notehub项目中如下所示:
云连接
目前,我们正在本地收集传感器数据,并通过蜂窝定期将其发送到云端。
太酷了!
然而,现在我们需要对这些数据做一些有意义的事情,这就是Adafruit IO发挥作用的地方。这个云服务提供了一个慷慨的免费层,提供了一种非常简单的方式来可视化数据(仪表板),创建警报(操作),甚至集成第三方服务(升级)。
Adafruit IO Feeds
设置Adafruit IO帐户后,前往Feeds部分,为想要使用的每个数据元素创建一个feed:
蓝调Notehub
接下来,我们需要回到Notehub创建一个路由,它将告诉Notehub如何将事件传递到Adafruit IO!
在Routes菜单选项中,选择General HTTP/HTTPS Request/Response,它允许我们向Adafruit IO HTTP api发送数据。
安排好剩下的路线
1) URL
其中{username}是您的Adafruit IO用户名,{group}是封装提要的组名。(这可能是默认设置。)
2)在HTTP报头下,您必须添加Adafruit IO密钥(可在您的Adafruit IO帐户中找到)。x - IO- key是名称,您的Adafruit IO key是值。
3)在过滤器下,您将希望发送与此项目相关的传感器数据,并忽略Notecard发送的其他会话和健康信息。因此,在Notefiles部分下,选择Selected Notefiles,然后选择传感器。qo(这是代码中使用的Notefile的名称)。
4)最后在Data部分,我们需要编辑或转换从设备发送到Adafruit IO之前的JSON有效负载。每个云服务都有特定的数据格式,Adafruit IO也不例外!
实际上,我们需要创建一组键值对,每个要发送的数据元素对应一个键值对。之类的……
这是如何实现的呢?通过JSONata表达的魔力!JSONata允许您动态地转换JSON对象。
提示:JSONata练习器是测试JSONata表达式的好方法!
下面是我使用的完整的JSONata表达式,以及前面提到的JSONata练习器中该表达式的图像:
最后,保存路由(确保已启用)并观察下一个事件。您应该在事件视图的状态列下看到一个绿色的小复选框,它告诉您事件已成功路由到Adafruit IO!
Adafruit IO仪表板
现在我们有数据流入Adafruit IO,让我们创建一个仪表板。
前往Adafruit IO中的仪表板菜单选项并创建您的第一个仪表板。
使用提供的直观UI,为每个提要创建一个或多个块。例如,使用VOC指数数据馈送,我创建了一个显示最近读数的仪表和一个显示历史读数的折线图:
现在,对要可视化的每个数据元素重复前面的步骤。就是这么简单!
Adafruit IO Actions
接下来,我认为每当我的VOC指数超过100(通常是空气质量从好到不太好!)时,收到电子邮件提醒会很方便。
前往Adafruit IO中的Actions菜单选项。
使用表单或“Blockly”编辑器创建一个新动作(感觉有点像在Scratch中编程!)
以下是我的邮件提醒在Blockly编辑器中的样子:
警报呢?相当吸引人:
Adafruit IO Power-Ups
现在是时候认真对待Adafruit IO power - up了!
这些是与第三方服务(如IFTTT、Zapier和SMS)的健壮集成,用于消息传递(以及其他服务)。
就我个人而言,我认为使用IFTTT与我的飞利浦Hue LED灯条集成并在我当地的空气质量(VOC指数)出现问题时提供一些更戏剧性的反馈将是非常简洁的!
让我们把这个设置好。
1)在Adafruit IO的Power-Ups菜单中选择IFTTT。
2)登录您的IFTTT帐户并创建一个applet。
3) applet的第一步是监视来自Adafruit IO的监视器。搜索“Adafruit”,并根据需要填写表格,将颜色设置为绿色(例如,VOC值<= 100)。
4)接下来,在“然后”部分,你需要连接到你的Hue帐户,并为你的Hue灯选择“改变颜色”动作。
5) IFTTT小程序应该就完成了!
您将需要重复此过程来设置红色,更改“if”语句,使其在VOC值为bbb100时触发。
注意:IFTTT的免费层每小时只轮询你的Adafruit IO feed一次。你可以升级到他们的“专业”层,以获得更频繁的投票。
最终结果
结果呢?巨大的成功!
我办公室里的挥发性有机化合物含量自然在90到130之间,但我硬编码了一些挥发性有机化合物的值,以便快速演示灯光的变化:
如果你能认出那只猫,那就加分了!
因此,我希望你已经看到,构建一个真正的云连接产品是多么容易,它可以:
•测量室内空气质量。
•将这些数据发送到云端。
•在仪表板上可视化传感器数据。
•当空气质量恶化时,发送电子邮件提醒。
•在本地智能家居设备上可视化结果。
多亏了bluesnotecard和Adafruit IO的简单(和强大),这个项目只花了我几个小时就拼凑起来了——我希望你也能这样做!
在这里开始使用Adafruit IO,并在这里获得您自己的蓝调入门工具包。入门套件包括STM32主机,Notecarrier F和Notecard Cell+WiFi。也请记住,这个项目的完整源代码可以在GitHub上找到!
本文编译自hackster.io