基于STM32单片机的心率曲线体温测量设计
本文介绍了一种基于STM32F103C8T6的心率体温监测报警系统。系统通过光电心率传感器和DS18B20温度传感器采集数据,在TFT彩屏上实时显示数值和心率曲线图。采用按键设置心率报警阈值,当心率异常时触发蜂鸣器报警并将数值变红警示。系统采用模块化设计,包含STM32最小系统、传感器电路、显示模块和报警电路等部分。程序设计实现了数据采集、波形绘制、温度读取、阈值设置和报警检查等功能。该系统具有数
1 系统功能介绍
本设计是一个 基于 STM32F103C8T6 单片机的心率与体温监测报警系统。系统通过 心率传感器、DS18B20 温度传感器 实时采集人体心率与体温数据,并利用 TFT 彩屏进行动态显示。其独特之处在于不仅可以显示数值,还能够以曲线图的形式展示心率信号变化,直观反映人体状态。同时,系统结合了 按键设置功能与报警机制,实现了心率异常的实时提醒,为健康监护提供了有效手段。
系统主要功能如下:
-
实时数据采集与显示
- TFT 彩屏显示心率与体温的实时数值;
- 彩屏动态绘制心率曲线,直观显示心率变化趋势。
-
阈值设置与按键交互
- 通过三个按键(设置、加、减)进入参数设置模式;
- 用户可自定义心率报警阈值,适应个性化健康需求。
-
异常报警机制
- 当当前心率值超过设置阈值,蜂鸣器发出报警;
- TFT 彩屏将心率数值变为红色,警示用户;
- 在正常范围内,数值显示为蓝色,且蜂鸣器不响。
-
扩展性强
- 可以扩展存储功能,保存历史心率与体温曲线;
- 可加入无线模块(如蓝牙/WIFI),实现远程健康监控;
- 可在未来升级为完整的智能穿戴监测系统。
2 系统电路设计
2.1 STM32 最小系统
本设计选用 STM32F103C8T6 作为核心处理器,主频 72MHz,内置丰富的外设接口,适合高速采集与图形处理。最小系统包括:
- 电源电路:使用 AMS1117-3.3 稳压芯片,将 5V 电压稳定为 3.3V;
- 时钟电路:外接 8MHz 晶振,确保系统运行稳定;
- 复位与下载电路:支持串口下载与 SWD 调试。
2.2 心率传感器电路
心率传感器采用 光电式心率传感器(如 MAX30102/模拟传感器模块),其输出为模拟信号,经 ADC 转换后由单片机采集:
- 输出心率脉冲波形;
- 通过 ADC 定时采样,获得连续心率信号;
- 在 TFT 屏幕上绘制曲线,反映心率变化。
2.3 DS18B20 温度传感器
DS18B20 是一种常用的数字温度传感器,采用单总线通信,测温精度高。其主要特点:
- 测温范围:-55℃ ~ +125℃;
- 分辨率可配置为 9~12 位;
- 与 STM32 连接仅需一条数据线,硬件开销低。
2.4 TFT 彩屏显示模块
系统选用 TFT LCD(如 2.4/2.8 英寸 ILI9341 驱动屏):
- 通过 SPI 或并口与 STM32 通信;
- 显示心率数值、体温数值;
- 绘制心率实时曲线,动态刷新显示;
- 使用不同颜色显示数据状态(蓝色/红色)。
2.5 报警电路
蜂鸣器报警电路由单片机 GPIO 控制:
- 当心率超过阈值,蜂鸣器驱动晶体管导通,发出声响;
- 在心率恢复正常后,蜂鸣器关闭,提示结束。
2.6 按键电路
本设计使用三个按键:
- 设置键:进入阈值设置模式;
- 加键:在设置模式下,增加心率阈值;
- 减键:在设置模式下,减少心率阈值。
按键采用下拉电阻处理,并在软件中增加消抖功能,保证可靠输入。
3 程序设计
3.1 主程序框架
#include "stm32f10x.h"
#include "lcd.h"
#include "ds18b20.h"
#include "adc.h"
#include "key.h"
#include "beep.h"
#include "delay.h"
int HeartRate = 0;
int Temperature = 0;
int Threshold = 100; // 默认心率报警阈值
u8 SetMode = 0; // 设置模式标志位
int main(void)
{
SystemInit();
LCD_Init();
DS18B20_Init();
ADC_Init();
Key_Init();
BEEP_Init();
Delay_Init();
LCD_Clear(WHITE);
LCD_ShowString(10,10,"Heart & Temp Monitor");
while(1)
{
HeartRate = Get_HeartRate();
Temperature = DS18B20_GetTemp();
Display_Data(HeartRate, Temperature);
Display_Waveform(HeartRate);
Key_Process();
Alarm_Check(HeartRate);
}
}
3.2 心率采集与曲线绘制
int Get_HeartRate(void)
{
u16 adc_val = ADC_GetConversionValue(ADC1);
int hr = adc_val / 10; // 简化换算,实际需滤波与峰值检测
return hr;
}
void Display_Waveform(int hr)
{
static int x = 0;
int y = 120 - hr; // 映射屏幕坐标
LCD_DrawPoint(x, y, BLUE);
x++;
if(x >= 240)
{
x = 0;
LCD_Clear(WHITE);
}
}
3.3 DS18B20 温度采集
int DS18B20_GetTemp(void)
{
float temp;
DS18B20_Start();
Delay_ms(750);
temp = DS18B20_Read();
return (int)temp;
}
3.4 按键逻辑与阈值设置
void Key_Process(void)
{
int key = Key_Scan();
if(key == KEY0_PRES) // 设置键
{
SetMode = !SetMode;
if(SetMode) LCD_ShowString(10,220,"Set Mode ON");
else LCD_ShowString(10,220,"Set Mode OFF");
}
else if(SetMode && key == KEY1_PRES) // 阈值+
{
Threshold += 5;
LCD_ShowNum(150,220,Threshold,3,RED);
}
else if(SetMode && key == KEY2_PRES) // 阈值-
{
Threshold -= 5;
LCD_ShowNum(150,220,Threshold,3,RED);
}
}
3.5 报警逻辑
void Alarm_Check(int hr)
{
if(hr > Threshold)
{
BEEP_ON();
LCD_ShowNum(100,50,hr,3,RED);
}
else
{
BEEP_OFF();
LCD_ShowNum(100,50,hr,3,BLUE);
}
}
4 总结
本设计实现了一个 基于 STM32F103C8T6 单片机的心率与体温监测报警系统。系统不仅能实时采集和显示心率、体温数据,还能以曲线方式动态展示心率变化趋势,使监测更加直观。通过 按键交互,用户可灵活设置心率报警阈值,并在心率异常时通过 蜂鸣器与颜色提示进行预警。
本系统的优点总结如下:
- 数据直观可视化:通过 TFT 彩屏显示数值和曲线,增强用户体验;
- 灵活的交互功能:按键阈值设置实现个性化监控;
- 实时报警机制:异常心率及时提醒,保障健康安全;
- 模块化设计:心率传感器、DS18B20、LCD、蜂鸣器均采用独立模块,便于扩展;
- 应用前景广阔:可应用于健康监测、老人护理、运动检测等领域。
该系统既是嵌入式课程的良好实验案例,也为智能健康监测设备的开发提供了技术参考。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)