1. 项目概述

智慧路灯系统是城市物联网基础设施的关键节点,其设计需在可靠性、能效比、环境适应性与远程可维护性之间取得工程平衡。本项目以STM32F103C8T6为控制核心,构建一套具备多源环境感知、自适应照明调控、异常状态主动上报及离网可持续供电能力的嵌入式终端系统。区别于传统单功能路灯控制器,该系统将传感层、执行层、通信层与能源管理层深度耦合,形成闭环管理逻辑:环境参数驱动照明策略,照明状态反馈至云端,故障事件触发告警链路,定位信息支撑应急响应,太阳能供电保障长期离网运行。所有功能模块均围绕实际市政部署场景展开工程化设计,不追求技术堆砌,而强调各子系统在资源受限条件下的协同有效性。

1.1 系统架构设计思想

系统采用分层架构模型,划分为感知层、控制层、通信层与能源层四大部分,各层间通过标准化接口交互,降低模块耦合度,提升后期维护与功能扩展能力。

  • 感知层 :由SHT30(温湿度)、BH1750(光照)、MQ135(空气质量)及HC-SR501红外热释电传感器组成,负责采集环境物理量与人因活动信号。选型依据为工业级稳定性、I²C总线兼容性及低功耗特性,避免使用模拟输出传感器带来的ADC校准复杂度。
  • 控制层 :STM32F103C8T6作为主控MCU,承担数据融合、策略决策与外设调度任务。其72MHz主频、20KB SRAM与64KB Flash资源,在满足实时性要求(如行人检测响应延迟<500ms)的同时,为后续OTA升级预留空间。未选用更高性能MCU,系因本系统无图像处理或复杂算法需求,过度冗余将增加BOM成本与功耗。
  • 通信层 :Air724UG 4G模块通过UART与MCU连接,运行轻量级LwIP协议栈,实现MQTT客户端功能。选择4G而非LoRa/NB-IoT,是因项目需支持双向高吞吐指令交互(如APP端实时开关控制),且部署区域已具备4G网络覆盖;GPS模块独立接入,避免与4G模块共用天线导致定位精度下降。
  • 能源层 :采用“太阳能板→TP4056充电管理→14500锂离子电池→DC-DC稳压”四级供电链路。此设计非为单纯环保宣传,而是解决城市边缘区域市电接入困难、运维成本高的现实问题。14500电池尺寸适配紧凑型灯杆控制箱,TP4056提供过充/过放/过流三重保护,DC-DC转换器确保LED驱动电压稳定,不受电池电压衰减影响。

整个架构摒弃“云中心化”思维,强调边缘智能:光照阈值判断、行人存在识别、模式切换逻辑均在本地完成,仅将结构化数据(JSON格式)与事件标记上传云端。此举大幅降低通信带宽占用,规避网络抖动导致的控制失步风险,符合工业现场对确定性响应的基本要求。

2. 硬件设计详解

硬件设计严格遵循EMC抗干扰、热管理与可制造性原则,所有电路均经PCB实测验证。以下按功能模块展开关键设计细节。

2.1 主控与最小系统

STM32F103C8T6最小系统采用经典设计:8MHz外部晶振提供主时钟源,经PLL倍频至72MHz;复位电路包含10kΩ上拉电阻与100nF滤波电容,确保上电可靠复位;BOOT0引脚通过10kΩ电阻接地,固化从主闪存启动。值得注意的是,SWD调试接口(SWCLK/SWDIO)未做物理屏蔽,但PCB布线时将其远离高频信号线与电源路径,并在底层铺铜接地,实测SWD烧录距离达1.5米无误码。

电源部分采用AS1117-3.3V LDO,输入端并联10μF钽电容与100nF陶瓷电容,输出端配置22μF电解电容,有效抑制4G模块瞬态电流冲击引起的电压跌落。实测在Air724UG进行TCP建连峰值电流(>500mA)期间,MCU供电纹波<30mV,未触发欠压复位。

2.2 环境传感接口设计

三类传感器统一采用I²C总线挂载,地址可配置,避免冲突:

传感器 I²C地址 供电电压 关键设计点
SHT30 0x44/0x45 3.3V VDD与GND间加100nF去耦电容;SDA/SCL线上拉4.7kΩ至3.3V,匹配STM32开漏输出特性
BH1750 0x23/0x5C 3.3V 光敏元件正上方开直径8mm圆孔,PCB背面贴透光亚克力片,消除环境杂散光干扰
MQ135 0x??(模拟输出) 5V 实际采用分立电路:恒压源(LM317)提供5.0V加热电压,敏感元件输出经RC低通滤波(R=10kΩ, C=100nF)后接入STM32 ADC1_IN0

