基于51单片机智能手环脉搏心率检测GSM短信报警

发布于:2025-08-16 ⋅ 阅读:(15) ⋅ 点赞:(0)

1 系统功能介绍

本系统是一款基于 STC89C52 单片机 的智能手环脉搏与心率检测装置,并配备 GSM 短信报警功能。通过集成 DS1302 实时时钟模块心率传感器SIM800 GSM 模块LCD1602 液晶显示屏按键输入,该手环能够实现时间显示、心率实时监控及异常心率报警等功能。

系统可佩戴在手腕上,实时监测佩戴者的脉搏和心率数据。当检测到心率超过 120 次/分钟的危险阈值时,系统将自动通过 GSM 模块向预设的手机号码发送报警短信(内容为 “Help me!”),并且为了避免短时间重复报警,短信触发设定有 20 秒的间隔机制。

主要功能特点如下:

  1. 时间与心率双显示

    • 液晶显示屏第一行显示当前时间;
    • 第二行显示实时脉搏/心率数据。
  2. 时间设置功能

    • 通过按键修改时间;
    • 支持整点和半点快速调整。
  3. 心率监控开关

    • 用户可通过按键切换心率监控功能的开关;
    • 液晶显示当前监控状态。
  4. GSM 短信报警

    • 当心率监控开启且检测值超过 120 次/分钟时,SIM800 GSM 模块向绑定号码发送报警短信“Help me!”;
    • 每次触发后,需等待 20 秒方可再次发送。

2 系统电路设计

2.1 单片机最小系统

系统的核心控制器为 STC89C52 单片机,其具备丰富的 I/O 口和稳定的处理能力,适用于多模块协作场景。

  • 晶振电路:使用 12MHz 晶振,为单片机提供稳定的工作时钟。
  • 复位电路:由电容、电阻和复位按键构成,上电时自动复位,用户可手动复位。
  • 电源电路:提供稳定的 +5V 直流电压,部分外设如 SIM800 通过降压电路获得 +4V 电源。

2.2 实时时钟模块 DS1302

DS1302 是一款低功耗实时时钟芯片,内置秒、分、时、日、月、年计时单元,并带有闰年补偿功能。

  • 接口方式:串行通信(3 线制),占用单片机 3 个 I/O 口。
  • 优点:掉电后依靠备用电池保持时间数据不丢失。
  • 作用:为 LCD 提供时间显示数据,并可通过按键对时间进行整点或半点的调整。

2.3 心率传感器

心率传感器负责检测佩戴者脉搏信号,并计算心率值。

  • 原理:通过光电容积脉搏波(PPG)技术测量血流变化,将信号转换为电信号输出。
  • 接口:可输出模拟信号,经过单片机内部定时与脉冲计数计算 BPM(每分钟心跳数)。
  • 应用:在心率监控开启的情况下,实时采集并计算心率值,与设定阈值进行比较。

2.4 GSM 模块 SIM800

SIM800 GSM 模块用于发送报警短信。

  • 接口:UART 串口,与单片机 TXD/RXD 相连,波特率一般设定为 9600bps。
  • 控制方式:使用 AT 指令进行短信发送控制。
  • 应用逻辑:当心率超过 120 BPM 时,模块向设定手机号码发送“Help me!”短信。

2.5 LCD1602 液晶显示模块

LCD1602 显示屏分为两行:

  • 第一行:显示当前时间(格式:HH:MM:SS);
  • 第二行:显示心率值(单位 BPM)和监控状态。
  • 接口:8 位并行数据总线,或通过 4 位模式节省单片机 I/O 口。

2.6 按键模块

系统设计多个按键,分为:

  • 时间调整键:用于修改小时、分钟,支持整点与半点跳变。
  • 模式切换键:开启或关闭心率监控功能。
    按键采用下拉电阻方式,按下时输出低电平,单片机检测按键状态后执行对应功能。

2.7 电源系统

手环由锂电池供电,并通过 DC-DC 转换提供稳定的 5V 和 4V 电源。

  • 单片机、LCD、DS1302 使用 5V 供电;
  • SIM800 使用 4V 供电,防止过压损坏模块。

3 程序设计

3.1 主程序框架

系统采用循环扫描方式,主程序不断调用时间读取、心率采集、按键检测、LCD 刷新和 GSM 短信报警等功能函数。

#include <reg52.h>
#include "ds1302.h"
#include "lcd1602.h"
#include "heartrate.h"
#include "gsm.h"
#include "key.h"

unsigned int heartRate = 0;
bit monitorOn = 0; 
unsigned long lastSmsTime = 0;

void main()
{
    LCD_Init();
    DS1302_Init();
    GSM_Init();
    Key_Init();
    Timer_Init();
    
    while(1)
    {
        Display_Time();      
        Display_HeartRate(heartRate, monitorOn);
        Key_Scan();
        
        if(monitorOn)
        {
            heartRate = HeartRate_Read();
            if(heartRate > 120 && (GetSysTime() - lastSmsTime > 20000))
            {
                GSM_SendSMS("Help me!");
                lastSmsTime = GetSysTime();
            }
        }
    }
}

3.2 时间显示与设置模块

void Display_Time(void)
{
    Time t = DS1302_ReadTime();
    LCD_SetCursor(0,0);
    LCD_Printf("%02d:%02d:%02d", t.hour, t.min, t.sec);
}

void Set_Time_Hour(void)
{
    // 按键触发,整点或半点调整
}

逻辑:实时读取 DS1302 时间 → 显示到 LCD 第一行 → 按键可修改整点或半点时间。


3.3 心率采集与计算模块

unsigned int HeartRate_Read(void)
{
    // 读取传感器输出脉冲,计算一分钟心率
    return bpm;
}

通过定时器计数脉冲数并换算为 BPM(beats per minute),结果显示在 LCD 第二行。


3.4 GSM 短信报警模块

void GSM_SendSMS(char *text)
{
    GSM_SendCmd("AT\r");
    GSM_SendCmd("AT+CMGF=1\r");
    GSM_SendCmd("AT+CMGS=\"+8613800000000\"\r");
    GSM_SendText(text);
    GSM_SendCtrlZ();
}

流程:发送 AT 指令设置短信模式 → 输入短信内容 → 发送控制字符 0x1A(Ctrl+Z)发送。


3.5 按键扫描与功能切换模块

void Key_Scan(void)
{
    if(Key_Pressed(KEY_MODE))
    {
        monitorOn = !monitorOn;
    }
    if(Key_Pressed(KEY_TIME))
    {
        Set_Time_Hour();
    }
}
  • 模式键:切换心率监控开关;
  • 时间键:修改 DS1302 时间。

4 总结

本设计基于 STC89C52 单片机,将时间显示、心率检测与 GSM 短信报警集成在一个便携式智能手环中。通过 DS1302 提供稳定的时间显示功能,心率传感器实现实时脉搏采集,SIM800 模块完成紧急短信发送。系统支持按键调整时间与监控模式,报警逻辑简洁高效,并通过设定触发间隔避免短信轰炸。

该系统可广泛应用于老人、心脏病患者的日常健康监测,也可用于运动员的心率防护监控。未来可在此基础上加入蓝牙传输、GPS 定位等功能,实现更全面的健康与安全管理。


网站公告

今日签到

点亮在社区的每一天
去签到