基于人工智能传感器的烟雾检测系统DIY教程
这个项目是一个DIY补充方案,并非要取代经过认证的商用烟雾探测器。它更像是一套辅助传感系统,通过传感器融合技术来提升烟雾检测的准确性并减少恼人的误报。 背景 先聊聊背景。烟雾探测器确实是家庭安全的“功臣”。数据很能说明问题:从1982年到2012年,法国的火灾受害者人数下降了超过48%;同期英国的数
这个项目是一个DIY补充方案,并非要取代经过认证的商用烟雾探测器。它更像是一套辅助传感系统,通过传感器融合技术来提升烟雾检测的准确性并减少恼人的误报。
背景
先聊聊背景。烟雾探测器确实是家庭安全的“功臣”。数据很能说明问题:从1982年到2012年,法国的火灾受害者人数下降了超过48%;同期英国的数据更是下降了56%以上。这些巨大的进步,很大程度上要归功于消防安全法规的完善和烟雾探测器的普及。在美国,96%的家庭都装了烟雾报警器,但其中大约20%的报警器实际上是“摆设”——要么没电,要么坏了。研究估计,如果每个家庭都有一台能正常工作的烟雾报警器,美国的住宅火灾死亡人数可能再下降36%,相当于每年能挽救近1100条生命。
不过,随着烟雾探测器越来越普及,误报问题也跟着来了。消防员被频繁派去处理假火警,这几乎成了全球性的头疼事。
介绍
这个项目正是针对这个痛点:设计一个基于人工智能传感器融合的烟雾探测器,让它在“真着火”和“搞错了”之间做出更聪明的判断。系统的核心是Arduino Pro Nicla Sense ME这块开发板。出于安全考虑,大多数传感器都做了冗余设计——就算其中一个“掉链子”,系统也能照常工作。
项目主要瞄准了四个目标:
- 利用AI传感器融合,大幅减少误报
- 能检测到传感器自身出错或故障
- 所有计算和AI推理,全部在Arduino板上本地完成
- 通过蓝牙发送火警信号
工作原理
传统的烟雾探测器,玩的无非是两种把戏。
光电式

光电式烟雾探测器,靠的是光学传感器和一条光路。简单来说,一旦有烟雾从通风口进入设备内部的光学室,就会撞上光路,导致光线发生散射。这些散射光会被光电二极管捕捉到,产生一个电信号,警报就这么响了。
电离式

电离式探测器则用到了两个电极和一个电池。平时电路是断开的,因为电极之间只有空气。但如果空气被一种叫做镅-241(放射性物质)电离后,电路就导通了,因为电离的空气能导电。一旦有火灾烟雾进来,它会扰乱电离过程,电路断开,警报随之响起。
误报的“罪魁祸首”
这两种工作原理,都扛不住以下这些“假警报制造者”:
- 烧糊了的饭菜
- 水蒸气或高湿度
- 小虫子钻进去了
- 灰尘堆积太久
- 附近有浓烈的化学品气味
所有这些外部干扰,都可能让探测器误以为“着火了”。
项目概览
接下来聊聊项目用到的硬件、数据收集,以及AI模型从训练到推理的全过程。
硬件选型
这台探测器的主要“侦察兵”是Sensirion SPS30——一种颗粒物传感器。它和光电式烟雾探测器工作原理类似,但更高级:能直接测量空气中的气溶胶浓度,返回颗粒物的数量和大小。具体来说,它输出的是特殊物质浓度(PM1.0 / PM2.5)和数字浓度(NC 0.5 / NC1.0 / NC2.5)。在SPS30周围,又部署了各种传感器来测量颗粒物所处的环境“元数据”,便于对环境进行分类。为了让系统更可靠,大部分传感器都做了冗余。
冗余传感器配置
湿度/温度:BME688 和 SHT31
气压:BMP390 和 BMP388
气体(VOC):SPG30 和 BME688
值得一提的是,SPG30和BME688这两个气体传感器,因为内部测量方法和校准标准不同,读数不可能100%一致。所以在实现中,采用了计算出的VOC值,然后检查两者读数的差异是否超过10%。如果超过,说明可能有问题。
而SPS30这个“烟雾传感器”没有冗余备份,它的读数必须是唯一的。一旦它出问题,系统就必须报“传感器错误”。

