构建一个空气质量检测设备
大多数空气质量设备将有趣的部分隐藏在屏幕上的数字背后。而这个作品则恰恰相反:它将DFRobot Gravity ENS160气体传感器的读数,转化为Arduino UNO Q上13x8蓝光LED矩阵上的生动动画。走过它时,你立刻就能知道空气状况——当空气清新时,会呈现出柔和的微光;当空气不洁时,则像暴风雨般翻腾。它既是一个实用的监测工具,又是一款桌面小玩具,是学习Arduino最新主板上I2C传感器和LED矩阵图形的绝佳方式。
它做什么
•矩阵底部的5块计数器随空气质量指数(AQI 1-5)上升。
•污染颗粒从测量仪上飘升而起——在洁净空气中是一缕轻烟,而在恶劣天气中则化作浓密的快速风暴。
•当挥发性有机物(VOC)浓度上升时,只需在传感器上呼吸,就会瞬间释放出一股粒子喷射而出。
•一道巨大的闪光,一道闪电划过整个面板。
物料清单
•Arduino UNO Q(x1) - STM32U585 + 内置 13x8 蓝色 LED 矩阵
•DFRobot Gravity ENS160(x1) - TVOC / eCO2 / AQI 传感器,I2C (0x53)
•跳线 / 重力电缆(x4)- VCC、GND、SDA、SCL
•USB-C 数据线(1根) - 供电 + 编程
•JUSTWAY 保护套(适用于 UNO Q)(x1)- 3D 打印,保护电路板
传感器
ENS160 是一款微型金属氧化物气体传感器,通过 I2C 接口报告三项数据:空气质量指数(1-5)、总挥发性有机化合物(TVOC,单位为 ppb)以及等效 CO₂ 值(eCO₂,单位为 ppm)。在 DFRobot Gravity 板上,它只需简单的 4 芯连接即可使用。
软件
•Arduino IDE 2.x(或 Arduino App Lab)。
•Arduino "Zephyr" 板子包(添加了 UNO Q、FQBN arduino:zephyr:unoq)。
•库:DFRobot_ENS160 和 ArduinoGraphics。(Arduino_LED_Matrix 与板芯一同提供。)
1 - 连接传感器
四根线,你就完成了。将ENS160连接到UNO Q的I2C引脚(SDA和SCL,位于AREF旁边),并接上3V3和GND作为电源。
2 - 设置棋盘
从 arduino.cc 安装 Arduino IDE 2.x。
•在 Boards Manager 中,安装 Arduino “Zephyr” / UNO Q 板件包。
•选择工具 > 板子 > Arduino UNO Q,然后选择正确的 COM 端口。
•设置“USB CDC 启动时启用”,以便串行监视器通过 USB 运行。
注意 - UNO Q 需要现代的工具链。旧版 Arduino IDE 1.8.x 无法上传到它,因为它在查找“remoteocd”工具时会失败。请使用 Arduino IDE 2.x 或 Arduino App Lab。
3 - 安装库文件
打开图书馆管理器,安装 DFRobot_ENS160(传感器驱动程序)和 ArduinoGraphics(矩阵绘图基本图形)。无需单独安装 Arduino_LED_Matrix,它已包含在 UNO Q 板的套装中。
4 - 代码
创建一个新草图,粘贴下方代码并上传。它每两秒轮询一次传感器,将AQI映射到动画中,并以每秒约18次的速度重新绘制矩阵,实现平滑的运动效果。巧妙之处在于:
一个小的粒子系统(28个粒子)从光照水平方块上升起;其生成速率和速度均与AQI成比例。
•TVOC突然急剧上升,引发一次突发性爆发(>80 ppb)或一次全量雷击(>200 ppb)。
•读取和绘图是解耦的,因此即使传感器每秒只更新一次,风暴仍能保持平滑。
提示 - 如果之后仍未检测到传感器,95%的情况下是电源问题或SDA/SCL线接反。请确保VCC连接为3V3,并重新插拔连接器。该代码还会打印I2C扫描信息,帮助你快速定位问题。
5 - 显示屏如何映射到你的空气
EN160 将空气质量从 1(优秀)到 5(不健康)进行分级。以下是各等级在矩阵中的具体表现:随着空气质量恶化,方块数量增多,颗粒物风暴也更浓密;当达到“差”或“不健康”时,最上方的方块会闪烁。
6 - JUSTWAY 机箱
为了确保UNO Q安全地放置在桌面上,它被安置在一个由JUSTWAY制造的3D打印外壳中。一个重要的细节是:这个外壳仅保护电路板,而ENS160则保持在室外露天环境中。如果将气体传感器密封在盒内,它无法获取室内环境数据,读数会不准确,因此我们让其自由呼吸。
•打印JUSTWAY UNO Q外壳(使用PLA或PETG材料,0.2毫米层厚,填充率约15-20%即可)。
•将UNO Q安装在底座上,使LED矩阵与窗口对齐,USB-C接口也与缺口对齐。
•将四线传感器电缆从侧面引出,并将ENS160安装在外部,用短跳线固定,以便其通风。
•关闭盖子,并确保传感器远离USB-C接口及任何发热部件,以获得更清晰的读数。
7 - 充能并开始游戏
•插入USB-C接口。矩阵以一束光和轻柔的微风——洁净的空气,悄然苏醒。
•以115200波特率打开串行监视器,实时查看AQI、TVOC和eCO2数据。
•轻柔地吹气到传感器上:TVOC值飙升,颗粒物爆发,方块开始上升。
•用力呼吸,或在下方擦拭酒精湿巾或标记笔。
注意——全新的ENS160在“初始启动”阶段最多持续一小时,但在此期间始终会输出可用的AQI值,因此显示屏会立即开始动画显示,无需等待。
故障排除
•未找到 ENS160 / 网格上的 X - 检查 VCC->3V3、GND 以及 SDA/SCL 是否未交换;重新设置连接器。该代码会打印 I2C 扫描以提供帮助。
•IDE 1.8.x 上传错误(remoteocd)——请使用 Arduino IDE 2.x 或 App Lab;1.8.x 无法闪存 UNO Q。
•在串口监视器输出中 - 上传前请启用“启动时启用USB CDC”。
•读数停留在基线水平——热身;新传感器需要时间,但在此期间数值仍可用。
小贴士:给传感器留出几厘米的空隙,并避免风扇直接吹过它——你希望它读取的是房间内的环境,而不是被气流吹动。
本文编译自hackster.io





