1. 从“看天”到“控气”:家庭空气质量管理的真实需求
几年前,我还在用最“原始”的方法判断家里的空气状况——开窗闻一闻,或者看看窗外的雾霾指数。直到有一次,孩子连续咳嗽,我以为是感冒,折腾了半个月不见好,最后医生一句“家里是不是太干燥,或者有尘螨过敏源?”让我如梦初醒。我这才意识到,我们每天呼吸的室内空气,远比我们想象的复杂和重要。它看不见摸不着,却实实在在地影响着家人的健康、睡眠质量,甚至情绪和工作效率。这就是“Residential Air Quality Monitoring, Visualization and Control”(住宅空气质量监测、可视化与控制)这个项目最朴素的起点:从一个焦虑的家长,到一个希望用技术解决问题的实践者。
这个项目远不止是买几个传感器那么简单。它的核心在于构建一个完整的闭环系统:监测是感知,告诉你“家里空气怎么了”;可视化是认知,让你直观理解“数据意味着什么”;而控制则是行动,让你能主动“改善它”。这背后涉及传感器选型、数据采集、本地或云端处理、前端展示以及联动智能设备等一系列环节。无论是新房装修后担心甲醛残留,还是老房子通风不畅导致二氧化碳积聚,或是北方冬季供暖期的干燥与颗粒物问题,这个系统都能提供一个量化的、可操作的解决方案。它适合所有关心家人健康、追求舒适智能生活的家庭用户,也适合喜欢动手折腾的极客和智能家居爱好者。
2. 监测基石:如何选择与部署你的家庭空气“哨兵”
监测是整个系统的眼睛。市面上传感器琳琅满目,但并非越贵越好,关键在于“对症下药”。你需要根据家庭的具体环境和潜在风险,组建一个合理的传感器阵列。
2.1 核心参数解读与传感器选型逻辑
家庭空气质量主要关注以下几个维度,每个维度对应不同的传感器类型和选型考量:
颗粒物(PM2.5/PM10):这是最广为人知的指标。传感器主要分两种:激光散射式和红外式。激光散射式精度高、响应快,能区分PM2.5和PM10,是首选。品牌方面,攀藤(Plantower)的PMS5003/PMS7003系列是开源项目和DIY爱好者的“标配”,性价比极高,数据稳定。而像攀藤的SPS30这类传感器,更是加入了PM1.0和PM4.0的监测,数据维度更丰富。红外式成本低,但精度较差,易受水蒸气干扰,通常用于低端消费产品,不建议在严肃的DIY项目中使用。
- 选型心得:对于家庭使用,攀藤PMS5003完全足够。购买时注意要买带有原装金属屏蔽罩的版本,能有效减少电磁干扰。另外,传感器需要风扇持续抽气,会有轻微噪音,部署时需考虑这一点。
挥发性有机化合物(TVOC)与甲醛(HCHO):这是装修污染和日常化学品释放的核心指标。这里有个巨大的坑:很多廉价的“甲醛检测仪”用的只是普通的TVOC传感器(如SGP30),它通过检测多种有机气体来估算一个“等效”的二氧化碳或TVOC值,并不能特异性地检测甲醛。真正的甲醛传感器(如英国达特DART的WZ-S-K、炜盛科技的ZE08-CH2O)价格昂贵,且需要定期校准。
- 选型心得:对于大多数家庭,我建议采用“TVOC传感器 + 通风策略”的组合。德国盛思锐(Sensirion)的SGP40是一款非常优秀的数字TVOC传感器,它内置了盛思锐的算法,能输出一个经过温度湿度补偿的VOC指数,比原始电阻值更有参考意义。它可以很好地反映油漆、清洁剂、烹饪油烟等带来的综合污染水平。如果你确实需要监测甲醛,务必确认传感器型号,并做好为精度和校准付出更高成本的准备。
二氧化碳(CO2):直接反映室内人员密集度和通风效率。CO2浓度过高(>1000ppm)会明显导致嗜睡、注意力不集中。传感器主流是非分散红外(NDIR)原理,如SenseAir的S8系列、国产的MH-Z19系列。MH-Z19B因其良好的性价比和UART/PWM输出,被广泛采用。
- 实操注意:NDIR传感器需要预热(通常几分钟到半小时)才能稳定。MH-Z19B有一个自动校准功能(ABC),默认开启。但在长期通风良好、CO2浓度很低的环境下,它可能会将低浓度误判为“新鲜空气”基准(400ppm),从而在浓度升高时产生偏差。对于家庭固定安装,我建议关闭ABC功能,并通过指令将其手动校准到已知的户外新鲜空气值(约400-420ppm)。
温湿度:这是基础但至关重要的参数。湿度影响体感舒适度、霉菌滋生,也与TVOC传感器的读数补偿相关。DHT22、SHT31都是常见的高精度数字温湿度传感器。
- 部署技巧:避免将温湿度传感器安装在空调出风口、加湿器正对面或窗户边,这些位置的数据不能代表房间的整体状况。应安装在人员常待的、空气流通相对均匀的位置,离地1-1.5米为宜。
2.2 硬件部署与数据采集架构
选好传感器后,如何让它们“说话”?你需要一个主控单元来读取数据。树莓派(Raspberry Pi)或ESP32是两大主流选择。
- 树莓派方案:适合作为家庭智能中枢,同时运行数据采集、处理和Web服务。你需要通过USB转串口模块(如CP2102、CH340)连接那些使用串口(UART)输出的传感器(如PMS5003, MH-Z19B)。树莓派GPIO可以直接连接DHT22、SGP40(使用I2C)。优势是计算能力强,方便用Python等语言编写复杂逻辑,直接本地部署数据库和可视化界面。
- ESP32方案:更适合分布式、低功耗部署。你可以将ESP32与几个传感器组合成一个独立的监测节点,通过Wi-Fi将数据发送到中央服务器(如Home Assistant, MQTT Broker)。ESP32本身具备蓝牙和Wi-Fi,功耗低,可以电池供电,灵活布置在各个房间。
我的部署策略是混合架构:在客厅核心区域,使用树莓派作为主网关,连接所有类型的传感器,进行全参数高频率监测。在各个卧室,则使用ESP32 + SGP40(TVOC)+ SHT31(温湿度)的组合,构成轻量化的节点,重点关注睡眠环境的空气质量。所有数据通过MQTT协议统一发送到树莓派上运行的Mosquitto Broker,实现集中收集。
注意:多个传感器同时工作时,需注意电源供应稳定性。激光颗粒物传感器和NDIR二氧化碳传感器启动瞬间电流较大,建议使用独立稳压模块或确保电源有足够余量,避免因电压波动导致树莓派或ESP32重启。
3. 从数据到洞察:构建直观的家庭空气“仪表盘”
采集到一堆数字只是第一步,如何让家人(包括不熟悉技术的成员)一眼看懂“空气好不好”,才是可视化的价值所在。我的目标是打造一个简洁、直观、支持多终端访问的仪表盘。
3.1 本地化数据处理与存储
我放弃了完全依赖云服务的方案,主要出于对数据隐私和系统长期稳定性的考虑。所有数据均在本地处理。
- 数据汇聚:如前所述,使用MQTT协议。每个传感器节点发布到如
home/sensor/livingroom/pm25、home/sensor/bedroom/tvoc这样的主题。树莓派上的MQTT Broker接收所有消息。 - 数据持久化:我选用InfluxDB作为时序数据库。它专门为存储时间序列数据(如传感器读数)优化,写入和查询效率极高。通过一个简单的Python脚本(使用
paho-mqtt和influxdb客户端),订阅MQTT主题,将收到的JSON格式数据解析后写入InfluxDB。 - 数据清洗与计算:原始数据可能需要简单处理。例如,PM2.5读数偶尔会有极短暂的尖峰(可能是传感器内部扰动),可以在写入数据库前做一个滑动窗口均值滤波。对于TVOC指数,可以根据Sensirion提供的指南,将原始指数转换为更易懂的“空气质量等级”(如优、良、中、差)。
3.2 可视化仪表盘实现
Grafana是连接InfluxDB和用户的最佳桥梁。它功能强大且颜值高。
- 连接数据源:在Grafana中轻松添加InfluxDB数据源,配置好地址、数据库名即可。
- 设计面板:这是发挥创意的部分。我的仪表盘包含以下几个核心面板:
- 实时数值面板:用Grafana的“Stat”面板,显示当前时刻的PM2.5、CO2、TVOC指数、温湿度。为每个数值设置颜色阈值(如PM2.5:绿色0-35, 黄色35-75, 红色>75),一目了然。
- 历史趋势曲线:用“Time series”面板,展示过去24小时、一周、一个月的参数变化曲线。将PM2.5、CO2、TVOC画在同一坐标系,往往能发现有趣关联:比如做饭时PM2.5和TVOC同步飙升;晚上卧室关门睡觉,CO2曲线稳步上升。
- 空气质量日历热图:用“Heatmap”面板,以天为单位,用颜色深浅表示每天的平均PM2.5或CO2水平,非常适合回顾长期变化,比如观察新风系统滤网更换前后的差异。
- 报警历史列表:展示触发的报警记录。
- 多终端访问:Grafana仪表盘可以通过浏览器在任何手机、平板、电脑上访问。我将树莓派的Grafana界面设置为开机自启动,并配上一块旧的平板电脑挂在墙上,就成了一个永久的家庭空气质量信息中心。
可视化阶段的一个深刻教训是:不要堆砌数据,而要呈现信息。初期我把所有传感器的原始数据都罗列出来,家人根本看不懂。后来,我借鉴了常见的空气质量指数(AQI)计算方式,将PM2.5、CO2、TVOC等多个参数综合计算成一个简单的“家庭空气质量指数”(HAQI),用1-100分表示,并配以表情符号(😊 👍 😷),这样任何人瞄一眼墙上的平板,就能对整体状况有个快速判断。
4. 闭环控制:让好空气“自动”到来
监测和可视化的终极目的,是为了控制。当系统发现空气变差时,应该能自动触发改善措施,形成一个闭环。这需要与现有的智能家居系统联动。
4.1 定义控制策略与联动逻辑
控制逻辑的核心是“如果…就…”(IFTTT)。以下是我家经过实践调整的几个有效策略:
自动通风策略:
- 触发条件:室内CO2浓度 > 800ppm或TVOC指数 > 150(表示有污染释放)。
- 执行动作:如果户外PM2.5 < 35(通过获取公开API或另一个面向户外的传感器),则自动打开智能窗户(或智能开窗器)或启动新风系统(高速模式)。如果户外空气差,则只启动新风系统(低速模式)或空气净化器。
- 停止条件:CO2浓度降至600ppm以下且TVOC指数恢复正常,持续5分钟。
自动净化策略:
- 触发条件:室内PM2.5 > 35μg/m³(例如,从室外渗入或烹饪产生)。
- 执行动作:自动开启空气净化器至高速档。
- 停止条件:PM2.5降至15μg/m³以下,持续10分钟,净化器切换回低速档或关闭。
舒适度调节策略:
- 触发条件:室内湿度 < 40%(冬季干燥)。
- 执行动作:自动开启加湿器。
- 停止条件:湿度 > 50%。
- 特别注意:加湿器必须使用纯净水,并定期清洁,否则会成为细菌和霉菌的扩散源,反而导致TVOC和微生物污染升高。我的策略中会联动温湿度传感器,如果湿度达标但温度过低,防止结露,则不会开启。
4.2 实现自动化的技术选型:Node-RED vs. Home Assistant
实现上述逻辑,有两个强大的工具:Node-RED和Home Assistant。
Node-RED:一个基于流的可视化编程工具,非常适合快速搭建自动化逻辑。你可以用拖拽节点的方式,连接MQTT输入(传感器数据)、判断节点(条件)、功能节点(执行命令)和MQTT输出(控制设备)。它轻量、灵活,与树莓派和MQTT天生契合。
- 我的用法:我在树莓派上运行Node-RED。它订阅所有传感器MQTT主题,经过一系列判断节点后,通过MQTT发布控制指令到如
home/switch/purifier/power这样的主题。智能插座或支持MQTT的空气净化器接收到指令后执行动作。
- 我的用法:我在树莓派上运行Node-RED。它订阅所有传感器MQTT主题,经过一系列判断节点后,通过MQTT发布控制指令到如
Home Assistant (HA):这是一个更完整的家庭自动化平台。它内置了强大的实体(Entity)模型、自动化(Automation)和脚本(Script)编辑器,以及海量的设备集成。如果你家已经有多种不同品牌的智能设备(米家、涂鸦、Apple HomeKit等),HA是统一管理它们的不二之选。
- 我的用法:我将HA作为更上层的管理中枢。InfluxDB中的数据可以通过HA的集成插件同步过来,成为HA中的传感器实体。然后,我使用HA原生的自动化编辑器来编写更复杂的控制逻辑。HA的优势在于其强大的UI和社区支持,家人也可以通过HA的移动端App手动控制设备,而不仅仅是看仪表盘。
在实际项目中,我采用了混合模式:底层的、与硬件强相关的数据采集和简单判断用Node-RED,因为它对MQTT和串口操作非常直接。而上层的、涉及多设备联动和复杂场景(如“离家模式”、“睡眠模式”)的自动化,则交给Home Assistant来管理,利用其丰富的集成和友好的界面。
5. 实战中的“坑”与进阶优化
项目搭建起来并能跑通,只是成功了50%。剩下的50%是在长期使用中不断调试、排错和优化。
5.1 常见问题排查与传感器维护
数据跳变或异常值:
- 现象:PM2.5读数偶尔突然飙到几百然后迅速回落。
- 排查:首先检查传感器周围是否有突发干扰源,如有人喷香水、使用酒精喷雾、强烈气流(如风扇直吹)扬起了灰尘。激光传感器对突然通过的较大颗粒非常敏感。解决方案是在软件端增加数据滤波算法。我采用了一个长度为5的滑动中值滤波,能有效滤除这类瞬态尖峰,而不影响真实的趋势变化。
- 现象:CO2读数长期停留在400ppm不动或缓慢漂移。
- 排查:检查MH-Z19B的ABC校准是否关闭。如果已关闭,可能是传感器故障或供电不稳。尝试用塑料袋套住传感器几分钟,模拟高浓度环境,观察读数是否上升。若无变化,则传感器可能已损坏。
传感器精度衰减与校准:
- 颗粒物传感器:激光窗口积灰是导致读数偏低的常见原因。必须定期(建议每3-6个月)用棉签蘸取少量无水酒精轻轻擦拭传感器进气口和激光窗口。这是维持精度的最关键维护操作。
- TVOC传感器:SGP40等金属氧化物传感器会随时间缓慢漂移。盛思锐的算法已经包含了部分补偿,但长期来看,建议每年进行一次“基线校准”:将传感器置于已知的清洁空气环境(如室外通风良好处)中运行24-48小时,让它自动重新建立基准。
- NDIR CO2传感器:相对稳定,但也要避免长期暴露于极端高浓度环境。定期用室外空气(作为400ppm参考)进行手动校准,可以保持长期准确性。
5.2 系统稳定性与网络依赖
- 本地优先原则:我的核心自动化逻辑(如“CO2高则开窗”)完全在本地(Node-RED或Home Assistant)运行,不依赖外网。这样即使互联网中断,家里的空气管理依然正常工作。仅将数据备份到云端或远程查看仪表盘时才需要网络。
- 电源与看门狗:树莓派或ESP32偶尔会死机。给树莓派配备一个可靠的UPS(不间断电源)至关重要。对于ESP32节点,可以在代码中实现软件看门狗(Watchdog),并在硬件上使用具有断电自启功能的电源模块。
- 数据备份:InfluxDB的数据目录定期备份到NAS或云端对象存储。Grafana的仪表盘配置也导出为JSON文件进行版本管理。
5.3 超越基础:从监测到预测与健康洞察
当系统稳定运行一年以上,积累了足够多的数据后,就可以做一些更有趣的深度分析:
- 模式识别与预测:利用历史数据,训练简单的模型(甚至可以用HA的“趋势”传感器或一些统计方法),预测空气质量变化。例如,发现每周六上午10点-12点,由于烹饪,TVOC和PM2.5会规律性升高,系统可以提前10分钟自动开启油烟机和空气净化器。
- 健康关联分析:将空气质量数据与家人的主观感受(如睡眠质量评分、过敏症状记录)进行关联分析。你可能会发现,当夜间卧室CO2峰值低于某个阈值时,第二天自我报告的睡眠质量分数普遍更高。这种数据驱动的洞察,能让空气质量管理从“环境参数优化”升级到“健康效果优化”。
- 能效优化:分析新风系统、空气净化器的运行时长与空气质量改善效率的关系,在保证空气质量的前提下,优化设备运行策略,达到节能的目的。例如,在室外PM2.5中等但室内污染源少的时候,是否可以减少新风换气频率?
构建这样一个系统,从无到有,是一个充满乐趣和挑战的过程。它教会我的不仅是技术栈的拼接,更是如何以数据为尺,去理解和改善我们最熟悉的生活环境。最让我有成就感的时刻,不是代码成功运行的那一刻,而是家人不经意地说:“最近好像没那么容易犯困了”,或者孩子说“爸爸,今天家里的空气是笑脸(指HAQI表情)”。技术最终服务于人,让生活变得更好一点,更健康一点,这或许就是DIY智能家居最大的意义。如果你正准备开始,我的建议是:从一两个你最关心的参数(比如CO2和PM2.5)和一个房间开始,搭建最小可行系统,先让它跑起来,感受数据带来的变化,再逐步扩展和完善。过程中遇到的每一个坑,都是通往更稳定、更智能系统的必经之路。