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/PB7MQ-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指令进行数据传输关键流程初始化模块ATCFUN1 ATCGDCONT1,IP,CMNBOT ATCGATT1发送数据到云平台ATQIOPEN1,0,UDP,106.14.82.92,5683,0,1 ATQISEND0,24,0102030405060708090A0B0C实测发现在城市环境下NB-IoT信号穿透力强但带宽有限建议将数据包压缩在50字节以内发送间隔不小于5分钟。3.3 低功耗设计技巧通过以下措施优化功耗使用STM32的Stop模式RTC唤醒传感器分时供电MOS管控制关闭未用外设时钟OLED仅在有报警时点亮休眠模式配置代码void enter_stop_mode(void) { HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); // 唤醒后需要重新初始化时钟 SystemClock_Config(); }4. 实际部署经验4.1 安装注意事项防水处理所有接缝处使用704硅橡胶密封防震设计PCB板加装橡胶减震垫天线布置NB-IoT天线应竖直向上安装传感器定位水位传感器距井底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. 项目优化方向根据半年来的实际运行数据下一步计划进行以下改进预测性维护基于历史数据建立趋势模型预测可能发生的故障边缘计算在设备端增加简单AI模型过滤误报数据太阳能供电试点安装太阳能板超级电容的方案多协议支持增加LoRa作为NB-IoT的备份通信通道这个项目让我深刻体会到物联网系统落地不仅需要考虑技术实现更要关注部署环境、运维成本和长期可靠性。特别是在市政工程中设备的抗干扰性和稳定性往往比 fancy 的功能更重要