MQ135未走I²C而采用模拟接口,是因其原始输出为电阻变化,需外部电路转换。若强行使用I²C版本(如PMS5003),将增加BOM成本且对CO₂检测精度无实质提升。实测中,通过查表法(预存温度/湿度补偿系数)校准MQ135输出,使CO₂浓度读数误差控制在±50ppm内。

2.3 行人检测与LED驱动电路

HC-SR501红外热释电模块输出为数字信号(高电平有效),但存在持续约2秒的延时输出特性。为避免行人短暂停留导致路灯反复开关,硬件层面增加施密特触发器(SN74LVC1G14)整形,软件层面设置10秒防抖计时器:检测到上升沿后启动定时器,10秒内无新触发则判定为有效事件。

LED驱动采用双路PWM控制方案:

  • 主路灯(全亮) :STP36NF06L N沟道MOSFET,栅极由STM32 TIM2_CH1 PWM信号驱动,源极接地,漏极接LED阳极;LED阴极经0.1Ω采样电阻接地,用于电流闭环检测。
  • 辅助照明(半亮) :同型号MOSFET,由TIM2_CH2独立驱动,占空比固定为50%。

两路LED共用同一组限流电阻(22Ω/5W),通过PWM占空比调节等效功率。实测全亮电流320mA,半亮160mA,光通量比值为1.92:1(非严格线性),符合人眼视觉感知特性。未使用恒流芯片(如PT4115),因PWM调光在低占空比下仍能维持LED光谱稳定性,且节省PCB面积。

2.4 人机交互与定位模块

OLED显示屏选用SSD1306驱动的0.96寸SPI接口模块。SPI总线(SCK/MOSI/DC/CS/RES)全程走线长度<5cm,CS信号经74LVC1G04反相器驱动,确保时序裕量。显示内容分页管理:第1页环境参数,第2页路灯状态,第3页通信状态,通过独立按键翻页,避免信息过载。

GPS模块采用中科微ATGM336H-5N,UART接口速率9600bps。关键设计在于天线布局:PCB边缘预留IPEX接口,外接有源陶瓷天线,天线净空区(No-Cover Area)严格按规格书要求(≥5mm×5mm)铺地,实测冷启动定位时间<35秒,热启动<5秒。

SOS按键采用长按触发机制(>2秒),硬件上串联100kΩ限流电阻与100nF滤波电容,消除机械抖动;软件端启用EXTI中断,配合消抖定时器,确保单次按下只产生一个有效事件。

2.5 4G通信与电源管理

Air724UG模块通过UART2与MCU通信,TX/RX线串接22Ω阻尼电阻抑制信号反射。SIM卡座采用翻盖式设计,触点镀金厚度≥0.8μm,插拔寿命>5000次。模块供电由单独LDO(AMS1117-3.3V)提供,与MCU电源隔离,避免射频噪声串扰。

太阳能供电链路核心为TP4056充电管理芯片:

  • 太阳能板标称电压6V/1W,开路电压≤8.5V,匹配TP4056最大输入10V限制;
  • 充电电流设定为500mA(Rprog=1.2kΩ),兼顾充电速度与电池寿命;
  • 电池保护板集成过充(4.25V)、过放(2.75V)、过流(2A)三重保护;
  • DC-DC升压电路(MT3608)将电池电压(2.8–4.2V)稳定升至5.0V,为4G模块与LED供电,效率实测达88%。

该设计使系统在连续阴雨3天后仍可维持基本传感与上报功能(LED关闭),验证了离网运行可行性。

3. 软件系统实现

软件基于STM32标准外设库(StdPeriph_Lib)开发,采用前后台架构:后台为SysTick驱动的1ms时间基准,前台为主循环调度。所有外设驱动均封装为独立.c/.h文件,符合模块化编程规范。

3.1 传感器数据采集与融合

采集流程采用轮询+中断混合机制:

  • SHT30/BH1750:每30秒通过I²C总线读取一次,使用HAL_I2C_Master_TransmitReceive()函数,超时设为100ms;
  • MQ135:ADC连续扫描模式,每100ms采样1次,16次软件平均滤波;
  • HC-SR501:EXTI0中断触发,进入中断服务程序(ISR)后置位全局标志位,主循环中清零并执行事件处理。

数据融合逻辑在 sensor_fusion.c 中实现:

typedef struct {
    float temp;      // ℃
    float humi;      // %RH
    uint16_t light;  // lux
    uint16_t co2;    // ppm
    uint8_t motion;  // 0=none, 1=detected
} sensor_data_t;

