基于STM32 单片机的心电监测系统设计
2023-09-27张翠玉王军敏胡海峰
张翠玉,王军敏,胡海峰
(平顶山学院 信息工程学院,河南平顶山,467000)
0 引言
心血管疾病严重威胁人类健康和生命安全,需要对此类疾病患者进行科学高效地监测[1]。但现有的心电监测系统存在一些不足,例如操作复杂、价格昂贵等。为了解决上述问题,本文设计一个微型化、智能化、便携式的心电监测系统,使用户能实时便捷地、不受外界环境条件限制地对自身心电信号进行监测。
1 系统总体设计
基于STM32 单片机的心电监测系统设计主要包含硬件和软件两部分。一方面控制硬件利用传感器采集各项数据并显示到TFT 显示屏上,当心率值和体温超过阈值则发出警报;另一方面通过蓝牙模块将数据信息发送至移动端APP,达到远程实时查看的功能。
该系统主要实现心率监测、温度监测、运动步数和状态监测。心电监测系统的STM32 主控单元负责接收数据,当读取到心率值或温度超过阈值时,蜂鸣器启动报警。此外,主控将数据读取后,可以通过蓝牙模块将数据上传到移动客户端,实现数据在客户端APP 的实时显示,用户还可以通过手机APP 下发命令,实现对系统的远程控制。
图1 展示了该系统的架构图。该系统可以完成各项数据的采集,按键控制、阈值的设置和长鸣报警,数据信息的远距离无线传输以及用户远程的控制操作。
图1 基于STM32 单片机的心电监测系统原理图
2 硬件系统设计
■2.1 脉搏心率检测模块电路设计
本系统采用Pulsesensor 脉搏心率传感器对用户的心率进行检测,此传感器是集成了放大电路和噪声消除电路的光学心率传感器[2]。另外选择LM393 比较器将进行波形滤波,使传感器输出信号转换为标准方波信号,更利于单片机采集,保证了信号的稳定检测。图2 为利用LM393 比较器模块对Pulsesensor 脉搏心率传感器模块滤波的电路原理图。
■2.2 温度检测电路设计
采用DS18B20 温度传感器检测用户体温,DS18B20 是常用的数字温度传感器,其输出的是数字信号,具有体积小、硬件开销低、抗干扰能力强、精度高的特点[3]。DS18B20 的工作电源为3.0~5.5V,测温范围为-55℃~ +125℃。图3 为温度检测模块的电路原理图,VCC 接5V 电源,GND 接地。
图3 温度检测电路原理图
■2.3 倾角检测电路设计
本系统采用ADXL345 倾角传感器检测用户的运动步数和运动状态,ADXL345 是一款小而薄的超低功耗3轴加速度计,测量范围达± 16g[4]。ADXL345 非常适合移动设备应用,它可以在倾斜检测应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。该器件具有较高的空间分辨能力,能够测量不到1.0°的倾斜角度变化。图4 为倾角检测电路的原理图。
图4 倾角检测电路原理图
■2.4 蜂鸣器报警电路设计
本系统所采用的报警模块为5V有源蜂鸣器模块,电路中采用三极管9012 来驱动,只要单片机控制引脚为高电平,蜂鸣器就会鸣叫报警,反之则不报警[5]。可以通过控制单片机引脚方波输出形式控制蜂鸣器的鸣叫方式。电阻为限流电阻,起保护作用。图5 为蜂鸣器报警电路的原理图。
图5 蜂鸣器报警电路原理图
■2.5 显示电路设计
本系统的显示电路采用2.4 寸TFT彩屏模块,具有高亮度、高对比度、层次感强、色彩鲜艳等优点。TFT 液晶为每个像素都设有一个半导体开关,每个像素都可以通过点脉冲直接控制,因而每个节点都相对独立,并可以连续控制。图6 为显示电路的原理图。
图6 显示电路原理图
3 软件系统设计
■3.1 主程序流程设计
STM32 单片机使用单线接口方式连接DS18B20 模块,通过一个IO 口改变输入输出状态并读取温度数据。利用STM32 的AD 采集功能实时采集心率传感器信号输出引脚输出的模拟电压,通过将采集到的模拟信号在STM32 内部进行运算处理,将数据波形实时显示到TFT 显示屏上。当心率值和体温超标时,驱动蜂鸣器进行报警。使用USART 串口进行单片机与蓝牙模块的通信,然后将采集到的数据发送至手机APP,从而进行数据的可视化显示,同时可以在APP 界面进行一些控制命令的下发,如修改心率值和体温的阈值。图7 为主程序的工作流程图。
图7 主程序的工作流程图
■3.2 子程序流程设计
3.2.1 温度检测子程序设计
首先复位DS18B20 温度传感器,初始化DS18B20 的IO 口,检测DS 是否存在,若不存在则返回0 然后继续检测,若存在则传感器开始读取采集到的数据,读取到数据后进行温度值转换,转换成功后返回精确度为0.1 的温度值。图8(a)为温度检测子程序的工作流程图。
图8 子程序的工作流程图
3.2.2 心率检测子程序设计
首先进行心率数组、心率滤波计数、心率延时处理、心率值等变量的定义,初始化光电心率传感器,设置滤波防止抖动的定时周期为300ms,滤波滤掉手指未放的情况。记录前后两次事件的间隔,记录超过4 次后进行滤波处理,每次定时5ms,取60s 内4 次数据的平均值,得到心率值,最后进行延时清零。图8(b)为心率检测子程序的工作流程图。
3.2.3 倾角检测子程序流程设计
首先初始化ADXL345,设置数据传输速度为100Hz 并开启测量模式,读取x,y,z 三个轴的数据并存储在BUF 中,接着连续读取ADXL345 times 次数后根据次数取平均值,计算数据后得到角度。最后根据角度变化判断出运动步数和状态,返回步数值和运动状态。图8(c)为倾角检测子程序的工作流程图。
■3.3 客户端软件系统设计
本系统的手机端基于Eclipse 进行APP 开发,这是一款基于Java 的可扩展开发平台。Eclipse 具有强大的代码辅助功能,能够帮助程序开发人员自动完成语法、补全文字、代码修正、API 提示等编码工作,可以节省大量的开发时间[6]。
在设计本系统的界面时,从开发界面左边的表单、空格和文本框中根据需要进行选择,然后拖动到设计界面上的相应位置,并根据需要在右侧工作区的属性栏中修改属性,如文字的颜色、字体大小等。本系统设计的移动终端界面如图9 所示,可以在主界面对心率值、体温、运动步数以及运动状态等数据进行实时显示,并且可以在移动终端对心率值和体温的阈值进行设置。
图9 移动端主界面
4 结论
本文采用STM32 单片机、多种传感器和蓝牙模块设计一个心电监测系统,该系统以STM32 单片机为控制核心,使用Pulsesensor 脉搏心率传感器、DS18B20 温度传感器等多种类型的传感器采集各项数据,并利用蓝牙通信模块将数据传送至移动客户端,用户可通过客户端APP 远程实时查看心率值和体温状况,具有重要的应用价值。