熊宇,陶曾杰,彭勇,范湘玉,何红梅
(湖南信息学院 电子科学与工程学院,湖南长沙,410151)
随着中国老龄化越来越严重,依据第七次人口普查的结果表明,国家60 岁以上的老龄人口已经达到了2.6 亿,比例占总人口数的18.7%[1}。中国老年人的身体健康不容乐观,根据对全国老年人的健康水平调查,只有20%~25%的老年人主要器官处于健康状态[2]。这些数据预示着我们国家在医疗这一块以及社会经济压力、医疗保险等方面都有着巨大的压力和挑战。现实中大多数人由于工作原因,导致生活作息不规律,饮食的随便性,给自身的健康带来了极大的隐患。因此,设计一款体感检测装置,通过健康监护设备,对佩戴者的身体机能实时检测,为其健康做保障,尤其是老年人,可以实时监测其健康参数,并将数据发送到手机或子女手机上。
此系统首先要研究的内容是根据需求选择采集生理数据的传感器型号,能够采集到体温、心率以及人体姿态等数据。通过STM32 主控单元对传感器的采集原理进行分析,对数据进行相应的算法来得到稳定的数值。把采集得到的监测值通过显示屏显示,进而可以时刻监测生理参数,最终实现基于STM32 体感检测装置的研究和设计。通过温度传感器和心率血氧传感器采集到的信号,通过约定好的通信协议传递给主控单元,主控单元对其做出分析和处理,从而获得个人生命体征值。显示模块通过协议与主控单元进行通信,把采集到的数据显示到屏幕上,方便使用者及时地观看采集到的数据,时钟模块可用于为使用者提供提醒服务,声光提示模块在检测的数据超过正常范围时进行报警。系统总体构成框架如图1 所示。
图1 总体结构框图
主控通过I2C 协议即可对MAX30102 心率传感器中的数据进行读取,大幅度提高了开发的效率,减少的主控处理器的负担。模块会发出两种特定波长的光,当人体肌肤接收了两种不同的光,再反射回来经过了光电检测器,这时光电传感器将光信号转换为电信号[3]。经电路放大后,通过模数转换芯片把AD 转化为DC,并将处理后的数据存储在其内部寄存器中。再由STM32F103VET6 的I2C 接口读取,最后通过串口发送到主控单元中。MAX30102 心率传感器电路设计如图2 所示。
图2 心率传感器电路设计图
本设计利用DS18B201 温度传感器对人体温度进行测量,DS18B20 是一款非常常用的高精度数字测温芯片,单线通信协议,通过DQ 进行数据的收发[4]。在接收到数据时,它的输入是高阻态;发送数据时,它的输出是开漏输出。本身没有输出高电平的能力。也就是说,输出0 时在MOS 中下拉到0,输出1 时变为高电阻。它必须连接外部上拉电阻才能将其拉到高电平。否则,不能输出1。DS18B20 引脚DQ 连接于主控单元STM32F103VET6 的PB5。DS18B20电路设计图如图3 所示。
图3 温度传感器电路设计
本系统使用MPU6050 模块监测人体加速度变化,进行摔倒检测。MPU6050 是可以通过I2C 接口与微控制器通信,MPU6050 对陀螺仪和加速度计分别集成了三个16 位的ADC,并将其测量的模拟量转化为可输出的数字量[5]。I2C 接口电路需要包括SDA 和SCL 两个信号线,以及上拉电阻。在设计时,需要注意I2C 总线的抗干扰能力和通信速率。采用4.7kΩ 的上拉电阻,可以保证I2C 信号的稳定和可靠传输。一般使STM32 的GPIO 引脚可以设置为上拉模式,以替代使用外部上拉电阻。在输入模式下,使能上拉会将引脚拉高至逻辑高电平,从而有效地实现了上拉功能。这样可以减少外部元件,简化设计。对于需要高速传输的应用,对寄存器的读取和中断使用的是20MHz 的SPI。模块采用3.3V 的直流电源供电,MPU6050 模块电路连接如图4 所示。
图4 MPU6050 模块电路设计
在MCU 接收到异常人体生理数据时驱动GSM 模块给提前设定好的号码发送报警短信。本设计利用SIM800A 作为GSM 模块为用户的监护人提供报警提示,SIM800A 是基于GSM 的手机通讯模块,可发短信,可打电话。SIM800A采用串口通信,只要发送AT 指令就能对它进行操作。
模块接口说明,SIM800A 模块使用串口通信与主控系统通信。VCC 端口接5V,GND 端口接GND,RXD 端口接主控系统串口发送端,TXD 端口接主控串口接收端。模块为5V 直流电源供电,若电压过低,模块将不会工作。供电电流需保证能提供2A 的峰值电流。当开机和数据传输时电流非常大,通常在模块VCC 和GND 两端并联一个大电容进行电流补偿,若输出电流不够会造成电压跌落,而导致模块关机。GSM 模块如图5 所示。
图5 GSM 通信模块电路设计
设备使用STM32F103VET6 为控制核心,在主函数中,主要进行各个模块的初始化,主控单元来控制运行的时序,按照所需要的要求运行,具体流程图如图6 所示。
图6 系统软件整体流程图
先对MAX30102 模块的端口与主控单元STM32 是否连接正常,使用万用表的蜂鸣器档,来进行调试。此次测试选取了4 位室友A、B、C、D 来进行心率的测试,每隔10s来对测试者进行手腕的心率6 次的采集,测试时要先按下按键将MODE 模式由0 设置为1,才进行信号的采集。采集的结果如表1 所示。
表1 测试者采集心率值(次/分)
表1 是4 位室友测试者进行了6 次测试的数据。表中可以看出对代码进行处理之后的数据,比较稳定,但依旧存在误差。其原因,第一在测试过程中,有外界光强弱的干扰导致产生电信号,就会出现误差。第二在测试过程中存在手腕每次贴紧的程度不一样,会存在检测的信号过于弱;综上所述,要在干扰小,并且测试需贴紧被测部位、被测位置也合理的情形下,来计算心率的数据。
本文是基于STM32 体感检测装置的设计,主要完成了测量心率和体温以及进行摔倒检测,用OLED 显示检测的各项数据;通过按键来控制开始心率检测;使用STM32F103VET6 为主控单元,测心率的模块MAX30102,OLED 显示用7 针的SPI 协议来显示数据参数;使用DS18B20 温度传感器检测体温,系统设置了体温度阈值和摔倒检测,阈值超标蜂鸣器报警;每次将检测到的生理参数值超标就会通过GSM 模块向监护人报警。通过系统测试,整体运行稳定,数据准确可靠。