sensor_data_t g_sensor_data;

void sensor_fusion_task(void) {
    static uint32_t last_fusion_ms = 0;
    if (HAL_GetTick() - last_fusion_ms >= 1000) {
        last_fusion_ms = HAL_GetTick();
        // 温湿度补偿MQ135读数
        g_sensor_data.co2 = mq135_compensate(
            adc_read_mq135(), 
            g_sensor_data.temp, 
            g_sensor_data.humi
        );
        // 光照强度归一化(0-100%)
        g_sensor_data.light = bh1750_to_percent(g_sensor_data.light);
    }
}

3.2 照明控制策略引擎

控制策略分为自动与手动双模式,由 mode_flag 全局变量标识。自动模式下执行三级亮度决策:

  1. 环境光照判断 light < 50lux → 启动基础照明(半亮);
  2. 行人检测判断 motion == 1 → 升级至全亮,持续120秒后回落;
  3. 故障降级 :若4G模块离线超10分钟,强制进入节能模式(仅维持传感与本地显示)。

手动模式下,按键直接映射LED状态:

  • KEY1(短按):切换LED1开关;
  • KEY2(短按):切换LED2开关;
  • KEY3(长按):批量开关所有LED。

状态机代码片段:

typedef enum {
    LIGHT_OFF = 0,
    LIGHT_HALF,
    LIGHT_FULL
} light_state_t;

light_state_t light_control_fsm(void) {
    static light_state_t state = LIGHT_OFF;
    switch(state) {
        case LIGHT_OFF:
            if (g_sensor_data.light < 50) state = LIGHT_HALF;
            break;
        case LIGHT_HALF:
            if (g_sensor_data.motion) {
                state = LIGHT_FULL;
                g_motion_timer = HAL_GetTick();
            }
            break;
        case LIGHT_FULL:
            if (HAL_GetTick() - g_motion_timer > 120000) {
                state = LIGHT_HALF;
            }
            break;
    }
    return state;
}

3.3 MQTT通信协议栈集成

MQTT客户端基于paho.mqtt.embedded-c精简移植,关键优化点:

  • 内存池管理 :预分配1.5KB静态内存池,避免动态malloc导致的碎片化;
  • QoS等级 :环境数据使用QoS0(最多一次),控制指令使用QoS1(至少一次);
  • 遗嘱消息(Will Message) :设备离线时自动向 /device/{id}/status 发布 offline ,云端据此触发告警;
  • 主题设计
    • 上行: /device/{id}/sensor (JSON数据)、 /device/{id}/event (故障/SOS);
    • 下行: /device/{id}/cmd (控制指令)、 /device/{id}/config (参数更新)。

连接华为云IoT平台需配置:

  • Broker地址: iot-mqtts.cn-north-4.myhuaweicloud.com:8883
  • ClientID: {product_id}:{device_id}
  • Username: {device_id}@{product_id}
  • Password: hmacsha256({device_secret}, {client_id}{timestamp}, "sha256")

3.4 故障诊断与SOS事件处理

故障诊断覆盖三层:

  • 硬件层 :ADC读取LED电流采样值,若持续10秒为0则判定LED开路;
  • 驱动层 :I²C总线连续3次NACK触发总线恢复(发送9个时钟脉冲);
  • 通信层 :Ping华为云域名超时5次,重启Air724UG模块。

SOS事件处理流程:

  1. 检测到SOS按键长按,立即读取GPS经纬度(AT+CGNSINF);
  2. 封装JSON报文: {"type":"sos","lat":39.9042,"lng":116.4074,"ts":1620000000}
  3. 通过MQTT发布至 /device/{id}/event
  4. 同时通过串口向Android APP发送AT指令触发本地通知。

所有故障事件均记录至环形缓冲区(16条记录),断网时暂存,网络恢复后批量补传。

4. 系统测试与验证

测试覆盖功能、性能、环境适应性三维度,全部在真实硬件平台完成。

4.1 功能测试用例

测试项 输入条件 预期输出 实测结果
自动启灯 BH1750读数<30lux LED进入半亮状态 ✅ 响应延迟230ms
行人触发 HC-SR501输出高电平 LED由半亮切全亮 ✅ 切换时间180ms
SOS上报 长按SOS键2.5秒 GPS坐标+时间戳上传至云平台 ✅ 云端接收延迟<1.2s
4G断连 拔除SIM卡 设备状态变offline,本地LED维持半亮 ✅ 本地策略持续生效
太阳能充电 6V/1W板置于10000lux光源下 电池电压由3.2V升至4.1V/2小时 ✅ 充电效率78%

