×

能感受到空气质量变化的开源设计

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-16

李芳

分享资料个

描述

Chris Bartley 凭借这个出色的参赛作品赢得了第一届 Neosensory 开发者竞赛。他的出色文章也可以在这里找到:https ://chrisbartley.github.io/aq-buzz/

Chris 不仅构建了一个可以直接或通过 iPhone 应用程序与 Buzz 交互的空气质量传感器网络,他还为我们的开发者社区制作了一个开源的Neosensory API Swift 包和诊断应用程序。感谢 Chris 允许在此处发布他的项目,
 

空气质量+嗡嗡声

基于 Arduino 的传感设备和适用于Neosensory Buzz的 iOS 应用程序,让您能够感受到周围空气质量的变化。

关于“空气质量”的说明

空气质量一词可能意味着很多不同的东西。如果您查看各种商业空气质量监测器感知的各种事物,您会发现颗粒物 (PM)、VOC、CO2、CO、氡等。这里的示例目前仅限于 VOC(由Sensirion SGP30 检测到),但没有理由不能更改/扩展它以包含您感兴趣的任何污染物。对于家庭来说,颗粒物可能是最明显和最有用的添加物。

硬件

为了便于快速组合硬件和软件,我选择了 Adafruit Feathers 和 Arduino 设备的分线板。强烈推荐!感谢 Adafruit 出色的文档和示例代码,我在大约两天内就有了第一个工作版本。仅根据我之前的经验(我以前从未使用过 Arduinos),我最初认为我会使用 Raspberry Pi Zero + Node.js 解决方案。但是 Adafruit Feather Arduinos 最终胜出……它们更容易让原型快速启动并运行——对我和任何想要复制我在这里所做的事情的人来说都是如此。

我最终构建了两个相似但略有不同的 Arduino Feather 设备。我现在通常认为这是一个糟糕的举动,因为它最终在代码方面创造了更多的工作。但这主要是受当时库存的推动,但也有一点是受定价、我手头上已有的东西以及我的好奇心。一个设备是围绕Adafruit Feather nRF52840 Sense 构建的,而另一个使用Adafruit Feather nRF52840 Express。

这两款设备都使用Adafruit SGP30 分线板来测量总 VOC (tVOC)。最终设备的差异在于正确使用 SGP30 所需的或至少推荐的附加功能。SGP30 进行基线校准,您可以读取校准值,以便在上电时使用最后已知的基线值初始化传感器。如果您不这样做,那么 Sensirion 建议您至少等待 12 小时才能信任读数。您还应该在最初的 12 小时校准后每小时读取和存储基线值。 并且不要相信任何超过一周的基线值。所有这些都意味着您有一些方法可以将基线值存储在非易失性内存中,并且一些知道现在几点的方法,以及你上次写值的时间……所以你也需要一个实时时钟。为了使事情变得更复杂,他们还建议您使用湿度传感器,以便您可以利用 SGP30 的可选湿度补偿功能。

实际零件清单、装配说明和软件支持/使用等详细信息位于单独的文档中:

羽感装置组装和使用

Feather Express 设备组装和使用

当然,如果你真的想尝试这些,你也需要一个Neosensory Buzz !:-)

网络拓扑

这里的示例属于两个主要的设备网络/通信拓扑,但包括第三个的开始和实施说明(警告!)。

与 Buzz 的所有通信都是通过低功耗蓝牙 (BLE) 完成的。所有三种拓扑都具有 Buzz 作为 BLE 外围设备和一个或多个基于 Arduino 的设备 + 传感器执行环境传感的共同特征。拓扑不同之处在于哪个设备充当 BLE 中心。这里介绍的三种通信拓扑是:

单个 Arduino 设备充当 BLE 中心,直接与 Buzz 通信。

一个或多个 Arduino 设备作为 BLE 外围设备,iOS 应用程序作为 Arduino 和 Buzz 的 BLE 中心。

一个或多个 Arduino 设备作为无连接、仅广播的 BLE 外围设备,iOS 应用程序作为 BLE 中心。