完整传感器清单:
主板上自带的(Arduino Nicla Sense ME):
- 博世 BHI260AP:6轴IMU(3轴加速度计+3轴陀螺仪)+ MCU
- 博世 BMP390:压力传感器
- 博世 BMM150:磁力计
- 博世 BME688:湿度、温度和气体传感器(VOC)
外接传感器:
- 博世 BMP388:压力传感器
- Sensirion SPS30:特殊物质传感器(烟雾探测器)
- Sensirion SHT31:湿度和温度传感器
- Sensirion SPG30:气体传感器(VOC)
- GPS:用于给传感器读数做时间同步

传感器融合
“传感器融合”听起来很高大上,其实定义很简单:它是将不同来源的传感器数据结合起来的过程,目的就是让最终得到的信息比单独使用任何单一来源更精确、更可靠。
放到这个项目背景下,就是用不同传感器获取的多种环境信息,来提升火灾检测的效果。实现传感器融合的算法有好几种:
- (非)线性函数,比如 x² + y
- 阈值判断,比如 if (x > 10)
- 线性回归,这基本上就是AI模型的做法
对于这个问题,线性回归的方法最合适。因为最终的判断依赖于大量不同关联性的传感器读数,这些复杂的模式光靠人眼是看不出来的。
数据采集
为这个系统收集训练数据,可没想象的那么容易。必须对各种各样不同的环境和火源进行采样,才能确保训练出来的数据集有代表性。这里列出了部分采集的场景:
- 普通室内环境
- 普通户外环境
- 室内木材燃烧(在消防员训练区)
- 室内燃气火灾(同样在训练区)
- 户外木材、煤炭和燃气烧烤炉
- 户外高湿度环境
整个数据集收集了近60000个读数,所有传感器的采样率都是1Hz。为了跟踪数据,每个传感器读数都加了一个UTC时间戳。
数据示例:


数据集详情
数据以CSV格式保存,默认的标题行如下:
CSV数据标题
Temperature[C], Humidity[%], TVOC[ppb], eCO2[ppm], Raw H2, Raw Ethanol, Pressure[hPa], PM1.0, PM2.5, Fire Alarm, CNT, UTC, NC0.5, NC1.0, NC2.5
字段的含义:
- 气温
- 空气湿度
- TVOC:总挥发性有机化合物,单位是十亿分之一(ppb)
- eCO2:二氧化碳当量浓度,根据TVOC等值计算得出
- Raw H2:原始分子氢读数,未经过(偏置、温度等)补偿
- Raw Ethanol:原始乙醇气体读数
- 空气压力
- PM1.0 和 PM2.5:粒径小于1.0 µm(PM1.0)和介于1.0 µm到2.5 µm(PM2.5)的颗粒物浓度
- Fire Alarm:是否发生火灾,1代表有火警
- CNT:样本计数器
- UTC:以秒为单位的UTC时间戳
- NC0.5 / NC1.0 / NC2.5:颗粒物的数量浓度,这区别于PM质量浓度。它给出的是空气中颗粒的实际数量,并按粒径分类:< 0.5 µm(NC0.5);0.5 µm ≤ < 1.0 µm(NC1.0);1.0 µm ≤ < 2.5 µm(NC2.5)
几行实际数据是这样的:
20.75,30.27,0,400,13434,19806,931.138,1.92,2.47,0,0,0,1654463338,12.04,2.633,0.508
20.66,30.42,0,400,13452,19840,931.135,1.91,2.43,0,0,1,1654463339,11.98,2.585,0.485
...
完整数据集包含超过50000个样本。
训练
面对一个复杂的传感器融合问题,选择了Neuton平台来训练模型,它可以在微控制器上免费运行。要训练自己的数据集,需要一个Google账号并激活Neuton的零重力计划。
训练过程相当直接:选一个CSV文件,上传到Neuton平台就行。

