基于STM32单片机生理监控心率脉搏TFT彩屏波形曲线加体温测量
1. 系统功能介绍
本设计的题目为基于STM32单片机生理监控心率脉搏TFT彩屏波形曲线加体温测量。整个系统的核心在于通过传感器采集人体的关键生理参数,并利用STM32单片机进行处理,最终将数据以可视化的方式在TFT液晶上显示出来。与传统的心率体温检测仪不同,本系统不仅能够提供心率和体温的实时数值,还能绘制动态曲线,直观反映心率的波动情况。
系统的主要功能如下:
- 实时监测与显示:通过心率传感器与温度传感器,采集人体心率、脉搏信号以及体温,并在TFT液晶上实时显示。
- 曲线绘制:系统能够将心率传感器输出的模拟信号经过A/D采样和处理后绘制成曲线,用户能够直观观察心率的动态变化。
- 阈值报警功能:系统支持通过按键设置心率报警阈值,当检测值超过阈值时,蜂鸣器报警,同时显示数值变为红色警示。若未超出阈值,蜂鸣器保持静音,数值以蓝色显示。
- 按键设置功能:用户可通过“设置按键”进入阈值设置模式,并使用“设置+”、“设置-”按键来调节心率报警阈值,设置直观、操作简单。
- 多功能显示:系统不仅显示心率与体温的数值,还能同时显示心率波形,增强数据的直观性与可读性。
该系统的设计不仅适合用于家庭健康监护,同时在医疗教学实验、运动训练监控等方面也具有应用价值。
2. 系统电路设计
本系统由STM32F103C8T6单片机作为核心控制器,外设电路包括心率传感器模块、DS18B20温度传感器、TFT彩屏显示模块、按键电路和蜂鸣器报警电路。以下对各部分进行详细介绍。
2.1 STM32F103C8T6单片机核心电路
STM32F103C8T6是基于ARM Cortex-M3内核的32位单片机,主频72MHz,内置丰富的外设接口如GPIO、ADC、定时器、USART、SPI、I2C等,非常适合本系统的多任务需求。
在本系统中,STM32主要承担以下功能:
- 接收心率传感器的模拟信号并通过ADC进行采样。
- 读取DS18B20传感器的数字温度数据。
- 驱动TFT彩屏,显示数值及绘制曲线。
- 读取按键输入,执行阈值设置逻辑。
- 控制蜂鸣器,实现超阈值报警功能。
2.2 心率传感器电路
心率传感器通过光电容积脉搏波(PPG)原理工作。传感器发射红外或绿光穿过手指,光敏元件接收反射或透射光的强弱变化,进而反映血液脉动信息。传感器将信号输出为模拟电压信号。
STM32的ADC通道负责对模拟信号进行采样,通过滤波和峰值检测算法提取心率值。与此同时,采样信号会被用于绘制波形曲线,实现动态显示。
2.3 DS18B20温度传感器电路
DS18B20是一款数字温度传感器,单总线通信方式,测温精度高,适合人体体温测量。其测量范围为-55℃至+125℃,精度可达±0.5℃。
在本系统中,STM32通过单总线与DS18B20通信,定时读取温度值并显示在液晶屏上。体温测量功能补充了心率监控,实现更全面的生理参数检测。
2.4 TFT彩屏显示电路
TFT彩屏作为人机交互的核心界面,能够直观显示心率、体温、报警信息及心率曲线。显示内容主要包括:
- 数字显示当前心率与体温值。
- 曲线区域实时绘制心率波形。
- 阈值设置信息与报警提示。
STM32通过SPI接口与TFT屏通信,利用专用驱动库完成数据绘制与刷新。
2.5 按键电路
本系统设计三个按键:
- 设置键:进入或退出阈值设置模式。
- 加键:在设置模式下增加心率阈值。
- 减键:在设置模式下减少心率阈值。
按键采用上拉电阻方式,按下时输入低电平。STM32通过GPIO口读取按键状态,结合消抖程序确保按键响应可靠。
2.6 蜂鸣器报警电路
蜂鸣器采用有源蜂鸣器,控制简单,只需提供高低电平信号即可发声。
- 当心率超过阈值时,STM32输出高电平驱动蜂鸣器报警,同时将心率值以红色显示。
- 当心率在正常范围时,蜂鸣器关闭,心率值以蓝色显示。
3. 程序设计
程序设计是系统实现的关键环节。本系统采用模块化编程思路,将不同功能划分为独立的程序模块,分别介绍如下。
3.1 主程序设计
主程序作为系统核心,负责初始化各模块、调用传感器采集数据、刷新显示、处理按键输入及执行报警逻辑。
主要任务流程如下:
- 系统初始化(时钟、GPIO、ADC、SPI等外设)。
- 进入主循环,依次执行数据采集、数据处理、曲线绘制、按键处理和报警判断。
- 定时任务负责更新屏幕显示和绘制曲线。
示例代码:
int main(void)
{SystemInit(); // 系统时钟初始化LCD_Init(); // TFT液晶初始化DS18B20_Init(); // 温度传感器初始化ADC_Config(); // ADC配置用于心率采样Key_Init(); // 按键初始化Buzzer_Init(); // 蜂鸣器初始化while(1){float temp = DS18B20_ReadTemp(); // 读取体温int heart = HeartRate_GetValue(); // 获取心率LCD_DisplayData(temp, heart); // 显示数据Curve_Draw(heart); // 绘制心率曲线Key_Scan(); // 检测按键Alarm_Check(heart); // 报警判断}
}
3.2 心率检测程序设计
心率检测主要通过ADC采样心率传感器输出信号,然后经过滤波、峰值检测和周期计算得到心率值。
关键步骤:
- 采样频率设置为200Hz左右,保证捕捉脉搏波。
- 使用滑动平均滤波算法去除高频噪声。
- 峰值检测提取脉搏波周期,计算心率值。
示例代码:
int HeartRate_GetValue(void)
{static int heartRate = 0;static int sampleCount = 0;int adcValue = ADC_Read(); // 简单滤波adcValue = LowPassFilter(adcValue);// 峰值检测if(IsPeak(adcValue)) {heartRate = CalculateHeartRate();}sampleCount++;return heartRate;
}
3.3 温度测量程序设计
温度测量模块负责通过单总线协议与DS18B20通信,周期性读取体温并显示。
示例代码:
float DS18B20_ReadTemp(void)
{uint16_t temp;DS18B20_Start();Delay_ms(750);temp = DS18B20_Read();return (float)temp / 16.0; // 转换为摄氏度
}
3.4 TFT彩屏显示程序设计
显示模块负责输出心率、体温数值以及绘制心率曲线。
示例代码:
void LCD_DisplayData(float temp, int heart)
{LCD_ShowString(10, 10, "Heart Rate:");LCD_ShowNum(120, 10, heart, 3, BLUE);LCD_ShowString(10, 30, "Temp:");LCD_ShowNum(120, 30, (int)temp, 2, GREEN);
}
3.5 按键控制程序设计
通过扫描按键状态实现阈值的设置与调节。
示例代码:
void Key_Scan(void)
{if(Key_Read(SET_KEY) == 0) { settingMode = !settingMode; }if(settingMode){if(Key_Read(ADD_KEY) == 0) { threshold++; }if(Key_Read(SUB_KEY) == 0) { threshold--; }}
}
3.6 报警程序设计
报警模块根据心率值与阈值进行比较,执行蜂鸣器报警与颜色切换。
示例代码:
void Alarm_Check(int heart)
{if(heart > threshold){Buzzer_On();LCD_SetColor(RED);}else{Buzzer_Off();LCD_SetColor(BLUE);}
}
4. 总结
本系统基于STM32单片机,结合心率传感器与温度传感器,实现了心率、脉搏波形及体温的实时检测和显示,并通过TFT液晶直观展现数据。系统具备阈值报警功能,保障使用者能够在心率异常时及时获知风险。通过模块化电路设计与程序实现,该系统不仅满足家庭健康监测的需求,同时具有科研教学和运动医学方面的应用前景。
整个设计充分体现了嵌入式系统在健康监测领域的优势,将传感器技术、信号处理、数据可视化和人机交互有机结合,展示了STM32在医疗电子中的广泛应用潜力。