做燃气安全这一行的朋友应该都有感触,燃气泄漏这事最怕的不是设备贵不贵,而是出了问题没人知道。后来我落地了一套基于LoRaWAN技术的燃气泄漏检测系统,把这个痛点解决得比较彻底。传统的独立式燃气报警器,装上去之后基本就是个摆设——人不在屋里,它响了也就是自己响,等邻居听见或者路过闻到味道的时候,事儿往往已经大了。
LoRaWAN这个技术的核心价值很简单:低功耗、远距离、自组网。你不需要给每个设备配SIM卡,不需要依赖家里的WiFi,一个网关能覆盖整栋楼甚至整个小区,传感器节点用电池就能跑一两年。这套系统最适合的场景就是老旧小区、出租房、商业餐饮后厨这些不方便重新布线、也没有稳定WiFi的地方。
这篇文章我会从方案选型、硬件设计、云端平台、现场部署四个维度,把这套系统的完整实现过程整理出来。想搞LoRaWAN应用开发的朋友,或者正在做智慧燃气、安全监测类项目的同行,可以参考一下。
1. 为什么燃气泄漏检测偏偏选LoRaWAN
1.1 传统报警方案到底哪里不够用
早几年我做过的燃气报警项目,基本就三种路子:独立式声光报警、总线制有线报警、还有蜂窝网络报警。独立式最便宜,网上几十块一个,但问题也很明显——它只能现场报警,家里没人或者住户睡着了,压根听不见。我遇到过一个小餐饮店的案例,报警器半夜响了,后厨没人,等早上开门才发现,虽然运气好没出事,但店主吓得不行。总线制有线报警稳定是稳定,施工成本高得吓人,老房子要开槽布线,一套下来人工比设备还贵,而且一旦线路老化断掉,后边维护就是无底洞。
蜂窝网络方案(比如4G模块)倒是解决了远程告警,但是麻烦也一堆:每个设备要插SIM卡、要交流量费,功耗还高,4G模块待机电流动辄十几毫安,用电池根本扛不住。更麻烦的是群租房、地下空间这些地方,蜂窝信号经常只有一两格,关键时刻消息发不出去。至于WiFi方案,穿墙能力弱不说,配网流程复杂,对老人租户极不友好,而且功耗也不低——实测WiFi模块在连网状态下平均电流60mA以上,碱性电池几天就耗干了。
1.2 LoRaWAN的核心能力拆解
LoRaWAN能解决上面这些痛点,靠的是三件事:扩频调制带来的灵敏度优势、星型组网的低复杂度、以及极致的低功耗设计。
先说灵敏度。LoRa用的是扩频调制技术,整个系统可以把接收灵敏度做到-137dBm甚至更低,比传统FSK调制强了大概20dB。这意味着什么?举个直观点的例子,在密集城区,一个室外网关覆盖半径能到1到3公里,在郊区开阔地带可以到5到15公里。我实际在城中村项目里测过,网关装在社区服务中心楼顶,最远的一个节点在一公里外的出租屋厨房内,隔着两堵墙,RSSI还有-112dBm,稳定跑通了。
再说功耗。这是LoRaWAN最吸引人的一点。终端节点大部分时间处于休眠状态,只有上报时才瞬间醒来,发送一包十几字节的数据,电流也就100多毫安、持续不到一秒钟。加上传感器间歇供电设计,我实测这套系统的平均功耗在30uA左右,用两节18650锂电池并联供电,跑一年半完全没问题。
还有一点很重要:LoRaWAN是自组网,有自己的网关和网络服务器,数据完全掌握在自己手里,不依赖运营商。对于燃气这种涉及公共安全的数据,这一点很关键。而且一个8通道网关接入几千个节点没问题,后续要扩展门锁、烟感、水浸这些终端,一套网络全解决了——最近我在看LoRaWAN智能门锁的方案,打算下一期把门禁也并进来,走同一个网关,管理成本几乎为零。
2. 系统整体架构与核心方案选型
2.1 端、管、云三层怎么分工
这套系统的架构我按物联网常见的三段式来拆,分别是感知层、网络层和应用层。刚开始做的人容易把精力全放在硬件上,其实到后面你会发现,每一层都会成为瓶颈。
感知层就是终端节点,核心三件套:燃气传感器、主控MCU、LoRaWAN模组。燃气传感器负责把气体浓度变成电信号,MCU负责采集、判断、封装数据,LoRaWAN模组负责把数据发出去。这一层最关键的设计是低功耗和传感器信号处理,后面我会详细展开。
网络层由LoRaWAN网关和网络服务器组成。网关的作用是把空中的LoRa射频信号转成网络数据包,通过以太网或者4G回传链路送到网络服务器。网络服务器负责终端设备的入网认证、数据上下行转发、速率调整(ADR)这些事。软件这边我用的是ChirpStack,开源、社区活跃、配置简单,部署一台普通服务器就够用。
应用层就是真正跟用户打交道的地方:数据解析服务、数据库、告警规则引擎、推送服务、Web管理后台。我这边是把ChirpStack的MQTT数据接入到自己的后端服务里,解析帧数据后写进时序数据库,同时跑告警判定逻辑,触发后通过微信模板消息和短信推送出去。电磁阀的联动指令也在这层下发。
2.2 燃气传感器选型:别只看价格
传感器是整个系统里最关键的零件,也是最容易翻车的地方。燃气报警做不好,九成是传感器选型或者调校出了问题。市面上常见的几类传感器我逐个说:
半导体式传感器,典型代表就是MQ-2、MQ-5、MQ-4这些。原理是气体吸附在金属氧化物半导体表面后,改变其电导率。优点:便宜、灵敏度高、对甲烷、丙烷、液化气都有响应。缺点也明显:功耗高——内置加热丝,MQ-5的加热电流到180mA;抗干扰能力差,酒精、油烟、潮湿天气都容易触发误报;长期漂移比较严重。这类传感器适合对成本极度敏感的场合,但用在无人值守的自动关阀场景,我建议谨慎。
催化燃烧式传感器,这对甲烷检测来说是老牌主力,利用催化载体上可燃气体无焰燃烧导致铂丝电阻变化的原理。优点:输出线性度好、定量检测能力强,适合做LEL(爆炸下限)浓度测量;缺点:功耗同样不低,需要加热;怕中毒——硅烷、硫化物会让催化剂失效,寿命一般在2到3年。天然气项目里,如果预算允许,我优先选这种。
电化学式和红外式(NDIR)在民用燃气检测里相对少见。电化学适合测CO,不测甲烷;红外式精度高、寿命长、抗中毒,但价格是催化燃烧式的3到5倍,一般用在高价值工业项目里。
我最终在民用项目里用的是低功耗设计后的半导体式传感器,搭配周期性校准策略。简单说:传感器平时断电不加热,上电后预留90秒预热窗口再读数,配合温湿度补偿算法和报警回差逻辑,在精度和功耗之间找平衡。如果做工业项目,建议直接上催化燃烧式,安全等级更高。
2.3 频段、模组和网关选型参考
LoRaWAN在不同的地区用不同的频段。中国是CN470,频段范围470-510MHz;欧洲是EU868,美国是US915。国内买设备,一定要认准CN470版本,这个最容易买错。我一开始图便宜买过一款欧版模组,拿回来自组网怎么都连不上,后来查了规格书才发现是868MHz的,只能退了换。
模组方面,主流方案是Semtech的SX1262或者SX1276芯片。SX1262是后出的,灵敏度更高、功耗更低、还支持SF5到SF12全部扩频因子;SX1276老当益壮,资料多、成本低。市面上成熟模组像RAK、Ebyte(亿佰特)这些都有现成的型号,自带AT指令集,通过串口跟MCU通信就行,开发效率很高。
网关选型我建议直接上8通道室外网关,支持CN470全频段,实测覆盖能力比单通道网关强太多。单通道网关便宜,但一次只能在一个频点收一个节点,调试可以,真正跑业务扛不住。像RAK7289、Milesight UG65这种网关,带以太网回传,配置好后基本上就不用管了。价格在两千到四千之间,一个网关能覆盖一个中型小区,摊到每个节点上其实很划算。
3. 核心硬件设计与低功耗实操要点
3.1 传感器采集电路设计
先讲传感器电路。以半导体式传感器为例(比如MQ-5),电路结构其实不复杂:传感器有6个引脚,其中两个是加热极,接加热电压;另外两个构成检测极,与负载电阻分压后给MCU的ADC采样。加热电压通常用5V供电,但普通GPIO带不动加热丝,必须用MOS管做电源开关,控制传感器什么时候加电、什么时候断电,这是低功耗设计的关键点。
采样电路上,负载电阻的取值会影响灵敏度和线性度。MQ-5的手册里通常会给一个参考回路,负载电阻在5kΩ到20kΩ之间调。我是先用标准气体标定,再根据实测的ADC范围反推电阻值,避免一上来直接用手册推荐值导致取样电压落在量程边缘。要注意,ADC采集前最好加一级RC低通滤波,比如10kΩ电阻加1uF电容,截止频率大约16Hz,能滤掉传感器输出上的高频毛刺。
还有一个很实际的问题:传感器的加热丝冷态电阻很小,上电瞬间冲击电流很大。实测MQ-5冷启动瞬间电流能到900mA,虽然只有几十毫秒,但足以让电池电压瞬间跌落。解决方法是加一个软启动电阻或者在代码里做PWM渐开,不然用久了会发现电池本来还有电,却被过流保护电路给切断了。
3.2 电池供电和功耗预算怎么算
设计电池供电系统,最重要的一件事是先做功耗预算。我习惯先列出节点的工作状态及时间占比,然后算平均电流。这套燃气节点大概有四个状态:休眠、预热、采样计算、发送。休眠电流实测是5uA;预热90秒期间传感器加热加MCU运行,电流约180mA;采样计算大概10秒,电流15mA;LoRa发送一包数据,瞬间电流120mA,时长大约250ms(SF7速率下)。
把一天的工作周期放进去:正常每15分钟上报一次,加上每次上报前做一次预热采样,那么一天有96个周期。预热总时长96×90秒=8640秒,发送总时长96×0.25秒=24秒,采样计算96×10秒=960秒,其余时间都在休眠。用毫安时来算,一天的耗电量大约是:预热180mA×8640秒/3600=432mAh,发送120mA×24秒/3600=0.8mAh,采样15mA×960秒/3600=4mAh,休眠5uA×(86400-9600)秒/3600约0.1mAh。一天加起来接近437mAh。
等一下,这样算完会发现一个大问题:预热占了绝大部分电量!所以我后来改了策略——不采用每次上报都预热传感器,而是只在数据变化异常时才快速预热,平时传感器一直处于保温状态,用低占空比的PWM维持加热温度。这个改动能把预热等效电流降下来,日均功耗从四百多毫安时降到二十毫安时左右。再做一次标定流程后,用两节18650并联(约5000mAh),理论续航200多天。如果还想更长,换成一次性锂电池组,跑两年问题不大。
上面这个计算过程我想说明的是:低功耗设计不是简单地把MCU调到休眠模式就完了,真正的功耗大头往往在传感器和外设上,一定要抓主要矛盾。很多人做出来节点续航不行,查代码发现LoRa发送逻辑调得很完美,但实际上传感器加热才是电老虎,这就是没做通盘预算的后果。
3.3 数据上报策略与协议设计
在LoRaWAN里,数据是无线资源,上报策略直接影响容量和功耗。我这套系统的策略是这样:正常情况下节点每15分钟上报一次状态帧,包含燃气浓度值、温度、湿度、电池电压、信号质量。浓度超过预警阈值时,立即上报一次,然后切换为每30秒连续上报3次,确认没有持续泄漏后恢复到15分钟周期。这样既能快速感知风险,又不会因为频繁发送拖垮网络和电池。
数据帧格式建议自定义,尽量精简。我用的是12字节的payload:第0字节是帧类型,第1到4字节是燃气浓度,格式为无符号16位整数加缩放因子,比如实际浓度=原始值×0.01%LEL;第5到7字节分别是温度、湿度和电池电压;第8字节是状态位,各位含义通过位掩码定义;后面留几个字节做扩展。用自定义协议而不是Cayenne LPP,是因为内置字段总有浪费,数据包越短,占用空中时间越少,功耗也越低,还能提高网关容量。
需要强调的是,报警帧和周期帧用同一套payload格式,但帧类型字段不同,应用服务器解析的时候优先处理报警帧。这样可以避免云端逻辑里对业务帧做额外分支判断,调试时也更直观。
4. 云端平台与告警联动实现
4.1 设备入网与数据链路搭建
LoRaWAN终端入网有OTAA和ABP两种方式。我强烈建议用OTAA,虽然初始化流程比ABP复杂一点,但安全性高多了——ABP的会话密钥是写死的,万一泄露,别人可以直接伪造节点发送数据。OTAA每次入网都会动态协商密钥,设备断电重启后也能重新入网,不会出现ABP那种因为JoinNonce计数不一致导致的会话失步。
在ChirpStack这边,配置流程大致是:先创建Organization并新建一个应用(Application),然后在应用下注册设备,填上DevEUI、AppEUI和AppKey,选择对应的Device Profile。这里要特别注意:Device Profile里的LoRaWAN版本、区域参数、ADR开关这些设置,必须和你模组的实际配置一致,否则节点即使能发出数据,服务器也可能解析不了。
数据链路搭好后,ChirpStack会把上行数据通过MQTT转发出来。它的MQTT主题规则大概是:application/{app_id}/device/{dev_eui}/event/up。我的后端服务订阅这个主题,收到JSON格式的消息后,先提取data字段,这是Base64编码的原始payload,解码后按预先定义好的帧格式解析。下行指令则是发布到application/{app_id}/device/{dev_eui}/command/down这个主题。整个过程用MQTT做解耦,以后不管挂多少应用,后端只需要多订阅几个主题就行。
4.2 告警阈值设定与防误报逻辑
燃气报警的阈值设定,不能拍脑袋。天然气的爆炸下限LEL是5%体积浓度,行业标准一般把报警点设在10%LEL到25%LEL之间,也就是体积浓度0.5%到1.25%的区间。民用户内报警器我设置在10%LEL触发预警,到达20%LEL触发联动关阀和推送告警。这套系统在实验室里用标准气体测试过,10%LEL的报警响应时间大约45秒,符合行业要求。
不过光设置阈值远远不够,误报才是最让人头疼的。半导体式传感器有个毛病:酒精、烹调油烟、烹饪时的高温高湿都可能引起读数波动。我踩过坑之后总结了几条防误报策略:
第一,加温湿度补偿。传感器读数跟温湿度强相关,我会在同一位点放置SHT30温湿度传感器,然后用标定数据建立浓度修正表,把不同温湿度下的读数归一化。
第二,报警回差。浓度超过阈值后,不是马上报警,而是连续2个周期都超过阈值才触发;恢复正常也要持续2个周期低于回差值才解除。这个去抖逻辑能过滤掉大部分瞬时波动引起的误报。
第三,信号质量校验。如果当前RSSI低于-120dBm,意味着数据可能不完整,在应用层打一个标记,不参与告警判定,避免链路质量差导致误报或者漏报。
4.3 自动关阀和分级告警联动
这套系统最实用的一部分,是告警后的联动动作。很多人以为燃气报警系统就是收到推送提醒,其实真正能降低事故损失的,是自动切断气源。燃气报警联动电磁阀有两种方式:一种是本地联动——传感器节点直接通过继电器控制电磁阀;另一种是云端联动——应用服务器下发下行指令,通过网关把控制命令送到节点,由节点驱动继电器关阀。
考虑到燃气公司后期维护的便利性,我两种都用上了。正常优先级推荐云端联动,因为日志完整、可以追溯到人;但断网场景下云端联动不可用,本地联动作为兜底必须留着。在硬件上,我预留了一个驱动接口,通过一个5V继电器控制燃气管道上串联的常开型电磁阀。注意,一定要选择断电自动关闭的常开型电磁阀,也就是失电关阀,这样即使系统断电,阀门也会自动关闭,安全性更高。
告警推送我做成三级:一级是预警,只推微信模板消息,提醒住户留意;二级是报警,同时推微信、短信,并且触发自动关阀;三级是紧急报警,在前两者基础上,把告警信息推送给社区的物业或者燃气公司值守人员。分级的好处是,不会因为日常误报让用户产生“狼来了”的心理疲劳,真出问题的时候大家才会重视。
5. 现场部署踩坑实录与排查速查表
5.1 信号覆盖调试经验
设备部署最大的变数不是网络,不是服务器,而是现场环境。我这边第一次部署的时候,网关放在社区办公楼顶层,最开始以为覆盖整个小区绰绰有余,结果一测试,靠近小区边缘的几栋楼信号很差,尤其是低楼层住户,RSSI跌到-125dBm以下,上报成功率不到八成。
排查下来原因是:低楼层住户的厨房在楼体内部,旁边是电梯井和楼梯间,钢筋混凝土结构对470MHz信号的衰减非常明显,隔一道承重墙就能损失15到20dB。解决方法是重新调整网关位置,从楼顶移到小区中心位置的一栋六层楼顶,同时把天线换成增益6dBi的玻璃钢全向天线,并且尽量把天线固定在高于周围建筑的位置。调整之后,边缘节点的RSSI从-125dBm提升到-108dBm,上报成功率恢复到99%以上。
另一个容易被忽视的是,LoRaWAN网关虽然覆盖范围大,但室内复杂环境不是单纯靠加大功率能解决的,调整天线位置往往比增加网关数量更有效。我在测试阶段用的方法是,拿着手持终端在现场蹲点测,每个部署点测三组数据——静态位置、柜门关闭状态、以及厨房常用操作时的人体遮挡状态,看最差情况能不能兜住。
5.2 误报和漏报的实际案例
误报案例我印象最深的是一个住户家,装了系统之后一周内连续误报三次,排查发现全发生在中午和傍晚做饭时段。用串口看了传感器的原始读数,发现浓度值并没有真实上升,但温度从27℃波动到45℃。原因很直接,传感器安装在燃气灶正上方的吊顶下,炒菜的蒸汽和热量直接冲上去。后来把传感器移到离燃气灶两米外的侧墙上,高度在距地面1.5米左右,问题立刻解决。
漏报的案例更要警惕。有一户是餐馆后厨,用了半年后传感器读数明显偏低,用标准气袋测试,响应时间从正常的30秒拉长到两分钟。拆下来检查发现,探头表面覆盖了一层油污,传感器内部的催化层已经部分失效。这个是传感头中毒加污染双重问题。处理办法分两步:硬件上给传感器加装防油过滤器,外壳上留换气孔;软件上增加自检逻辑——每周自动做一次零点漂移测试,读数偏差超过设定值就上报“传感器异常”状态,提醒维护人员上门更换。
5.3 电池续航实测与冬季问题
续航这块我实测做了记录。夏季环境温度25℃左右,两节18650锂电池(标称5000mAh)供电的节点,从充满到低压报警,实际运行了230天,比理论估算的200多天还长一些。主要原因是实际报警次数少,报警模式下传感器连续预热时间占比低。但是冬天问题就来了:锂电池在低温环境下放电性能衰减严重,0℃时容量大概只剩常温的70%,-10℃更严重。
对于北方项目,我把供电方案改成了两节D型一次性锂亚电池,工作温度能到-40℃,而且自放电率极低,非常适合这种低功耗长期监测场景。代价是瞬时放电能力不如锂离子电池,所以我在电源电路里加了一个470uF的储能电容,发送瞬间由电容提供尖峰电流,实测峰值电流120mA时电压跌落控制在0.3V以内,完全满足模组工作要求。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 节点一直不上线 | 频段配置不对(如欧版模组并入CN470网络) | 用AT指令读模组频段参数 | 更换CN470版本模组,必要时升级固件 |
| RSSI时好时坏 | 天线接口松动或天线方向不对 | 检查SMA接头,重新拧紧并固定 | 换用高质量馈线,天线垂直固定 |
| 上报成功率低 | 网关配置的频点和终端的上报频点不一致 | 查看网关日志,确认节点实际使用的信道 | 统一规划频点,开启ADR自动调整 |
| 报警推送延迟大 | MQTT服务或推送通道异常 | 检查后端服务日志、推送接口耗时 | 优化推送通道,接入缓存消息队列 |
| 传感器读数长期偏低 | 传感器中毒或表面污染 | 做标准气体测试对比 | 加防油过滤器,定期校准,必要时更换模组 |
| 电池续航明显缩短 | 预热时间过长或报警次数过多 | 读取电池电压和状态帧里的上报计数 | 优化预热策略,降低非必要上报频率 |
| 电磁阀未动作 | 继电器触点烧蚀或电磁阀线圈供电不足 | 用万用表测继电器输出和电磁阀线圈电压 | 更换大电流继电器,单独供电电磁阀 |
这张表是我在这几个项目里反复趟出来的,基本上覆盖了最常遇到的几类问题。建议在现场维护工具箱里常备一条USB转串口线、一个万用表和一个带LoRa的测试终端,排查速度能快一半以上。
个人经验里最想提醒的一点是:LoRaWAN项目不像普通WiFi项目,装完就能甩手,它需要提前做覆盖规划和长期维护机制。网关位置、终端频点规划、节点硬件版本管理,这三件事最好在项目开始前就定好规范,后面能省非常多的麻烦。我在做这套系统的过程中最深的一个体会是,真正的可靠性不是靠某一个环节做得多好,而是靠每一层的容错——传感器层面有去抖,网络层面有重传,应用层面有多级告警和本地联动兜底。后面我还打算把LoRaWAN智能门锁、烟感报警也并进这套网络,让同一套基础设施服务更多安全场景。到时候再整理一篇文章,把多业务共存的网络规划方法分享给大家。