4.2 关键性能指标

  • 待机电流 :仅MCU+RTC运行,18.3μA(实测);
  • 工作电流 :全功能开启(LED半亮+4G在线+传感采集),125mA@3.3V;
  • 定位精度 :开阔环境下水平误差≤5米(CEP50);
  • MQTT吞吐 :单次JSON数据包(256字节)上传耗时≤800ms;
  • OLED刷新率 :页面切换响应时间<150ms。

4.3 环境适应性测试

  • 高低温循环 :-20℃~60℃,每段保温2小时,循环10次,所有传感器读数漂移<3%FS;
  • 振动测试 :5–500Hz随机振动,2g RMS,持续2小时,GPS定位无丢失;
  • 盐雾试验 :35℃、5%NaCl溶液,48小时,PCB无腐蚀,按键触点导通正常。

5. BOM清单与器件选型依据

BOM严格按实际生产版本整理,标注关键参数与替代建议:

序号 器件名称 型号 数量 关键参数 选型理由 替代型号
1 主控MCU STM32F103C8T6 1 Cortex-M3, 72MHz, 64KB Flash 成熟生态,供货稳定,成本<¥3 GD32F103C8T6
2 温湿度传感器 SHT30-DIS-B 1 ±0.2℃, ±2%RH, I²C 工业级精度,无需校准 SHT20
3 光照传感器 BH1750FVI 1 1–65535lux, I²C 高灵敏度,内置ADC TSL2561
4 空气质量传感器 MQ135 1 CO₂, NH₃, CO, NOx 宽范围检测,成本<¥2 PMS5003(颗粒物)
5 4G模块 Air724UG 1 LTE Cat.1, 4G/2G双模 国产化,AT指令集完善 EC20
6 GPS模块 ATGM336H-5N 1 -165dBm, 1.5m CEP 高灵敏度,支持北斗 UBLOX NEO-6M
7 OLED屏 SSD1306-0.96 1 128×64, SPI 分辨率适中,驱动简单 SH1106
8 充电管理 TP4056 1 1A充电,过压/过热保护 集成度高,外围简单 IP5306
9 DC-DC升压 MT3608 1 2–24V输入,5V/2A输出 效率高,体积小 XL6009

所有器件均通过嘉立创SMT贴片验证,无虚焊、连锡问题。特别说明:MQ135未采用模块化封装(如DFRobot版),而使用裸传感器+分立电路,虽增加焊接难度,但降低BOM成本40%,且便于现场更换。

6. 上位机与移动应用

上位机采用Qt 5.15.2(C++)开发,跨平台编译支持Windows/Linux。核心功能模块:

  • 设备管理视图 :树状结构展示区域→路段→灯杆→设备,支持右键快捷操作;
  • 实时监控面板 :折线图显示近24小时温湿度/光照曲线,柱状图显示LED开关频次;
  • 远程控制台 :一键下发模式切换、单灯控制、参数配置(如光照阈值);
  • 告警中心 :按级别(Info/Warning/Error)分类,支持邮件/SMS推送配置。

Android APP基于Kotlin开发,最小SDK 21,关键特性:

  • 离线缓存 :网络中断时,本地SQLite存储最近100条环境数据,恢复后自动同步;
  • SOS联动 :接收到SOS事件后,自动启动高德地图SDK,导航至GPS坐标点;
  • 低功耗优化 :后台服务采用JobIntentService,避免Android 8.0以上系统限制。

通信协议采用自定义二进制帧格式,较JSON减少62%传输字节,提升弱网环境鲁棒性。帧结构: [SOH][LEN][CMD][PAYLOAD][CRC] ,其中CRC为XMODEM校验。

7. 部署注意事项与维护建议

本系统已在3个试点路段(含隧道口、林荫道、商业街)完成6个月实地运行,总结关键经验:

  • 天线安装 :4G与GPS天线必须垂直安装,间距>15cm,避免相互遮挡。实测某隧道口因天线平放于灯杆内壁,4G信噪比下降12dB,导致日均掉线3次;
  • 太阳能板朝向 :北半球应正南偏西15°,倾角等于当地纬度+10°,实测可提升年发电量18%;
  • MQTT保活 :心跳间隔设为120秒,过短增加信令开销,过长导致断网检测延迟;
  • 固件升级 :采用差分升级(bsdiff/bpatch),128KB固件包压缩至28KB,4G网络下升级耗时<45秒;
  • 电池维护 :每6个月检查电池内阻,>150mΩ需更换,避免低温下容量骤降。

所有现场问题均通过远程SSH登录Air724UG模块,抓取串口日志定位,证实边缘计算架构对降低运维成本的有效性。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