以下是对上述三种网络拓扑的简要讨论,以及指向此存储库中代码的指针。

Arduino 作为 BLE 中心

在这种情况下,单个 Arduino 设备是 BLE 中心,直接与 Buzz 通信。一个示例用例可能是佩戴 Arduino(例如,电池供电,并戴在腕带上)并让它持续监测您附近的 VOC,您可以通过 Buzz 感受到这一点。

相关的 Arduino 代码在arduino/central.

iOS App 作为 Central + Arduino(s) 作为 Connected Peripheral(s)

此方案包含一个或多个 Arduino 设备作为 BLE 外围设备,iOS 应用程序作为 BLE 中心。iOS 应用程序连接到它找到的所有 Arduino 外围设备以及 Buzz,并充当传感器和 Buzz 之间的代理,并负责将传感器数据“转换”为 Buzz 振动。这种模式的好处是:

假设您已经随身携带手机,则无需佩戴其他“东西”。

多个传感器——例如,分布在你家周围的几个——使手机能够聚合传感器数据,这样你就可以(从字面上看!)整个房子的总体空气质量,或者让手机自动检测你是哪个 Arduino最接近并仅向您的 Buzz 报告这些传感器的读数。此处包含的 iOS 应用程序 AQ Buzz 采用后一种方法。我将把聚合模型作为练习留给读者:-)

由于手机可以访问互联网,因此可以轻松扩展 iOS 应用程序以将传感器数据上传到某种在线数据存储库以供以后处理/查看。

手机还可以从本地或云端的其他传感器中提取数据,并将其合并到发送到 Buzz 的振动命令中。

对于这个实现,我选择了 Arduino 外设通过单个 BLE 通知特性发布数据样本。中央订阅通知,外围设备定期发布通知(此处为 1 Hz)。

相关的 Arduino 代码在arduino/peripheral/feather-express-aq-notifynd下arduino/peripheral/feather-sense-aq-notify。相关的 iOS 应用在ios/AQ Buzz.

iOS App 作为 Central + Arduino(s) 作为无连接、仅广播外设

此方案由一个或多个 Arduino 设备组成,作为无连接、仅广播的 BLE 外围设备,iOS 应用程序作为 BLE 中心。在了解到,当 iOS 应用程序作为后台并扫描外围广告时,我简要地开始了这条路径,“广告外围设备的多个发现合并为一个发现事件”。因此,在其 BLE 广告中广播数据样本的外围设备基本上会被在 iOS 上在后台运行的中央设备所忽略。所以,除非您想始终将应用程序保持在前台,否则不要去……不完全理想。可以想象这样一种场景,其中一些其他设备充当中心并从广播外围设备中聚合样本以交付给 Buzz,例如 Raspberry Pi 或 Arduino(甚至是传感 Arduino 之一),但随后您要么回到穿另一件东西,否则您会失去通过随身携带中央设备(即手机上的应用程序)获得的接近意识。

广告负载的大小也比 BLE 特性更受限制,因此在广告中包含足够有用的信息要困难得多。

最后,对于家庭使用,仅广播外围设备的安全/隐私影响是另一个打击。通过查看几周的空气质量数据,很容易了解是否有人在家,或者至少可以在没有人在家的情况下找到趋势。与需要连接的外围设备相比,仅广播外围设备不提供控制谁在“收听”的选项。因此,恶意人员意图抢劫并非不可想象,您可以在仅广播传感器的 BLE 范围内设置设备,并很快了解您通常不在家的时间。上一节中引用的外围代码不包括任何类型的身份验证/授权,但它至少是一种选择,而且实现起来并不难。

相关的 Arduino 代码在 下arduino/peripheral/feather-sense-aq-broadcast,但我放弃了用于接收广播的 iOS 应用程序,因为它似乎有点毫无意义。

试试看!

要试用它,请从上面硬件部分中引用的任一设备组装 + 使用文档开始。我推荐Feather Sense Device ,因为说明更详细,软件更充实。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !