基于Android的脉搏血氧仪的设计与实现
2014-08-23姜娜,张雷
姜 娜,张 雷
(1.华东师范大学资源与环境科学学院地理系,上海 200241;2.江苏物联网研究发展中心光电信息中心,江苏 无锡 214100)
0 引言
随着社会经济的发展和人们生活水平的提高,人们越来越重视自身健康问题。在各项人体生理参数中,血氧饱和度(Oxygen Saturation,SO2)是重要的参数之一。过低的血氧饱和度在人体组织中将造成不可逆的缺氧性损伤[1-4]。脉搏血氧仪因其能够实现无创和实时连续地对该参数进行检测[5],在临床上得到了广泛应用。但是在国内民用市场上,由于价格、精度、无记忆性等问题,脉搏血氧仪并没有得到推广。本文据此设计一种便携式脉搏血氧仪,并基于Android开发了手机客户端软件,以图形化界面显示各项参数并记录到SD卡上,方便普通用户使用,也提高了脉搏血氧仪的实用性。
1 Android系统简介
Android系统的底层建立在Linux系统之上,该平台由操作系统、中间件、用户界面和应用软件4层组成,它采用一种被称为软件叠层的方式进行构建。这种软件叠层结构使得层与层之间相互分离,明确各层的分工。这种分工保证了层与层之间的低耦合,当下层的层内或层下发生改变时,上层应用程序无须任何改变[6]。
本文利用Android在应用程序层实现客户端的开发。Android从2.0版本开始支持蓝牙,有关蓝牙的类和接口都位于android.bluetooth包中,具体功能如表 1[7]所示。
表1 蓝牙主要功能包
通过使用上述的蓝牙工具包可以在Android平台上开发相应的蓝牙通信程序,实现上位机与下位机之间的通信。
2 系统总体架构设计
本系统主要由前端数据采集设备和Android客户端2部分组成。其中前端数据采集设备通过蓝牙通信模块将数据传送给Android客户端,客户端程序接收到数据后对数据进行分析、绘图、存储,并把分析结果图形化显示。图1是系统的总体架构图。
图1 系统总体架构图
3 前端数据采集设备
前端数据采集系统(脉搏血氧仪)由基于单片机的脉搏血氧仪来检测人体脉搏、SPO2、IR、温度值、高度值、警告位等几项参数。本系统设计中前端数据采集系统的设计原理为:使用动态光谱的检测算法、模数结合的采集控制系统来设计脉搏血氧仪,前端使用模拟系统采集信号,对信号做前期滤波放大预处理,经过高精度AD转换之后,使用数字滤波对信号作进一步处理,然后运用动态光谱的检测算法对信号进行数据拟合。该系统的优势是实现算法相对简单,精度高,具有抑制或克服个体差异和测量条件对检测光谱影响的优点。硬件结构如图2所示。
图2 前端数据采集设备硬件结构图
在单片机控制下,红光LED、红外LED以一定的频率打开和关闭,分别检测出发射红光、红外和无光情况下的光强。然后经过光电转换电路转为电压值,该光电转换电路要求抗噪声性能强。转换后的电压经过放大滤波以及高精度AD后进入单片机处理,经过单片机处理、计算,将血氧饱和度和脉搏数在液晶中显示出来。加速度传感器用于检测人体是否有摔伤状况,蓝牙模块用于与客户端通信。
4 Android客户端软件设计
Android客户端软件在此系统中接收来自前端数据采集系统采集到的各项生理参数,并对此进行相应的解析分析,以可视化界面展示脉搏、SPO2、IR、温度值、高度值等实时参数给用户。软件的操作流程如图3所示。
图3 软件操作流程图
4.1 蓝牙通信模块
在本系统的通信过程中,脉搏血氧仪作为蓝牙通信的服务器端,开启后自动监听连接请求,Android设备作为蓝牙通信的客户端主动连接SPP协议设备。具体实现如下[8-11]:
(1)通过在 AndroidManifest.xml添加:
以获得BLUETOOTH使用许可。
(2)通过BluetoothAdapter核心类对本机蓝牙模块做基本配置,由startDiscovery()方法搜索蓝牙设备。在BroadcastReceiver的onReceive()里取得搜索所得的蓝牙设备信息。
(3)在用户手动选择脉搏血氧仪的MAC地址后,对所选设备建立一个BluetoothDevice对象并由BluetoothDevice衍生出BluetoothSocket,准备SOCKET来读写设备。
(4)通过 BluetoothSocket的 createRfcommSocket-ToServiceRecord()方法来选择连接的协议/服务,这里用的是SPP(UUID:00001101-0000-1000-8000-00805F9B34FB)。从而实现蓝牙客户端和蓝牙服务器端互联。
4.2 数据解析验证模块
客户端通过 BluetoothSocket.getInputStream().read()函数接收上位机传来的数据,对其进行解析。接收的数据如图4所示。
图4 脉搏血氧仪采集的数据图
数据存储格式如图4所示,每一条记录以0x0D、0x0A结尾。在每条数据记录中,数据和数据之间以0x20隔开。数据中包含:血氧饱和度、脉搏、SPO2、高度、温度和警告位等数值。这些数据通过验证模块检验数据的长度、格式、数值范围后,由File.write()函数写入 SD 卡中[12-14]。
4.3 生理信息可视化模块
图5 生理信息可视化成果图
数据显示分为3种不同的情况:(1)SPO2的参数值,因为其周期性变化性无法从数值直接判断其准确性,所以这里通过定时器,每隔1秒时间从SD卡上读取最新的200条记录,将各条记录中的SPO2数据按照时间顺序存储成android.graphics.Point的数组。并由 android.graphics.Canvas.drawLine()方法连接相邻各点,从而得到动态连续变化曲线图。(2)温度和脉搏等不是经常变换的参数值,每间隔3秒计算最新20条数据的平均值。(3)警告位,由于该数值是瞬时产生的,在收到数据的时候,立刻显示在客户端界面上。通过warning.setImageResource(R.drawable.red)语句设置其不同状态下的颜色。生理信息可视化成果图如图5所示。
通过图5用户就可以方便快捷地了解自身的健康状况,及时发现自身的健康隐患。
5 结束语
本系统实现了用户实时观察自己的健康状况的目标。通过本系统普通用户可以随时随地了解自身的健康状况,尤其对心脏病等患者具有相当重要的提醒功能。将来,随着智能医疗的不断发展,这些数据不只是存储在手机的SD卡上,还能将异常数据通过手机实时传输到医院的信息平台上,让医生实时知道用户的身体状况,这是进一步的研究内容。
:
[1]孙迎,宋健.基于Android的远程心电检测系统[J].计算机应用与软件,2013,30(4):326-329.
[2]贾宝森,吴东宇,张宏.静吸复合麻醉下老年患者脑氧饱和度与术后认知功能变化之间的关系[J].解放军医学杂志,2005,30(9):792-795.
[3]Werner Baulig,Alexander Dullenkopf,Andreas Kobler,et al.Accuracy of continuous central venous oxygen saturation monitoring in patients undergoing cardiac surgery[J].Journal of Clinical Monitoring and Computing,2008,22(3):183-188.
[4]Michael Sander,Claudia D Spies,Achim Foer,et al.A-greement of central venous saturation and mixed venous saturation in cardiac surgery patients[J].Intensive Care Medicine,2007,33(10):1719-1725.
[5]蒲莉娜,潘颂欣,林宛华,等.脉搏血氧饱和度测量精度的影响因素分析[J].中国医疗器械信息,2010,16(6):11-15.
[6]李刚.疯狂Android讲义[M].北京:电子工业出版社,2011:3-4.
[7]熊狮,吴效明.基于Android系统的生理数据蓝牙传输技术[J].中国医学物理学杂志,2012,29(6):3801-3803.
[8]陈志崇,张祺.基于Android的蓝牙通信接口[J].电子世界,2013(3):16-17.
[9]马永亮,柯宏力.基于Android平台蓝牙一对多聊天系统的设计与实现[DB/OL].http://www.paper.edu.cn/releasepaper/content/201111-520,2011-11-29.
[10]张凌,姚萌.蓝牙通信技术的模型解析与开发[J].电子产品世界,2002(20):45-47.
[11]邹川阳.Android平台中蓝牙设备的应用[J].软件导刊,2012,11(7):132-133.
[12]李浩.Google Android手机嵌入式系统的研究与开发[D].成都:四川大学,2010.
[13]党李成.基于Google Android智能手机平台的研究与应用[D].合肥:安徽大学,2010.
[14]王间,张晓炜,杨锦,等.基于SD卡的智能车调试系统设计[J].工业控制计算机,2010(8):48-49.