ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于NB-IoT的智能井盖监测系统设计与实现

基于NB-IoT的智能井盖监测系统设计与实现

1. 项目概述

这个基于NB-IoT的智能井盖安防与在线监测系统,是我去年参与的一个城市基础设施智能化改造项目。当时市政部门找到我们团队,希望能解决传统井盖管理中的几个痛点:无法实时监测状态、异常情况难以及时发现、人工巡检成本高等问题。

系统以STM32F103C8T6为主控,集成了温湿度、倾斜角度、水位和甲烷浓度等多种传感器,通过NB-IoT实现远程数据传输,并具备北斗定位功能。当检测到井盖倾斜超过15度、温度高于50℃或水位超过阈值时,会立即触发声光报警并通过网络上报异常。

提示:在实际部署中发现,井盖倾斜15度的阈值在坡道区域容易误报,建议根据地形特点动态调整该参数。

2. 系统架构设计

2.1 硬件组成框图

整个系统采用模块化设计,主要包含以下核心部件:

[传感器层] → [主控层] → [通信层] → [云端平台] ↑ ↑ [供电系统] [本地报警]

具体硬件选型:

  • 主控芯片:STM32F103C8T6(性价比高,外设丰富)
  • 通信模块:移远BC26(支持NB-IoT和GNSS)
  • 倾角检测:MPU6050(集成加速度计+陀螺仪)
  • 气体检测:MQ-4甲烷传感器(量程300-10000ppm)
  • 显示模块:0.96寸OLED(低功耗,可视角度大)

2.2 关键电路设计要点

电源管理电路: 采用TP4056锂电池充电管理芯片+AMS1117-3.3V LDO的组合方案。实测中,当系统处于深度休眠模式时,整机电流可控制在0.5mA以下,配合6000mAh锂电池可实现至少3个月的续航。

传感器接口设计:

  • DHT11温湿度传感器接PA0(需10K上拉电阻)
  • MPU6050通过I2C连接(PB6/PB7)
  • MQ-4甲烷传感器接PA1(需分压电路)
  • 水位传感器接PA2(注意防水处理)

注意:MQ-4传感器需要预热3-5分钟才能稳定工作,在程序初始化时要加入预热等待。

3. 核心功能实现

3.1 多传感器数据融合算法

为了解决单一传感器误报问题,我们采用了加权投票算法:

#define TEMP_WEIGHT 0.3 #define TILT_WEIGHT 0.4 #define WATER_WEIGHT 0.2 #define GAS_WEIGHT 0.1 uint8_t is_emergency(void) { float score = 0; if(temp > 50) score += TEMP_WEIGHT; if(tilt > 15) score += TILT_WEIGHT; if(water > 70) score += WATER_WEIGHT; if(gas > 1000) score += GAS_WEIGHT; return (score >= 0.6) ? 1 : 0; }

3.2 NB-IoT通信实现

使用BC26模块的AT指令进行数据传输,关键流程:

  1. 初始化模块:
AT+CFUN=1 AT+CGDCONT=1,"IP","CMNBOT" AT+CGATT=1
  1. 发送数据到云平台:
AT+QIOPEN=1,0,"UDP","106.14.82.92",5683,0,1 AT+QISEND=0,24,"0102030405060708090A0B0C"

实测发现:在城市环境下,NB-IoT信号穿透力强但带宽有限,建议将数据包压缩在50字节以内,发送间隔不小于5分钟。

3.3 低功耗设计技巧

通过以下措施优化功耗:

  1. 使用STM32的Stop模式(RTC唤醒)
  2. 传感器分时供电(MOS管控制)
  3. 关闭未用外设时钟
  4. OLED仅在有报警时点亮

休眠模式配置代码:

void enter_stop_mode(void) { HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); // 唤醒后需要重新初始化时钟 SystemClock_Config(); }

4. 实际部署经验

4.1 安装注意事项

  1. 防水处理:所有接缝处使用704硅橡胶密封
  2. 防震设计:PCB板加装橡胶减震垫
  3. 天线布置:NB-IoT天线应竖直向上安装
  4. 传感器定位:
    • 水位传感器距井底10cm
    • 气体传感器靠近井壁
    • 倾角传感器平行于井盖平面

4.2 常见问题排查

故障现象可能原因解决方案
数据上传失败SIM卡欠费检查物联网卡状态
定位偏差大天线被金属遮挡调整天线位置
误报频繁阈值设置不当现场校准参数
续航时间短休眠未生效检查唤醒源配置

4.3 成本控制方案

经过多次迭代,我们最终将单点硬件成本控制在300元以内:

  • 主控改用STM32F103C8T6(替代原计划的F4系列)
  • 自制传感器支架(替代成品外壳)
  • 批量采购国产传感器
  • 使用公共物联网平台(避免自建服务器)

5. 软件设计要点

5.1 主程序流程图

开始 ↓ 硬件初始化 ↓ 传感器校准 ↓ 进入主循环: 读取传感器数据 → 数据处理 → 异常判断 ↓ [异常] → 本地报警 → 数据上传 ↓ 进入低功耗模式(5分钟)

5.2 关键驱动程序

MPU6050倾角计算:

float get_tilt_angle(void) { int16_t acc_x, acc_y, acc_z; MPU6050_ReadAccel(&acc_x, &acc_y, &acc_z); float angle = atan2(acc_y, acc_z) * 180/M_PI; return fabs(angle); // 取绝对值 }

OLED菜单界面: 采用状态机设计,通过按键切换显示页面:

typedef enum { PAGE_MAIN, PAGE_TEMP, PAGE_TILT, PAGE_SETTING } PageType; PageType current_page = PAGE_MAIN; void key_handler(uint8_t key) { switch(key) { case KEY1: current_page = (current_page + 1) % 4; break; case KEY2: adjust_threshold(1); break; // 阈值+ case KEY3: adjust_threshold(-1); break; // 阈值- } }

6. 项目优化方向

根据半年来的实际运行数据,下一步计划进行以下改进:

  1. 预测性维护:基于历史数据建立趋势模型,预测可能发生的故障
  2. 边缘计算:在设备端增加简单AI模型,过滤误报数据
  3. 太阳能供电:试点安装太阳能板+超级电容的方案
  4. 多协议支持:增加LoRa作为NB-IoT的备份通信通道

这个项目让我深刻体会到,物联网系统落地不仅需要考虑技术实现,更要关注部署环境、运维成本和长期可靠性。特别是在市政工程中,设备的抗干扰性和稳定性往往比 fancy 的功能更重要

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进