1 系统功能介绍

本设计是一个 基于 STM32F103C8T6 单片机的心率与体温监测报警系统。系统通过 心率传感器、DS18B20 温度传感器 实时采集人体心率与体温数据,并利用 TFT 彩屏进行动态显示。其独特之处在于不仅可以显示数值,还能够以曲线图的形式展示心率信号变化,直观反映人体状态。同时,系统结合了 按键设置功能与报警机制,实现了心率异常的实时提醒,为健康监护提供了有效手段。

系统主要功能如下:

  1. 实时数据采集与显示

    • TFT 彩屏显示心率与体温的实时数值;
    • 彩屏动态绘制心率曲线,直观显示心率变化趋势。
  2. 阈值设置与按键交互

    • 通过三个按键(设置、加、减)进入参数设置模式;
    • 用户可自定义心率报警阈值,适应个性化健康需求。
  3. 异常报警机制

    • 当当前心率值超过设置阈值,蜂鸣器发出报警;
    • TFT 彩屏将心率数值变为红色,警示用户;
    • 在正常范围内,数值显示为蓝色,且蜂鸣器不响。
  4. 扩展性强

    • 可以扩展存储功能,保存历史心率与体温曲线;
    • 可加入无线模块(如蓝牙/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 按键电路

本设计使用三个按键:

  1. 设置键:进入阈值设置模式;
  2. 加键:在设置模式下,增加心率阈值;
  3. 减键:在设置模式下,减少心率阈值。
    按键采用下拉电阻处理,并在软件中增加消抖功能,保证可靠输入。

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 单片机的心率与体温监测报警系统。系统不仅能实时采集和显示心率、体温数据,还能以曲线方式动态展示心率变化趋势,使监测更加直观。通过 按键交互,用户可灵活设置心率报警阈值,并在心率异常时通过 蜂鸣器与颜色提示进行预警。

本系统的优点总结如下:

  1. 数据直观可视化:通过 TFT 彩屏显示数值和曲线,增强用户体验;
  2. 灵活的交互功能:按键阈值设置实现个性化监控;
  3. 实时报警机制:异常心率及时提醒,保障健康安全;
  4. 模块化设计:心率传感器、DS18B20、LCD、蜂鸣器均采用独立模块,便于扩展;
  5. 应用前景广阔:可应用于健康监测、老人护理、运动检测等领域。

该系统既是嵌入式课程的良好实验案例,也为智能健康监测设备的开发提供了技术参考。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