1. 项目概述:智能跑步探照灯的设计初衷
去年冬天夜跑时,我差点被路面的坑洼绊倒。这个经历让我萌生了设计一款能自动调节照明角度的跑步探照灯的想法。传统头灯存在三个痛点:固定光照角度需要手动调节、无法预判障碍物、功耗高续航短。这款基于STM32的智能探照灯,通过红外测距和运动姿态检测,实现了光照方向与亮度的自主调节。
核心功能指标:
- 照射距离:5米可调
- 待机电流:<10mA
- 响应延迟:<50ms
- 工作温度:-10℃~50℃
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计详解
2.1 主控芯片选型对比
选择STM32F103C8T6作为主控,主要基于三点考量:
- 性价比:零售价仅12元,却具备72MHz主频
- 外设资源:内置3个ADC、2个I²C和3个PWM通道
- 开发生态:完善的HAL库支持
实测发现,在开启所有外设时:
- 全速运行功耗:23mA
- 休眠模式功耗:2μA
- 唤醒时间:3.2ms
2.2 传感器模块配置方案
2.2.1 红外测距方案
选用夏普GP2Y0A21YK0F红外传感器,其特性:
- 检测距离:10-80cm
- 输出方式:模拟电压(2.3V@10cm → 0.4V@80cm)
- 采样电路设计:
c复制// ADC采样代码示例
void ADC_Init() {
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = DISABLE;
hadc1.Init.ContinuousConvMode = ENABLE;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
HAL_ADC_Init(&hadc1);
}
uint16_t Get_Distance() {
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 10);
return HAL_ADC_GetValue(&hadc1);
}
2.2.2 姿态检测方案
MPU6050的配置要点:
- I²C地址:0x68(AD0=0)或0x69(AD0=1)
- 初始化流程:
- 解除睡眠模式(PWR_MGMT_1寄存器)
- 设置
