1. 项目概述:当路灯遇上STM32
深夜加完班走在回家路上,最让人安心的莫过于那些随着你的脚步渐次亮起的路灯。这种看似简单的智能照明背后,其实藏着STM32单片机与各类传感器的精妙配合。这个项目就是要用STM32F103C8T6这颗性价比之王,打造一个能感知环境、自主决策的智慧路灯系统。
传统路灯要么常亮浪费能源,要么定时开关不够智能。我们的系统通过光敏电阻实时监测环境亮度,配合人体红外传感器检测行人经过,实现"人来灯亮,人走灯暗"的节能效果。整套硬件成本控制在50元以内,却能让路灯的能耗降低60%以上,特别适合小区巷道、校园步道等场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计精要
2.1 核心器件选型
主控选择STM32F103C8T6不是偶然:72MHz主频足够处理多传感器数据,内置的12位ADC能精准读取光强模拟信号,而3个USART接口为后续联网升级留足余地。光敏传感器推荐GL5528,其光谱响应曲线接近人眼,价格不到2元。人体检测采用HC-SR501模块,探测距离可调至7米,刚好覆盖标准路宽。
关键提示:HC-SR501存在2秒触发间隔限制,在代码中需要做防误判处理。实测发现电动车快速通过时可能漏检,解决方案是并联两个模块交叉安装。
2.2 电路设计避坑指南
电源部分最容易翻车。虽然STM32工作电压3.3V,但路灯常用12V供电。建议先用LM2596将12V降为5V,再用AMS1117转3.3V,避免单级降压导致芯片发烫。光敏电路要加10μF电容滤波,否则ADC读数会像心电图一样跳动。继电器驱动务必加1N4007续流二极管,我在烧毁三个继电器后才明白这个道理。
3. 软件架构解析
3.1 主程序逻辑流程图
系统上电后先初始化各外设,然后进入主循环:
- 读取光敏电压值(ADC采样10次取平均)
- 当环境照度低于15lux时启动人体检测
- 检测到移动信号后立即点亮LED,并启动5分钟倒计时
- 期间若再次检测到人体活动则重置倒计时
- 倒计时结束渐暗熄灭(PWM调光从100%到0%用时30秒)
c复制while(1) {
lux = get_light_sensor();
if(lux < LUX_THRESHOLD) {
if(PIR_Detect()) {
