当前位置: 首页 > news >正文

基于STM32F103C8T6的心率与体温监测及报警显示系统设计

基于STM32F103C8T6单片机的心率体温检测与报警系统设计

1 系统功能介绍

本设计是一套基于STM32F103C8T6单片机的多参数人体健康检测与报警系统,旨在实现对心率和体温的实时监测与动态显示,并具备超限报警功能。系统通过心率传感器与温度传感器采集人体关键生理参数,利用TFT彩色液晶显示屏显示实时数据与波形曲线,结合蜂鸣器报警电路提供实时提醒。用户还可以通过按键设置心率报警阈值,实现个性化监测。

系统的主要功能如下:

  1. 心率与体温检测:通过心率传感器实时采集心率信号,通过DS18B20传感器采集人体体温。
  2. TFT液晶显示:实时显示心率值、体温值,并绘制心率曲线,直观反映心率变化。
  3. 阈值设置功能:用户可通过按键设置心率报警阈值,支持数值加减调整。
  4. 超限报警功能:当心率值超过阈值时,蜂鸣器发出报警,且心率数据显示为红色;当心率值正常时,蜂鸣器关闭,心率数据显示为蓝色。
  5. 交互性与实时性:系统以人机交互为中心,兼具实时性与可靠性,适合用于日常健康检测、医疗辅助等场景。

该系统不仅能满足日常健康检测需求,还能在老年人心脏病、高血压人群的健康管理中发挥重要作用。


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彩屏直观显示参数与心率曲线,用户可实时掌握健康状况;通过按键设置心率阈值,并结合蜂鸣器报警,提升了系统的智能化与实用性。

在电路设计上,系统采用模块化设计,电路连接简单,易于实现;在软件设计上,模块划分合理,逻辑清晰,具备较好的扩展性。该系统适合应用于个人健康管理、老年人日常监护以及医疗教学实验等领域,具有较高的应用价值与推广意义。

http://www.xdnf.cn/news/1479853.html

相关文章:

  • 如何在 FastAPI 中巧妙覆盖依赖注入并拦截第三方服务调用?
  • vue + ant-design-vue + vuedraggable 实现可视化表单设计器
  • 用 PHP 玩向量数据库:一个从小说网站开始的小尝试
  • 多维度数据统一线性处理的常见方案
  • 鸿蒙libxm2交叉编译
  • (2)桌面云、并行计算、分布式、网格计算
  • LeetCode5最长回文子串
  • 基于Spark的中文文本情感分析系统研究
  • 空间配置器
  • 【STM32HAL-----NRF24L01】
  • leetcode LCR 159 库存管理III
  • Qt网络通信服务端与客户端学习
  • 第5章递归:分治法
  • Qt文字滚动效果学习
  • MySQL 高可用方案之 MHA 架构搭建与实践
  • 常用配置文件
  • 去中心化投票系统开发教程 第三章:智能合约设计与开发
  • [网络入侵AI检测] docs | 任务二分类与多分类
  • 算法题-链表03
  • react native 出现 FATAL EXCEPTION: OkHttp Dispatcher
  • LeetCode 2841.几乎唯一子数组的最大和
  • AI智能体架构全流程全解析
  • [光学原理与应用-432]:非线性光学 - 既然光也是电磁波,为什么不能直接通过电生成特定频率的光波?
  • 打造一款高稳定、低延迟、跨平台RTSP播放器的技术实践
  • 基于FPGA的电梯控制系统设计(论文+源码)
  • 动态内存分配
  • DeepSeek辅助在64位Linux中编译运行32位的asm-xml-1.4程序
  • Day22_【机器学习—集成学习(1)—基本思想、分类】
  • leetcode 215 数组中的第K个最大元素
  • Jupyter Notebook与cpolar:构建跨地域数据科学协作平台