基于STM32F103C8T6的心率与体温监测及报警显示系统设计
基于STM32F103C8T6单片机的心率体温检测与报警系统设计
1 系统功能介绍
本设计是一套基于STM32F103C8T6单片机的多参数人体健康检测与报警系统,旨在实现对心率和体温的实时监测与动态显示,并具备超限报警功能。系统通过心率传感器与温度传感器采集人体关键生理参数,利用TFT彩色液晶显示屏显示实时数据与波形曲线,结合蜂鸣器报警电路提供实时提醒。用户还可以通过按键设置心率报警阈值,实现个性化监测。
系统的主要功能如下:
- 心率与体温检测:通过心率传感器实时采集心率信号,通过DS18B20传感器采集人体体温。
- TFT液晶显示:实时显示心率值、体温值,并绘制心率曲线,直观反映心率变化。
- 阈值设置功能:用户可通过按键设置心率报警阈值,支持数值加减调整。
- 超限报警功能:当心率值超过阈值时,蜂鸣器发出报警,且心率数据显示为红色;当心率值正常时,蜂鸣器关闭,心率数据显示为蓝色。
- 交互性与实时性:系统以人机交互为中心,兼具实时性与可靠性,适合用于日常健康检测、医疗辅助等场景。
该系统不仅能满足日常健康检测需求,还能在老年人心脏病、高血压人群的健康管理中发挥重要作用。
2 系统电路设计
本系统的电路由多个功能模块组成,各模块之间通过STM32单片机进行协同工作。整体采用模块化设计,既方便调试,也为后期功能扩展提供良好的基础。
2.1 STM32F103C8T6单片机核心板电路
STM32F103C8T6是本系统的主控芯片,具有高速、低功耗和丰富的外设接口。其最小系统电路包括以下部分:
- 时钟电路:采用8MHz外部晶振,结合内部PLL倍频电路,为系统提供稳定时钟源。
- 复位电路:通过上拉电阻与复位按键实现,确保系统能够在上电或异常情况下恢复初始状态。
- 电源电路:STM32工作电压为3.3V,使用AMS1117-3.3稳压芯片将外部5V电压稳定转换为3.3V。
2.2 心率传感器电路
心率传感器采用光电式传感器,通过检测指尖血液流动引起的光强变化获取脉搏信号。传感器输出为模拟信号,经信号放大与滤波后输入STM32的ADC口。
- 放大电路:采用运算放大器提高心率信号幅值。
- 滤波电路:通过低通滤波器滤除高频噪声,确保信号平稳。
- 信号输出:连接STM32的ADC通道,实现心率信号采集。
2.3 DS18B20温度传感器电路
DS18B20为数字温度传感器,支持单总线通信,精度高,稳定性强。其特点:
- 工作电压为3.0~5.5V。
- 单总线协议,仅需一个IO口即可实现通信。
- 输出分辨率可选,常用精度为0.0625℃。
温度信号经STM32读取后,直接显示在液晶屏上。
2.4 TFT彩屏显示电路
TFT液晶屏作为主要显示设备,能够显示字符、数据和曲线。
- 接口方式:采用SPI接口,减少STM32 IO口占用。
- 显示内容:实时数据显示、心率曲线绘制、报警颜色提示。
- 人机交互性:通过直观的图形化界面,提高用户体验。
2.5 按键电路
按键用于设置心率报警阈值,分为三类:
- 设置键:进入或退出阈值设置模式。
- 设置+键:在设置模式下增加阈值。
- 设置-键:在设置模式下减少阈值。
按键采用下拉电阻与STM32 GPIO口相连,通过程序实现防抖与功能识别。
2.6 报警电路
报警电路采用蜂鸣器实现,主要作用是在心率超出设定阈值时发出声音提示。
- 有源蜂鸣器:只需单片机输出高低电平即可驱动。
- 驱动电路:为保证蜂鸣器驱动能力,采用三极管驱动电路。
3 程序设计
程序设计部分采用模块化结构,分别实现传感器采集、数据显示、曲线绘制、按键处理、报警逻辑等功能。
3.1 主程序框架
主程序负责系统初始化与功能调用,整体结构清晰,便于维护与扩展。
#include "stm32f10x.h"
#include "tft.h"
#include "ds18b20.h"
#include "adc.h"
#include "key.h"
#include "buzzer.h"int main(void)
{SystemInit();TFT_Init();DS18B20_Init();ADC_Init();KEY_Init();Buzzer_Init();uint16_t heartRate = 0;float temperature = 0;uint16_t threshold = 100;while(1){heartRate = ADC_GetHeartRate();temperature = DS18B20_ReadTemp();TFT_ShowData(heartRate, temperature);if(KEY_SetPressed()) { KEY_SetMode(&threshold); }if(heartRate > threshold){Buzzer_On();TFT_ShowWarning(heartRate, 1);}else{Buzzer_Off();TFT_ShowWarning(heartRate, 0);}Draw_HeartRateCurve(heartRate);delay_ms(200);}
}
3.2 心率采集与曲线绘制程序
心率信号通过ADC采集,并进行简单滤波,提取心率值。
uint16_t ADC_GetHeartRate(void)
{uint16_t adc_value = ADC_GetConversionValue(ADC1);// 信号处理算法(略,可扩展滤波与峰值检测)return adc_value / 10;
}void Draw_HeartRateCurve(uint16_t value)
{static uint16_t x = 0;TFT_DrawPoint(x, 120 - value/2, BLUE);x++;if(x > 239) x = 0; // 循环绘制曲线
}
3.3 DS18B20温度读取程序
DS18B20通过单总线协议实现数据采集,读取的温度值用于显示。
float DS18B20_ReadTemp(void)
{int16_t temp;DS18B20_Start();DS18B20_Wait();DS18B20_Read(&temp);return (float)temp / 16.0;
}
3.4 TFT显示程序
TFT液晶负责数据显示与报警提示,心率值根据状态显示不同颜色。
void TFT_ShowData(uint16_t hr, float temp)
{TFT_ShowString(10, 10, "Heart Rate:");TFT_ShowNum(100, 10, hr, 3);TFT_ShowString(10, 40, "Temperature:");TFT_ShowFloat(120, 40, temp, 2);
}void TFT_ShowWarning(uint16_t hr, uint8_t state)
{if(state){TFT_ShowColorNum(100, 10, hr, 3, RED);}else{TFT_ShowColorNum(100, 10, hr, 3, BLUE);}
}
3.5 按键设置程序
按键用于修改阈值,程序需实现按键防抖与模式切换。
void KEY_SetMode(uint16_t *threshold)
{if(KEY_AddPressed()){(*threshold)++;}if(KEY_SubPressed()){(*threshold)--;}TFT_ShowNum(100, 70, *threshold, 3);
}
3.6 报警程序
蜂鸣器报警逻辑简单,心率超限即启动蜂鸣器。
void Buzzer_On(void)
{GPIO_SetBits(GPIOB, GPIO_Pin_5);
}void Buzzer_Off(void)
{GPIO_ResetBits(GPIOB, GPIO_Pin_5);
}
4 总结
本设计基于STM32F103C8T6单片机,结合心率传感器与DS18B20温度传感器,实现了心率与体温的实时检测。通过TFT彩屏直观显示参数与心率曲线,用户可实时掌握健康状况;通过按键设置心率阈值,并结合蜂鸣器报警,提升了系统的智能化与实用性。
在电路设计上,系统采用模块化设计,电路连接简单,易于实现;在软件设计上,模块划分合理,逻辑清晰,具备较好的扩展性。该系统适合应用于个人健康管理、老年人日常监护以及医疗教学实验等领域,具有较高的应用价值与推广意义。