1. 项目概述:智能自行车监测系统的设计初衷
骑行爱好者最头疼的问题莫过于无法实时掌握身体状态和车辆状况。去年环城骑行时,我就因为没注意心率变化导致中途虚脱,这个经历直接催生了本项目的诞生。基于STM32F103C8T6单片机的智能自行车监测系统,正是为解决这类痛点而设计的便携式解决方案。
这个毕业设计项目的核心功能模块包括:
- 生理监测:通过MAX30102传感器采集骑行者心率/血氧数据
- 胎压监测:采用XGZP6847压力传感器检测轮胎状态
- 环境感知:集成温湿度传感器获取骑行环境数据
- 人机交互:0.96寸OLED屏实现数据可视化显示
硬件选型心得:STM32F103C8T6作为Cortex-M3内核MCU,72MHz主频完全满足多传感器数据处理需求,且成本控制在30元以内,是学生项目的性价比之选。
2. 系统架构设计与硬件选型
2.1 主控芯片方案对比
测试过三种常见方案后,最终选择STM32F103C8T6最小系统板:
- 51单片机:成本低但外设资源有限,难以驱动OLED和多个传感器
- ESP32:自带WiFi但功耗较高,不适合电池供电场景
- STM32F103:完美平衡性能与功耗,HAL库开发效率高
具体资源配置如下表:
| 模块 | 占用资源 | 配置说明 |
|---|---|---|
| MAX30102 | I2C1 | 400kHz高速模式 |
| XGZP6847 | ADC1_CH4 | 12位精度,软件滤波 |
| OLED | I2C2 | 128x64分辨率,硬件加速刷新 |
| 系统时钟 | 72MHz HSE | 8MHz晶振+PLL倍频 |
2.2 传感器电路设计要点
MAX30102光电模块的PCB布局要特别注意:
- 传感器背面必须留出2mm以上净空区
- 红外LED驱动电流建议设置在7-12mA范围
- 添加100nF去耦电容距芯片不超过5mm
血氧检测精度提升技巧:在传感器接触面涂抹少量凡士林可减少环境光干扰,实测信噪比提升40%。
3. 核心功能实现与算法优化
3.1 心率血氧检测算法
采用改进型滑动平均滤波算法,关键代码如下(基于HAL库):
c复制#define SAMPLE_SIZE 50
uint32_t hr_filter(uint32_t raw_data) {
static uint32_t buffer[SAMPLE_SIZE];
static uint8_t index = 0;
uint32_t sum = 0;
buffer[index++] = raw_data;
if(index >= SAMPLE_SIZE) index = 0;
for(uint8_t i=0; i<SAMPLE_SIZE; i++) {
sum += buffer[i];
}
return sum/SAMPLE_SIZE;
}
实测数据对比:
- 原始数据波动范围:±15bpm
- 滤波后波动范围:±3bpm
- 响应延迟:<1秒
3.2 胎压监测异常判断逻辑
XGZP6847传感器的ADC值转换公式:
code复制实际压力(kPa) = (ADC_raw - 1638) * 300 / 16384
设置三级预警机制:
- 轻度预警:胎压<200kPa
- 中度预警:胎压<150kPa
- 紧急预警:胎压<100kPa
防误报设计:连续3次检测到异常才触发报警,避免颠簸路面误判。
4. 低功耗设计与优化
4.1 电源管理方案
采用TPS63020升降压芯片搭建供电系统:
- 输入电压:3.7V(18650锂电池)
- 输出电压:3.3V/500mA
- 待机电流:<2μA
功耗测试数据:
| 工作模式 | 电流消耗 | 续航时间 |
|---|---|---|
| 全功能运行 | 68mA | 12小时 |
| 仅心率监测 | 22mA | 36小时 |
| 深度睡眠 | 15μA | 90天 |
4.2 软件省电策略
- OLED动态刷新:非活跃状态降至1Hz刷新率
- 传感器轮询机制:MAX30102每2秒采样一次
- 中断唤醒设计:任意按键触发系统唤醒
c复制void Enter_Stop_Mode(void) {
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
SystemClock_Config(); // 唤醒后需重新配置时钟
}
5. 常见问题与调试记录
5.1 MAX30102数据不稳定
现象:静止状态下心率数据仍有较大波动
解决方案:
- 检查手指接触是否良好
- 调整LED电流至10mA(寄存器0x0C)
- 启用芯片内置的64-sample FIFO
5.2 OLED显示残影
根本原因:SSD1306驱动IC的电荷积累
优化措施:
- 每5分钟执行一次全屏刷新
- 添加消隐动画过渡效果
- 降低对比度(建议设置0xCF)
5.3 胎压传感器漂移
校准方法:
- 在标准气压下读取ADC基准值
- 写入EEPROM保存校准参数
- 上电时自动加载补偿值
6. 项目进阶优化方向
在实际使用三个月后,总结出以下改进空间:
- 无线传输模块:可添加HC-05蓝牙模块,将数据同步至手机APP
- 运动算法扩展:通过加速度计实现踏频检测
- 太阳能充电:集成5V/1W光伏板延长续航
硬件成本核算表(2023年报价):
| 部件 | 单价(元) | 采购渠道 |
|---|---|---|
| STM32F103C8T6 | 28.5 | 立创商城 |
| MAX30102 | 45.0 | 淘宝官方旗舰店 |
| XGZP6847 | 32.8 | 华强北电子市场 |
| OLED屏 | 18.6 | 拼多多品牌专区 |
| 结构件 | 15.0 | 3D打印自制 |
这个项目最让我惊喜的是MAX30102的检测精度——与专业运动手环对比测试,静息心率误差不超过±2bpm。不过要注意的是,剧烈运动时传感器容易移位,后来改用弹性腕带固定解决了这个问题。