在“我的解决方案”选项卡里设置新训练,按说明操作。预加载的数据集可以在“从存储中选择数据集”里找到。

选好数据集后,Neuton会分析数据,检查是否适合训练。接着会弹出一个新对话框,让你选择模型要预测的目标变量。对于这个项目,目标变量当然是“Fire Alarm”。
在数据集中加了一个计数器变量,目的是检查是否有数据丢失。但这个计数器对训练模型没帮助,应用本身也用不上它,所以在训练时禁用了“cnt”变量。这个功能很方便,让你能保持流程干净,只关注真正需要的输入。
本项目使用的数据集没有拆分成训练集和验证集,所以禁用了“Holdout Validation”。

下一步是详细配置训练参数和模型配置,Neuton提供了很多选项来适配不同的应用场景。

首先,选择数据类型,这里选的是Float 32 bit。同时激活TinyML,因为模型要在Arduino板上运行。优化目标选择“准确度”,毕竟火警预测,能多准就得多准。对于这类问题,“精度”也是一个可选的指标。

第二部分是关于如何生成输入数据向量。大多数系统使用固定的采样率,这个速率决定了新数据多久“喂”一次模型。项目用的是1Hz的固定采样率,意味着每秒都有新的传感器值进来并输入模型,所以不需要额外的数字信号处理。

最后一步是设置模型。Arduino Pro Nicla Sense ME的MCU是带浮点运算扩展的32位MCU,所以模型可以设置为32位浮点数。
设置完毕后,启动项目,让Neuton帮我们构建模型就行。
参数详情
训练过程中,Neuton会实时更新模型详情和重要参数。这次火灾探测模型的训练大概花了四到五个小时,所以使用了Neuton的SMS服务,训练完成时会收到信息通知。训练完成后,就可以详细探索模型的表现了,这对于了解模型性能、更好地理解最终结果非常有帮助。

模型概览展示了运行模型所需的性能和RAM/Flash消耗。左侧的雷达图显示了不同指标。这里“准确性”被突出显示,因为我们选它作为优化目标。但这个图也展示了其他所有指标,对了解模型是否全面正常工作很有用。这个案例中,模型在“Lift”指标上有一个缺口。“Lift”度量的是单个模型预测与数据集中具有相同输出的所有预测之间的比率,这可能与数据集不平衡有关,后面会提到。自动生成的C库可以直接下载。RAM/Flash占用信息能帮你精确确定系统需求。

Neuton还能让你深入洞察模型和数据集,了解预测的机制。训练后,可以在“探索性数据分析”部分找到这些信息。下面只展示了部分有趣的内容,你可以自己拿数据集做实验。

下面列出了三个最重要的图。
- 数据集概览:数据集的详细视图。
- 目标变量分布:数据集是不平衡的。理想情况下,所有目标状态(着火/非着火)应该是50%对50%。
- 相关热力图:展示了不同输入值之间的相关性。比如,空气湿度与目标“Fire Alarm”的相关性最高,而eCO2值的相关性最低。简单来说,湿度的变化对判断火警很重要,而eCO2气体的变化相对不那么重要。
这些信息都有助于理解数据是如何影响模型输出和预测性能的。用Neuton能轻松获得结构化且有用的数据概览。
模型定制
考虑到烟雾探测器是靠电池供电的,所以很有必要考虑如何在保持高精度的同时,降低模型的计算时间和复杂度。这个过程往往需要在多个要求之间做权衡。Neuton允许训练不同位深度和设置的模型。为了比较不同设置的效果,用三种不同的配置分别训练了模型:
- 32位浮点数
- 16位定点数
- 8位定点数

比较三个模型的准确率,从0.996113(32位浮点)下降到0.989032(8位固定),准确率只下降了0.7%。但8位模型显著降低了Flash内存消耗,并且在8位MCU架构上会有更好的性能。
模型定制第2部分:特征消除
对于这款烟雾探测器,最终选择了8位模型,因为能减少功耗和计算时间,从而延长电池寿命。下一步是精简模型的输入值。

