1. 项目概述
在传统交通信号灯系统中,固定时序控制方式往往无法适应实际道路车流量的动态变化。这种"一刀切"的控制策略在早晚高峰期间容易造成车辆积压,而在平峰时段又会导致绿灯时间浪费。基于STM32F103的智能交通灯自适应控制系统正是为了解决这一痛点而设计。
这个项目通过红外对射传感器和超声波传感器实时检测各方向车流量,利用自适应算法动态调整信号灯配时方案。系统支持四种工作模式:自适应模式、定时模式、手动模式和紧急模式,能够根据实际交通状况灵活切换。我在实际部署中发现,相比传统信号灯,这套系统能将路口通行效率提升30%以上,特别适合车流量波动较大的城市次干道和学校、医院周边道路。
2. 硬件设计与选型
2.1 核心硬件组件
主控芯片选用STM32F103C8T6(Blue Pill开发板),这款Cortex-M3内核的MCU具有72MHz主频、64KB Flash和20KB RAM,完全满足实时控制需求。其丰富的外设接口(多达37个GPIO、3个USART、2个SPI等)可以轻松连接各类传感器和执行器。
传感器部分采用红外对射管(每车道2对)和HC-SR04超声波模块组合检测方案。红外对射负责车辆计数,超声波则测量排队长度。这种复合检测方式比单一传感器更可靠,我在实测中发现误检率可以控制在5%以内。
信号灯驱动采用光耦隔离+继电器方案,虽然成本略高于直接使用MOS管,但电气隔离更安全,特别适合户外潮湿环境。每个方向配置红绿黄三色LED灯珠,亮度达到5000cd/m²,确保阳光直射下仍清晰可见。
2.2 关键电路设计
电源部分需要特别注意:主控板使用AMS1117-3.3稳压芯片,而信号灯和继电器需要独立的5V/10A电源。实测表明,12路LED全亮时瞬时电流可达8A,因此电源线径不应小于1.5mm²。
RS485通信网络采用手拉手拓扑结构,终端电阻设为120Ω。为提高抗干扰能力,所有室外走线都使用双绞屏蔽线,并在STM32端添加TVS二极管防护。实际部署时,通信距离最远可达800米(波特率9600bps)。
提示:室外安装时,务必做好所有接线的防水处理。我曾在雨季因接线盒进水导致系统短路,后来改用防水接线盒+硅胶密封的组合再未出过问题。
3. 软件架构实现
3.1 系统初始化配置
使用STM32CubeMX进行外设初始化是提高开发效率的关键。时钟树配置为HSE 8MHz晶振,通过PLL倍频到72MHz系统时钟。重要外设包括:
- TIM2:1ms定时器中断,用于信号灯时序控制
- TIM3:数码管动态扫描
- USART1:RS485通信(需使能DMA)
- GPIO:PA0-PA7接红外传感器,PB0-PB7接超声波模块
在main.c中定义方向状态结构体,记录每个方向的灯色状态、剩余时间、车辆计数等信息。全局变量system_mode存储当前工作模式,通过串口命令可实时切换。
3.2 自适应控制算法
核心算法流程如下:
- 每500ms检测一次各方向车流量
- 当前绿灯方向剩余时间≤0时,触发相位切换
- 根据车辆数和排队长度计算下一方向的绿灯时长
- 执行黄灯→全红→绿灯的切换序列
绿灯时间计算公式:
c复制uint8_t Calculate_Optimal_Green_Time(uint8_t dir) {
uint8_t base_time = MIN_GREEN_TIME; // 最小10秒
// 根据车辆数加权
if(ds->vehicle_count > 10) base_time += 10;
else if(ds->vehicle_count > 5) base_time +=5;
// 根据排队长度加权
if(ds->queue_length > 5) base_time +=10;
else if(ds->queue_length >3) base_time +=5;
return (base_time > MAX_GREEN_TIME) ? MAX_GREEN_TIME : base_time;
}
实际调试中发现,单纯依赖车辆计数容易导致频繁切换。后来我增加了20%的时间裕度,并在算法中引入"最小绿灯时间保证"机制,显著提高了系统稳定性。
4. 通信协议设计
4.1 RS485通信帧格式
系统采用Modbus-RTU简化协议,主要实现以下功能:
- 模式切换(自适应/定时/手动/紧急)
- 实时状态查询
- 远程手动控制
典型控制命令示例:
code复制MODE:1 // 切换到自适应模式
EMERGENCY:2 // 西向紧急通行
EMERGENCY_OFF // 取消紧急模式
为提高通信可靠性,每个数据包包含CRC16校验。我在协议中设计了应答机制,主站发送命令后,从站必须在200ms内回复确认,否则主站会重发。
4.2 多路口协调控制
当多个路口组网时,需要同步信号灯时序。本系统采用"虚拟相位差"算法:
- 指定一个主路口,其他为从路口
- 主路口广播自己的相位状态
- 从路口根据距离计算相位偏移量
- 动态调整偏移量实现绿波带控制
实测数据显示,在800米长的道路上,这种协调控制能让车辆平均停车次数从4次减少到1次。
5. 现场调试经验
5.1 传感器安装要点
红外对射传感器安装高度建议距地面50-70cm,这个高度既能检测小轿车,又不会因大货车底盘过高导致漏检。发射端和接收端要对准,我通常先用激光笔辅助定位,再固定传感器。
超声波传感器安装角度很关键。经过多次试验,发现向下倾斜15°时检测效果最佳。太陡容易误检路面反射,太平则检测距离不足。
5.2 典型问题排查
问题: 信号灯偶尔不同步
解决方案:
- 检查RS485终端电阻是否匹配
- 在STM32的RS485收发器前加磁珠滤波
- 优化通信协议,增加重传机制
问题: 阴雨天车辆检测不稳定
解决方案:
- 给传感器加装遮阳防雨罩
- 在软件中增加数字滤波算法
- 采用红外+超声波的投票决策机制
6. 系统优化方向
当前系统还有以下改进空间:
- 检测算法升级:引入机器学习算法,通过历史数据预测车流趋势
- 能效优化:采用PWM调光技术,根据环境光照自动调节LED亮度
- 扩展接口:预留Wi-Fi/4G模块接口,支持云端监控
- 故障自诊断:增加电流检测电路,实时监测LED灯珠状态
我在最新版本中已经实现了部分功能,特别是故障自诊断非常实用。当某路LED发生短路或开路时,系统能立即定位故障位置并发送报警信息,大大降低了维护难度。
