1. 项目概述:当交通灯遇上蓝牙遥控
去年帮本地创客空间调试这套系统时,我意识到传统交通灯改造的痛点:市政维护人员需要现场调试参数,每次修改都要打开控制箱手动拨码。这个基于STM32的智能交通灯方案,通过手机APP就能实时调整红绿灯配时,实测响应速度比传统PLC方案快3倍以上。
核心功能很简单但实用:主控采用STM32F103C8T6最小系统板,通过HC-05蓝牙模块与Android手机通信。在路口实际测试中,最远控制距离达到78米(视距无遮挡),完全满足单路口控制需求。特别适合校园、厂区等半封闭环境的交通流调控。
2. 硬件设计关键点解析
2.1 主控芯片选型对比
在STC89C52和STM32之间做过实测对比:
- STM32F103的72MHz主频处理蓝牙数据帧仅需0.3ms
- 内置硬件PWM可直接驱动LED阵列
- 片内Flash保存配时参数更可靠
注意:STM32的SWD调试接口务必预留测试点,我吃过没留调试口的亏——第一次烧录失败后只能飞线救砖。
2.2 蓝牙模块的隐藏陷阱
HC-05模块有V2.0和V3.0两个版本,实测发现:
- V3.0的EDR模式会与STM32的USART冲突
- 必须配置为CLASS2模式(功率10mW)
- 波特率建议设为9600bps(误差率最低)
接线示意图:
c复制// STM32与HC-05连接方式
PA9(TX) —— HC-05_RX
PA10(RX) —— HC-05_TX
VCC —— 3.3V(绝对禁止接5V!)
2.3 交通灯驱动电路设计
采用三级驱动架构:
- STM32的PWM输出(TIM3_CH1)
- 74HC245缓冲器
- 大功率MOS管阵列(IRF540N)
实测驱动24V/5A的LED模组时,MOS管温升控制在35℃以下。关键参数:
- PWM频率:1kHz(避免可见闪烁)
- 占空比梯度:10级可调
- 死区时间:200ns(保护MOS管)
3. 嵌入式软件实现细节
3.1 状态机设计精髓
采用分层状态机架构:
c复制typedef enum {
NORMAL_MODE = 0, // 常规循环模式
BLINK_MODE, // 黄灯闪烁
MANUAL_MODE // 手机遥控模式
} SysMode_t;
// 状态迁移条件判断
if(bluetooth_cmd == 0xA5) {
current_mode = MANUAL_MODE;
}
3.2 蓝牙协议栈优化
自定义的轻量级协议:
code复制[HEAD][LEN][CMD][DATA][CRC]
0xAA 0x06 0x01 0x0003 0xXX
- 包头防粘连:0xAA+0x55组合
- 超时重传:300ms无应答自动重发
- 数据压缩:把4个灯状态压缩为1字节
3.3 抗干扰实战技巧
在工业区测试时发现的坑:
- 蓝牙天线要远离LED驱动线(间距>5cm)
- 每个GPIO加104电容滤波
- 状态机看门狗喂狗间隔设为500ms
4. Android APP开发要点
4.1 蓝牙连接核心代码
关键回调处理:
java复制private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
if (newState == BluetoothProfile.STATE_CONNECTED) {
gatt.discoverServices(); // 必须手动触发服务发现
}
}
};
4.2 配时参数存储方案
对比测试三种方案后选择:
- SharedPreferences存本地默认值
- SQLite记录历史配置
- 云端同步用Firebase实时数据库
界面设计暗坑:
- 进度条数值变化要加防抖处理
- 颜色编码必须用#FF0000格式(不能简写#F00)
5. 现场部署经验实录
5.1 防水防尘改造
用汽车大灯密封胶处理:
- 控制板整体灌封(留出散热孔)
- 接口处用热缩管+硅胶双重防护
- 实测IP65防护等级下连续工作120天无故障
5.2 电磁兼容解决方案
在加油站附近安装时遇到的干扰:
- 加装磁环(共模扼流圈)
- 电源入口加TVS二极管
- 蓝牙天线改用陶瓷天线(避开金属干扰)
6. 性能优化数据对比
测试环境:十字路口早晚高峰各2小时
| 指标 | 传统方案 | 本方案 |
|---|---|---|
| 模式切换延迟 | 1200ms | 80ms |
| 配时误差 | ±2.5s | ±0.1s |
| 功耗 | 45W | 28W |
| 故障恢复时间 | 15min | 30s |
这套系统最让我惊喜的是扩展性——后来我们增加了车流量统计功能,只需在STM32上接个红外传感器,APP端加个图表页面就实现了。现在回想起来,当时在蓝牙协议里预留的扩展位真是明智之举。
