标题 | 一种无线便携式心率血氧检测仪的设计 |
范文 | 杨森杰 林锦锋 马凯创 邱斌 摘 ?要:心率与血氧含量是反映人体健康的关键生理指标,传统心率血氧检测仪存在穿戴不方便、抗干扰能力差以及智能信息化不高的局限性。针对以上不足,设计一种基于STM32微处理器和Android系统的便携式无线传输心率血氧检测仪,该系统采用MAX30102传感器实现人体生理血氧和心率信号的采集,通过STM32F103C8T6单片机对信号进行实时采样及信号处理,通过ESP8266 WiFi模块构建无线传输网络,利用Java语言在Eclipse平台设计APP上位机用于心率血氧生理数据的实时显示与存储,方便用户实时了解自身的生理参数变化及便于对生理数据进行后期分析研究。实验结果表明,该系统APP上位机能够远程无线接收并实时显示心率血氧数据曲线,智能化水平较高并具有较强的实用性。 关键词:心率;血氧饱和度;无线便携;智能化 中图分类号:TN949.6 ? ? ? 文献标志码:A ? ? ? ? 文章编号:2095-2945(2020)28-0047-04 Abstract: Heart rate and blood oxygen saturation are key physiological indicators that reflect human health. Traditional heart rate and blood oxygen detectors have the limitations of inconvenience, poor anti-interference ability, and low intelligence information. In view of the above shortcomings, a wireless portable detection system is designed based on STM32 microprocessor and Android. The system uses MAX30102 sensor to collect physiological oxygen and heart rate signals. STM32F103C8T6 single-chip is used to sample and process for real-time signal. A wireless transmission network is constructed by ESP8266 WiFi module. An APP host computer on the Eclipse platform is designed for display and storage by using the Java language, which is convenient to understand users' physiological parameter changes and research the physiological data. The experimental results show that the APP host computer of the system can remotely receive and display the data curve of heart rate and blood oxygen saturation in real time with a high level of intelligence and practicability. Keywords: heart rate; blood oxygen saturation; wireless portable; intelligence 引言 随着现代科技的不断发展,人们在追求物质生活质量的同时也不断关注自身的健康状况。现如今,为满足人们想随时随地监测身体状况的需求,便携式可穿戴设备应运而生[1-3]。心率与血氧饱和度(SaO2)是反应人体生理机能是否健康的关键指标[4]。其中心率是指心脏每分钟搏动的次数,是反映人体循环系统机能的重要参数。血氧饱和度是氧合血红蛋白(HbO2)在总血红蛋白(Hb)中的占比,即血氧在血液中的浓度,它是呼吸循环的一个重要生理参数,监测血氧饱和度可以对肺的血红蛋白携氧能力进行评估。因此经常性的对心率和血氧饱和度进行监测,及时了解身体机能状况,对身体异常有重要的预警作用[5]。 本设计以光电容积脉搏波测量原理为理论指导[6],采 用基于STM32微处理器和Android系统开发的便携式无线传输心率血氧检测仪具有携带方便、远程通信、抗干扰性能强、智能化显示与分析等特点,适用于家庭社区的血氧饱和度以及心率的监测。 1 心率血氧测量原理 SaO2的检测原理是利用660nm的红光和940nm的红外光经动脉血中Hb和HbO2吸收,进一步分析被吸收后的光信号由此计算SaO2值[7]。通过朗伯-比尔公式计算红光(R)和红外光(IR)的吸收强度比[8],计算公式如式(1)所示。其中,ACR、DCR、ACIR、DCIR分别表示红光和红外光在心脏收缩过程中的交流分量和心脏舒张过程中直流分量。 2 系统硬件总体设计方案 本系统主要由MAX30102高灵敏度血氧和心率生物传感器、STM32F103C8T6单片机最小系统、LCD液晶显示器模块、ESP8266 WiFi无线传输模块、Android智能手机等组成,系统结构如图1所示。系统工作流程首先是利用MAX30102传感器实现人體生理血氧和心率信号的实时采集,单片机对采集信号进行实时处理与命令控制;然后通过ESP8266 WiFi模块构建无线传输网络,按通信协议收发数据;最后利用Java语言在Eclipse平台设计智能手机APP上位机软件用于心率血氧生理数据的实时显示与存储。 3 系统软件设计 本系统的软件设计主要包括硬件控制部分软件设计以及信号处理与分析软件设计。硬件控制部分的软件设计在结构上分为主控程序、WiFi模块、LCD显示程序、STM32与MAX30102的数据处理程序。系统工作后首先对各个程序模块进行初始化,对各个模块进行数据读取。采用C语言在Keil5开发环境中对单片机部分的软件进行开发。系统软件设计总体流程图如图2所示。 3.1 ESP8266无线传输软件设计 本设计利用ESP8266 WiFi模块构建无线传输网络,实现将心率、血氧饱和度信息无线发送至智能移动设备的APP上位机,用于心率血氧生理数据的实时显示与存储,方便用户实时了解自身的生理参数变化及便于对生理数据进行后期分析研究。本设计采用ESP8266 的AP工作模式,即将ESP8266模块作为热点,移动设备或者PC设备通过WiFi直接模块进行通信,实现局域网无线传输与控制。其中,模块的初始化设置实现过程代码信息如下: //连接端口号:8086,可以自行更改为其他端口 const u8* portnum= "60000"; //WIFI设定为AP模式,要设定其他模式在此配置 const u8* WIFIap_ssid="ESP8266-01"; //对外SSID号,无线信号的名称 const u8* WIFIap_encryption="wpawpa2_aes"; //设置为WPA/WPA2/AES加密方式 const u8* WIFIap_password="12345678"; //WIFI无线密码 无线数据传输函数代码设计如下: u8 atk_8266_send_data(u8 *data,u8 *ack,u16 waittime) { ? ? ?u8 res=0; USART1_RX_STA=0; UART1_Send_DATA(data); ?//发送数据 if(ack&&waittime) ? //需要等待应答 { ? while(--waittime) ? //等待倒计时 { delay_ms(10); if(USART1_RX_STA&0X8000) //接收到想要的应答 { if(atk_8266_check_cmd(ack))break; //得到有效数据后跳出执行 USART1_RX_STA=0;} } if(waittime==0)res=1; } return res;} 其中,data表示要发送的数据,ack为应答结果,如果为空,表示不需要等待应答;waittime表示等待时间,如果返回值res为0,表示数据发送成功。 3.2 APP上位机软件设计 本节详细介绍在Eclipse平台设计APP上位机,用于心率血氧生理数据的实时绘制与显示。WiFi无线传输数据后,将其放在Android的服务中。主程序需要获取服务中获取的数据,同时使用通知模式,即当服务中数据读取模块获取到数据后通知主程序去处理,主程序一直等待服务的数据返回。获取到数据之后,对数据进行解析处理并图形化显示,其实时显示的设计流程图如图3所示。 本设计除了将WiFi获取到的数据通过数字显示出来以外还能使其通过屏幕点坐标进行图形化显示。本设计中APP在主界面上放置了两个Text View来实现血氧饱和度和心率的显示,当完成血氧饱和度和心率的计算后,更新Text View的值,达到动态和实时显示的效果。在主线程中完成动态显示Android绘制图像,利用Android Surface View 实现异步线程图形绘制。实时动态绘制心率与血氧曲线的设计流程如图4所示。 其中Android Surface View曲线核心程序如下: public void setXYMultipleSeriesRenderer(double maxX, double maxY,) …… XYMultipleSeriesRenderer(); //创建新的对象,继承父类 …… multipleSeriesRenderer.setRange(new double[]{X, maxX, Y,maxY }); //x y轴初始的范围 multipleSeriesRenderer.setLabelsColor(labelColor); multipleSeriesRenderer.setXLabels(18); //X轴显示的坐标个数(下标识) multipleSeriesRenderer.setYLabels(25); //Y轴显示的坐标个数 multipleSeriesRenderer.setPanLimits(new double[]{0,10 000,0,250});//设置拉动的范围 …… multipleSeriesRenderer.setPointSize(5f);//曲線描点尺寸 multipleSeriesRenderer.setFitLegend(true);//调整合适 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。