上图可以在Neuton的“探索性数据分析”部分找到,显示了最相关的特征值。PM1.0和NC0.5值高度相关,这与SPS30传感器的测量原理有关:PM1.0值实际上是根据SPS30内部的NC0.5值计算出来的。所以Neuton相当于给了我们一个提示,让我们注意到这些冗余信息。为了进一步优化,决定从模型输入中删除PM1.0值和eCO2,因为这些信息要么是冗余的,要么是对预测没太大帮助。这样应该有助于改善模型大小和内存使用。

经过定制(减少输入向量)后的32位和8位模型,在准确性和内存使用上,竟然都优于原始的32位模型。


特征重要性矩阵详细描述了每个特征与模型输出之间的关联。根据这个结果,在最终应用中可能还会从前10个最重要的特征里再删掉一些。


最终的模型在Arduino Nicla Sense ME上只需要101字节的RAM和958字节的闪存,推理时间大约是360微秒。
Arduino编程
Neuton社区发展很快,现在有很多针对Arduino的推理示例。在编程实现时,直接使用了官方repo中的Arduino示例来进行模型推理。
添加蓝牙功能
Arduino Pro Nicla Sense ME可以通过蓝牙向任何设备发送消息,而用Arduino编程实现蓝牙功能也相当简单。测试时,使用了BlueSee(MacOS X下的一个工具)通过蓝牙读取Arduino发出的值。
核心功能围绕一个BLE服务“fff0”构建,该服务有一个特性,每次模型生成新输出时都会更新。新值会广播到每个已连接的蓝牙设备。这是一种通过蓝牙发送通知和状态事件的常用方法。

用BlueSee连接上BLE设备后,就能读取当前的服务信息。第一步连接设备,第二步读取“Service”数据。

读取“火警”服务,载荷大小为32位,但只使用了最高有效位(MSB)。如果发生“火警”,MSB被置为1并发送信息。


在测试BLE服务时,遇到一个问题:由于系统高功率负载,出现了很多传感器读取错误。一个简单的解决方案是升级配电系统。
未来可能的工作
Arduino Pro Nicla Sense ME使用了一颗传感器融合芯片来控制传感器读数,这意味着神经网络实际上可以直接部署在博世BHI260AP芯片上。BHI260AP内置的CPU完全有能力运行自定义代码。这样一来,主CPU就能完全解放出来执行主应用程序代码,从而显著降低功耗,延长电池寿命。
结论
这个项目充分说明,传感器融合确实是解决复杂问题的好方法——只需要在核心传感器之外,加上一些额外的“元数据”。向“烟雾传感器”补充环境元数据,确实有助于减少误报。这种低成本的传感器系统,经过适当训练后,甚至可以检测到那些可能导致人昏厥的有毒火灾气体,从而挽救生命。而且,构建这种微型神经网络的过程可以如此简单、近乎自动化,这一点真的非常实用。
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:基于人工智能传感器的烟雾检测系统DIY教程要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点度加剪辑是百度官方出品的剪辑工具,面向口播自媒体创作者。支持视频剪辑、智能识别字幕,并与百度网盘打通,可快速导入素材。适用于泛知识类创作者制作高质量视频,覆盖从素材导入到成品输出的完整流程。
WorkoutMaster是一款基于AI的个性化锻炼计划生成工具,能根据用户目标、偏好及历史训练记录,动态输出专属方案,并实时自适应调整负重、组次等参数。支持定制目标与器械偏好,借助机器学习持续优化,随时随地即可接入使用,确保训练高效安全。
Calorielens是一款利用AI分析餐食照片的卡路里追踪应用。用户只需拍照,AI即可自动识别食物种类和分量并估算卡路里,省去手动输入步骤。应用还提供历史记录追踪功能,帮助把握热量趋势。AI估算精度可满足日常健康管理需求。
百度旗下“简单搜索”AI搜索引擎集成语音、图像、多媒体搜索及实时翻译,支持多模态交互与智能推荐。基于大模型技术,用户可通过对话式交互直接获取精准答案,适用于学习、旅行、生活、职业发展等场景,高效满足信息需求。
- 日榜
- 周榜
- 月榜
热点快看
