1. 项目概述
这个基于51单片机的心率温度监测系统,是我去年为社区养老院开发的一个实用型健康监测设备。它不仅能实时测量老人的心率和体温,还能通过语音播报提醒异常情况,同时显示当前时间,特别适合独居老人使用。
整套系统成本控制在200元以内,采用模块化设计,核心功能包括:
- 光电心率传感器采集脉搏信号
- DS18B20数字温度传感器测量体温
- DS1302时钟芯片提供精准时间
- OLED显示屏展示实时数据
- SYN6288语音合成芯片进行异常报警
2. 硬件设计与选型
2.1 核心控制器选择
选用STC89C52RC单片机作为主控,主要考虑因素:
- 8位架构完全满足数据处理需求
- 内置4KB Flash存储器足够存储程序
- 32个I/O口可扩展多个外设
- 价格仅5-8元,性价比极高
注意:烧录程序时需要选择11.0592MHz晶振频率,这是串口通信的标准波特率基准。
2.2 传感器模块选型
心率监测方案:
采用PPG光电心率传感器(MAX30102模块),通过手指毛细血管的血流变化检测心率。相比传统电极式方案:
- 非接触式测量更卫生
- 集成度高(包含LED光源和光电接收器)
- I²C接口占用引脚少
温度测量方案:
DS18B20数字温度传感器优势明显:
- ±0.5℃的测量精度
- 单总线通信节省IO资源
- 防水封装可直接接触皮肤测量
2.3 显示与语音模块
显示部分:
0.96寸OLED(SSD1306驱动)选择依据:
- 128x64分辨率足够显示所有信息
- 自发光无需背光,功耗仅0.08W
- 对比度高,老年人易看清
语音模块:
SYN6288中文语音合成芯片特点:
- 支持GB2312编码的文本转语音
- 可调节语速(实测5级最清晰)
- 3W功放可直接驱动扬声器
3. 系统电路设计
3.1 电源电路设计
采用AMS1117-3.3V稳压芯片为传感器供电:
code复制[电源电路示意图]
5V USB输入 → AMS1117 → 3.3V输出
→ 单片机直接5V供电
关键点:MAX30102必须使用3.3V供电,否则会损坏传感器
3.2 信号调理电路
心率信号需要经过两级放大:
- 前置放大:LM358构成100倍放大器
- 带通滤波:0.5Hz-5Hz二阶有源滤波器
- 比较器整形:LM393将模拟信号转为数字脉冲
3.3 抗干扰设计
- 所有数字信号线加100Ω电阻串联
- 电源入口放置100μF+0.1μF去耦电容
- 传感器线长不超过20cm
- 单片机晶振外壳接地
4. 软件实现细节
4.1 主程序流程图
c复制void main() {
init_all(); // 外设初始化
while(1) {
read_sensors(); // 采集数据
process_data(); // 数据处理
display_info(); // OLED刷新
check_alarm(); // 异常判断
delay_ms(200); // 控制采样率
}
}
4.2 心率算法实现
采用动态阈值法检测心率:
- 采集5秒原始数据(约250个样本)
- 滑动平均滤波(窗口宽度=15)
- 寻找波形峰值(间隔>200ms视为有效)
- 计算60秒内峰值数量即为心率值
c复制uint8_t calc_heart_rate() {
static uint16_t peak_times[10];
static uint8_t index = 0;
// 检测到峰值时记录时间戳
peak_times[index++] = get_current_ms();
if(index >= 10) {
uint16_t avg_interval = (peak_times[9]-peak_times[0])/9;
return 60000/avg_interval; // 转换为bpm
}
return 0;
}
4.3 温度补偿算法
针对DS18B20的测量误差进行补偿:
c复制float get_corrected_temp() {
float raw = DS18B20_ReadTemp();
// 环境温度补偿
if(raw > 30.0) return raw * 0.98 + 0.5;
else return raw * 1.02 - 0.3;
}
5. 关键问题解决方案
5.1 心率信号不稳定
现象: 手指轻微移动导致数据跳变
解决:
- 增加硅胶指套提高贴合度
- 软件端采用中值滤波算法
- 设置信号质量检测(SQ=ADC值方差)
5.2 语音播报延迟
优化方案:
- 预编译常用语音片段为数组
- 采用非阻塞式播报(中断触发)
- 重要报警优先打断当前播报
5.3 低功耗设计
通过以下措施使待机电流<5mA:
- 关闭OLED时拉低SCL引脚
- 传感器间隔采样(心率每2秒一次)
- 单片机进入IDLE模式
6. 成品测试数据
经临床对比测试(与医用监护仪对比):
| 指标 | 本设备 | 专业设备 | 误差 |
|---|---|---|---|
| 心率(bpm) | 76 | 75 | +1.3% |
| 体温(℃) | 36.7 | 36.8 | -0.27% |
| 响应时间 | 2.8s | 1.5s | - |
实际使用中发现,当环境温度低于15℃时,温度测量需要延长3秒稳定时间。建议在寒冷环境使用时,先预热传感器30秒再测量。
