基于Android的便携式健康监测系统毕业论文.doc

上传人:可****阿 文档编号:42275466 上传时间:2022-09-15 格式:DOC 页数:80 大小:4.85MB
返回 下载 相关 举报
基于Android的便携式健康监测系统毕业论文.doc_第1页
第1页 / 共80页
基于Android的便携式健康监测系统毕业论文.doc_第2页
第2页 / 共80页
点击查看更多>>
资源描述

《基于Android的便携式健康监测系统毕业论文.doc》由会员分享,可在线阅读,更多相关《基于Android的便携式健康监测系统毕业论文.doc(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 基于Android的便携式健康监测系统毕业论文目录第一章 绪论11.1移动医疗的背景11.2设计的意义与目的21.3设计的容和功能实现21.4设计的可行方案31.4.1 Matlab+压电传感器31.4.2 Android应用+光电传感器3第二章 硬件设计42.1 Android硬件平台42.1.1模拟器Genymotion42.1.2智能手机62.2蓝牙开发平台82.2.1 蓝牙4.0 BLE简介82.2.2 开发板CC254x82.3心率传感器92.3.1压电传感器92.3.2光电传感器10第三章 软件设计123.1软件整体结构123.1.1软件功能说明123.1.2整体流程说明133.

2、2各功能模块设计133.2.1蓝牙传输模块133.2.2数据接收模块163.2.3数据处理模块173.2.4图表显示模块193.2.5界面布局213.2.6注册模块223.2.7设置模块25第四章 运行与测试274.1运行效果274.1.1测试与咨询274.1.2注册与设置304.2技术难点334.2.1硬件难点334.2.2软件难点34总结38参考文献39附录一 外文文献翻译40附录二 程序源代码63致谢7078 / 80第一章 绪论1.1移动医疗的背景移动医疗,国际医疗卫生会员组织HIMSS给出的定义为,mHealth,就是通过使用移动通信技术例如PDA、移动和卫星通信来提供医疗服务和信息

3、,具体到移动互联网领域,则以基于安卓和iOS等移动终端系统的医疗健康类App应用为主。它为发展中国家的医疗卫生服务提供了一种有效方法,在医疗人力资源短缺的情况下,通过移动医疗可解决发展中国家的医疗问题1。随着时下智能手机的普与,如何利用便携的智能手机辅助移动医疗监测,成为一个新兴的热门话题,在医学,IT领域掀起一股“移动医疗”的潮流2。就时代科技背景而言,一切与便民服务相关的工作最终都将被“移动”,成为一股股“移动XX”潮流,而“移动医疗”恰恰是其中的一种,也是相当重要的一种。眼观当下,衣,可以在“淘宝”手机客户端直接购买,食,可以在“大众点评”中获得有利信息,行,可以在“百度地图”“携程旅行

4、”中随时得知路况或踩点,住,可以在“58同城”中查看租房买房信息可以预见的是,医疗和教育将来也必会在移动互联网中大放异彩,然后成为生活中耳熟能详的一部分。当下移动医疗才刚刚起步,其应用模式中大多都是借助相应的传感器(例如红外,压电,光电等)来采集医疗信号,实现的功能也以信号显示为主,而智能手机作为拥有高速的数据传输能力和强大数据处理能力的便携终端设备,可以作为医疗传感器信号的移动接收和中转平台,甚至成为最终的处理平台。智能手机可以通过蓝牙、Wifi等方式和外设进行无线连接,基于此,可将便携传感器获得的数据以无线方式发送给智能手机,智能手机把医疗数据通过WiFi、Internet等方式与服务器完

5、成通信。这有利于扩大数据采集、健康监护的应用围,使得人们可以在携带一些传感器的情况下,比较灵活地实现远程数据采集、医疗监护3。随着谷歌眼镜、智能手表等智能消费终端的推出,一股由可穿戴设备掀起的科技浪潮正试图开启物联网2.0时代的大门。相较于物联网1.0时代对传统行业的信息化模式,由可穿戴医疗设备带动的物联网2.0时代,正在致力于突破孤岛,实现各种应用的互联。而在亚健康和个性化健康管理的观念日益普与下,可穿戴设备也在成为唤醒医疗物联网2.0的潮流先锋4。目前大型应用市场中已经涌现了一批用于简单医疗的App应用,有根据输入的参数(如身高,体重)判断体型是否合格的,有一些日常健康指导的(比如预防传染

6、病或感冒的常识),还有和硬件设备结合开发的计步器(用于跑步时),用于调整生物钟的睡眠闹钟,测心率的心率应用但是也明显说明,在不配合硬件的情况下,仅仅软件是无法完成太多测试的,也无法提供用户太多有用的信息或数据。如果在未来,医用设备能够便携化,就代表着移植到智能设备中的可能性很大,也就意味着,那是一个带着手机就能随时随地检测身体健康状态的时代,一个真正的移动医疗时代。1.2设计的意义与目的脉搏即体表可触摸到的动脉搏动。当大量血液进入动脉将使动脉压力变大而使血管直径扩,在体表较浅处动脉即可感受到此扩,即所谓的脉搏。中医将脉搏变化作为治病的主要手段,称为“切脉”。测量脉搏是病人必须检查的一个项目,通

7、过脉搏的测量可以知道很多信息,这也成为了一个切入点:如果可以实时测量脉搏,那么就意味着可以实时通过脉搏了解病人的大致状况。以此推导,如果手机应用能够实时测量脉搏,那么只要有手机的用户都可以测量自己的脉搏pluse wave5,并通过其测量的数据得到有用的信息。传统模式下,测量脉搏由专用的医用设备或有专业经验的医师完成,在日常生活中非专业人士也不能准确测量自己的脉搏,更难说察觉脉搏的起伏变化,这也是医疗不能深入日常生活的最主要原因。本设计则充分利用手机的无线通信功能,使用传感器采集脉搏信号,通过手机蓝牙接收信号,将智能手机变成一个“医疗设备”(Medical Equipment6)。相对于传统模

8、式下,采集的医疗数据需要上传到专门的服务器进行分析,移动医疗模式下,智能手机完全可以实现在手机本地对数据进行智能分析。利用智能的计算能力,处理采集的脉搏数据,并得出测量结果,用户可以在更短时间看到数据分析结果和相关的健康建议,也避免了时间的浪费。而随着智能手机性能的迅速提高,在本地进行复杂医疗数据的处理将会愈加具有可行性。1.3设计的容和功能实现设计的主要容是开发一个Android应用,以蓝牙的形式接收传感器采集的脉搏信号,并将信号数据绘成波形反馈给用户,并根据数据分析为用户做初步诊断,并给出简单的健康建议;在此基础上,对应用功能进行扩展,如存下信号数据以供有需要的用户自行查看分析,力求更方便

9、地服务于用户。本设计主要是软件上的功能,因此以实现软件功能为核心。软件功能主要分蓝牙模块,数据传输模块,数据处理模块和绘图模块。蓝牙模块负责通过蓝牙通信协议检测周围匹配的蓝牙设备(BLE设备),并显示到应用界面中以供用户选择,用户选择点击之后可以开启蓝牙数据传输服务。数据传输模块承接蓝牙模块,开启蓝牙传输服务之后,程序会自动接收传输过来的数据并拟进行二次处理。数据处理模块即在传输的数据基础上,对其数据进行一系列算法处理,可将数据存入文件,也可用于绘图。绘图模块是建立在Android下AChartEngine绘图引擎的基础的,此处将已经处理的数据通过曲线图的方式在图表中绘制出来,并实时更新显示。

10、1.4设计的可行方案设计主体在于通过特有的传感器脉搏信号,经由一定的传输手段传至某个智能平台,并由智能平台上的一个处理软件对接收到的信号进行数据化,并加以图形描绘。经过前期的调研和准备,本设计之初需要以下设备和方案。 脉搏传感器,采集脉搏信号 信号发送器,将信号发送出来 信号接收器,接收信号 处理器,将信号进行数据处理 绘图器,将数据绘成波形图 分析器,将波形做算法分析 显示器,将分析的结果反馈给用户以此判断,其中只要有一个环节不同,就会产生不同的实施方案,信号的发射和接收任务在本设计中均采用蓝牙承载,其他环节中影响最大的就是脉搏传感器和处理器,这两个环节的不同会使整个设计有不同的实施方案。传

11、感器和传输手段的不同产生了两个不同的实施方案,一是通过有线传输压电传感器采集的脉搏数据,另一个是通过蓝牙传输光电传感器采集的脉搏数据。1.4.1 Matlab+压电传感器本设计早期使用压电脉搏传感器,通过USB接口连接电脑,利用压敏电阻的特性将手腕脉搏跳动的起伏值模拟为传感器反应出的电压值,并以Matlab串口读取作为软件处理方案,用Matlab将压电传感器传出的电压值绘成波形图。问题在于压电传感器过于灵敏,且受干扰较大,测出的波形噪声信号难以处理,故而进度缓慢。1.4.2 Android应用+光电传感器由于Android系统的移植性强,装载Android系统的设备越来越多且便携性大大提高,计

12、划将此软件移植到Android平台中,利用光电传感器和相应的蓝牙开发板,将传感器采集到的脉搏信号传输通过蓝牙的形式传输到智能设备中,并利用Android下较为流行的图表引擎AChartEngine绘制相应的波形。问题在于光电传感器所配套的蓝牙开发板属于蓝牙4.0 BLE设备,只有Android4.3以上的系统和装载了BLE 的智能设备才能检测到,不过随着手机的更新换代,应该会具有更好的兼容性。第二章 硬件设计2.1 Android硬件平台Android系统需要相应的硬件平台支持,并且由于蓝牙4.0 BLE的特殊性,需要能够支持Android4.3系统与以上和装载蓝牙4.0的智能平台才能应用到实

13、际开发中。若不考虑蓝牙,Wifi,以与传感器相关的开发,那么Genymotion完全可以胜任开发的绝大部分需求;当然若需要实际的硬件支持,最正确方案就是用一款智能手机进行真机联调。2.1.1模拟器GenymotionGenymotion是一套完整的工具,它提供了Android虚拟环境7。开发Android的Eclipse ADT开发包中其实有自带的模拟器emulator,之所以选用另外的模拟器原因有二。Emulator运行速度缓慢,对比之下,genymotion由于基于VirtualBox,本质是虚拟机,无论是启动速度或者是应用载入速度都要更加快捷,性能更优越,在genymotion出现之后,

14、被Android开发者们冠以“史上最快Android模拟器”的称号,这是一方面原因。图2.1 genymotion和emulator的创建设备界面另一方面,genymotion的源码包较为简洁明了,创建虚拟设备时只需填入设备名称即可,其他属性均按照实际型号的真机定制,而emulator自定义的属性较多,自主性较强,但大多设置并没有必要,而且其启动后尺寸是固定的,不能随时进行调整,默认的屏幕尺寸高度会和PC的高度一致,导致开发视图的不便(任务栏会遮住屏幕下方),相反genymotion就可以在启动虚拟设备后自由调整其宽高度,以方便不同视图的需要。图2.1为两者创建虚拟设备时的界面。Genymot

15、ion安装流程如下: 注册Genymotion账号 下载Genymotion安装包 安装VitualBox 安装Eclipse或者Intellij插件注册需要通过其官方网址图2.2 genymotion选择系统环境界面选择好开发的系统环境之后,在联网状态下会自动下载源码包,这里我们选择Android 4.3的系统,安装并创建完毕后如图2.3。图2.3 genymotion已经创建好的系统环境启动虚拟设备,可以看到界面与真实手机一般无二,如图2.4所示。图2.4 genymotion虚拟界面同时,可以在Eclipse的DDMS视图中看到已经检测到的Android设备,如图2.5所示。图2.5 E

16、clipse中检测到的虚拟设备至此,genymotion虚拟的硬件开发环境已经搭建完成。2.1.2智能手机涉与到蓝牙或传感器之类模拟器暂时不能模拟出的部件时,开发就需要借助真实的Android设备。本次设计用到的智能手机为华为荣耀4X,操作系统为Android 4.4,支持蓝牙4.0 BLE。相对于模拟器来说,真机并不需要人为创建定制设备,可以直接投入开发使用。不过由于智能手机仍需要连接电脑进行开发中的通信,所以一些须知需要注意一下:1) 手机需进入“USB调试模式”,不同的手机有不同的设置,开发者需根据相应的机型提前设置好,类似图2.6。图2.6 手机上的USB设置2) 需要特定的驱动需要安

17、装相应的驱动,否则无法检测到连接的Android设备,一般是由PC系统自动匹配安装,安装的驱动为“Android Composite ADB Interface”,打开“设备管理器”后会显示相应的接口,如图2.7。图2.7 Android设备调试驱动3) 安装好驱动,开发工具Eclipse切换至DDMS视图,此处说明已经检测到了Android设备,如图2.8所示。图2.8 Eclipse检测到的真机2.2蓝牙开发平台蓝牙平台在本设计中属于前置部分,主要负责将传感器采集到的信号通过蓝牙形式发送出来,然后由开发的Android应用接收处理,蓝牙部分可以从原理和实际设备两个部分进行介绍。2.2.1

18、蓝牙4.0 BLE简介蓝牙4.0协议是2010年6月由SIG(Special Interest Group)发布的最新标准,它有2种模式:BLE(Bluetooth low energy)只能与4.0协议设备通信,适应节能且仅收发少量数据的设备(如家用电子);BR/EDR(Basic Rate/Enhanced Data Rate),向下兼容(能与3.0/2.1/2.0通信),适应收发数据较多的设备(如耳机)。BLE即Bluetooth Low Energy,低功耗蓝牙,属于蓝牙4.0中的单模制式。其主要特点如下:l 国际蓝牙联盟(BTSIG,TI是企业成员之一)通过的一个标准蓝牙无线协议l

19、主要新特性是在蓝牙标准版本上添加了4.0蓝牙规(2010年6月)l 针对无线应用程序与低功耗,低延迟,小数据包的传输需求l 主要是围绕手机和个人电脑系统,但也可用于其他应用程序l 就单模而言,和经典蓝牙设备不兼容蓝牙4.0开发至少要做两方面的准备。硬件方面,需要购买TI公司蓝牙迷你套件,即蓝牙4.0开发板(一般指CC254x)以与CC Debugger 器;软件方面,安装IAR for 8051,TI公司BTool软件。2.2.2 开发板CC254xCC254X模块是低成本,低功耗的SOC(System on a Chip,系统级芯片)方案,广泛用于蓝牙低功耗应用,花费非常少的材料成本即可构建

20、BLE Master或Slave Node。CC254X含一个性能优良的RF收发器和工业标准的增强型8051MCU,集成可ISP的Flash memory,8-KB RAM,以与其他性能优异的特性和外设。CC254X可提供低功耗睡眠模式,操作模式的转换时间非常短,低至微秒级,特别适合需要低功耗的系统。其特性如下:a) 兼容蓝牙低功耗技术b) 优异的连接设计(高达 97DB)c) 长距应用d) 精准的数字 RSSIe) 符合 FCC&CE 标准f) 高效低功耗的 8051 MCU 核g) 电池监控和温度传感器h) 全速 USB 接口i) AEC 安全协处理器本设计通过CC254x开发板进行蓝牙模

21、块的开发,其开发板如图2.9所示。图2.9 CC254x开发板功能示图2.3心率传感器心率传感器是本设计中硬件部分的最末端,负责最原始的脉搏信号采集,理想状态下采集到的脉搏信号可以较为清晰用波形图给出,也即是说,传感器必须采集到类似于心脏搏动强度的信号,并将这种起伏明显的信号通过一定传输手段传输到开发环境中。因此,根据传感器的敏感性质不同,可分为两部分介绍。2.3.1压电传感器压电传感器即压敏电阻脉搏传感器HK-2000C,是在HK-2000B的基础上增加了程控放大电路、基线调整电路、A/D转换电路、串行通信电路,方便用户集成与二次开发使用。压电式原理采集信号,数字信号输出,直接通过USB或串

22、口输出脉搏波波形数据。在电脑上运行我们附送的演示程序可以直观的在电脑屏幕上显示脉搏波形并可以对波形的幅值、频率、基线等进行调整。该产品可应用于脉率检测、无创心血管功能检测、妊高征检测、中医脉象诊断等。图2.10 压电脉搏传感器HK-2000C此传感器的接口为USB接口,可以与电脑连接,在PC端安装USB转串口驱动后,即可实现传感器与PC端的通信。在PC端“设备管理器”中可以看到相应端口,如图2.11所示。图2.11 压电传感器在PC端的端口2.3.2光电传感器光电传感器是自行购置的脉搏传感器,主要是通过透光性检测指尖血液浓度并以此脉搏的跳动。配以蓝牙开发板CC254x,连接之后可直接工作(程序

23、代码需自行烧写)。关于此传感器有一套自有的工具,主要是关于BLE 蓝牙4.0开发的必备工具,诸如IAR编辑器,SmartNRF烧录器,以与CCDebug仿真器,感兴趣的读者可自行查阅关于蓝牙4.0的官方资料。以下为传感器实物图。图2.12 光电心率传感器实物图此传感器需要和蓝牙开发板配套使用,三根导线分别连接至开发板的相应引脚才能正常工作,以下是连接图;图2.13传感器与开发板连接图连接完成后,需要给开发板加外接电源才可工作。此开发板的电源接口与调试接口为同一个接口,为MiniUSB接口,加电后配以的显示屏可以显示相关数据,不过仅供以参考,如图2.14所示;图2.14开发板工作示意图第三章 软

24、件设计软件的开发工作主要在Android平台下进行,使用以Java为主的编程语言进行开发。本设计中使用的开发环境如下:u 系统环境:Windows 7 Ultimate x64u 编程语言:Javau 语言版本:jdk-8u11-windows-x64u 开发工具:Eclipse IDE for Java Developers+ADT,Android Studiou 终端环境:Android 4.3,Android 4.4.4u 源码工具:Android SDK Manageru 模拟器:Genymotion Android 4.3u 真机型号:华为荣耀畅玩4Xu 绘图引擎:AChartEng

25、ine系统环境、编程语言,以与开发工具,三者互相之间要有良好的兼容性,一般来说,如果系统环境为Windows系统,那么编程语言版本也一般安装windows版本,以与开发工具如Eclipse也要选择安装Eclipse for Windows,否则是无法进行开发工作的8。开发Android应用需要在Eclipse中安装ADT即Android Development Tools插件,也必须在本地配置至少一个Android系统版本的源码如Android 4.3,源码由Android SDK Manager进行下载管理。调试环境分为模拟环境与真机环境,模拟器使用Genymotion,可调试不涉与硬件操作

26、的功能模拟,真机则没有限制,当然真机最好选择接口较多,功能较全的手机型号。由于蓝牙4.0在Android 4.3系统与以上才有较好的底层支持,故而无论是模拟器还是真机都使用Android 4.3以上的系统才可调试涉与蓝牙4.0的应用,否则会出现乱码数据或者无法开启蓝牙服务的现象。绘图引擎选用Android下比较成熟的绘图引擎AChartEngine,此引擎专为绘图而开发,只要导入库类包后就可以直接或选择使用其中的有用类,避免开发时为自定义图表类作太多繁琐的工作9。3.1软件整体结构3.1.1软件功能说明应用软件整体功能分为两个部分,一部分为接收数据的前置工作,一部分为处理数据的具体功能。软件整

27、体工作流程可分为以下几步: 通过蓝牙基类寻找BLE设备,并显示设备列表 点击列表中的设备,获取蓝牙服务 接收蓝牙传递的数据 处理数据,并以字符流形式存入文件 由传递的数据显示出实时的波形图 计算出BPM 其他功能3.1.2整体流程说明根据软件整体完成的工作流程,可以将之表示如图3.1所示的流程图:开始获取蓝牙服务接收数据处理数据显示波形图存入文件计算BPM其他功能完毕图3.1 整体流程图3.2各功能模块设计3.2.1蓝牙传输模块蓝牙传输是建立在蓝牙硬件平台搭建正确的基础上的,其中包括蓝牙模块芯片CC254x与开发板的连接,开发板与传感器的连接,以与在开发板中写入控制蓝牙的程序。此处软件中所谓的

28、蓝牙传输模块,其实就是蓝牙检测模块,以官方提供的蓝牙基础类BluetoothGatt,扩展为BluetoothLeClass,以提供蓝牙协议等基础通信服务10。蓝牙4.0中分为两类,其中一类BLE设备即此次开发中所用到的蓝牙设备,BLE需要特殊的机型支持,一般在智能手机硬件配置说明书中由厂家指明是否支持蓝牙4.0的无线传输协议。在蓝牙硬件设备搭建完成后,设备会持续发送一个广播信息,应用终端则编写相应的程序代码接收此信息,并与之匹配,再获取相关的蓝牙服务,BLE并不兼容于之前的蓝牙版本,故而获取服务的方法也有所不同,尤其是后续部分要连接至GATT服务端,且读取属性的方法也与之前的蓝牙开发不尽相同

29、。蓝牙模块在终端的整体工作流程图如3.2所示:否获取蓝牙适配器开始开启蓝牙服务搜索BLE设备连接到GATT服务端搜索到?读取BLE属性接收服务端信息完毕设备列表是图3.2 蓝牙模块流程图以下为使用BLE设备必要的开发步骤11: 在应用功能清单文件AndroidManifest.xml中声明蓝牙权限,因为用到了BLE设备,因此需加上BLE设备的支持声明; 在确定开发环境是Android 4.3系统与以上的情况下,取得蓝牙适配器;/ Initializes Bluetooth adapter.final BluetoothManager bluetoothManager = (BluetoothM

30、anager) getSystemService(Context.BLUETOOTH_SERVICE);mBluetoothAdapter = bluetoothManager.getAdapter(); 开启蓝牙服务;private BluetoothAdapter mBluetoothAdapter;./ Ensures Bluetooth is available on the device and it is enabled. If not,/ displays a dialog requesting user permission to enable Bluetooth.if(mBl

31、uetoothAdapter =null|!mBluetoothAdapter.isEnabled() Intent enableBtIntent =new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 搜索BLE设备;/* Activity for scanning and displaying available BLE devices.*/publicclass DeviceScanActivity extends Lis

32、tActivity private BluetoothAdapter mBluetoothAdapter; privateboolean mScanning; private Handler mHandler; / Stops scanning after 10 seconds. privatestaticfinallong SCAN_PERIOD =10000; . privatevoid scanLeDevice(finalboolean enable) if(enable) / Stops scanning after a pre-defined scan period. mHandle

33、r.postDelayed(new Runnable() Override publicvoid run() mScanning =false; mBluetoothAdapter.stopLeScan(mLeScanCallback); , SCAN_PERIOD); mScanning =true; mBluetoothAdapter.startLeScan(mLeScanCallback); else mScanning =false; mBluetoothAdapter.stopLeScan(mLeScanCallback); . . 搜索到蓝牙设备后,可以由一个列表将之显示出来,如下

34、用一个配置文件将之列出(具体可见listitem_device.xml),加载配置文件的类为LeDeviceListAdapter.java; 接下来还需连接到GATT服务端并读取蓝牙的一些固定属性值,此处不再赘述,读者可以自行至官方查询或查看附录资源中的DeviceScanActivity.java。3.2.2数据接收模块此模块承自蓝牙模块,当蓝牙服务端准备就绪后,通过点击设备列表进入下一个活动页面,而在页面切换间,就已经启动了数据接收功能,此处会判断点击的设备是否为开发板配套的心率传感器,如果是则会进入切换,否则是无法进入下一个页面的。数据接收并不是可以单一存在的功能,因此代码是嵌在类中的

35、,由DeviceScanActivity.java调用PluseExam.java中的静态方法来达到目的。private BluetoothLeClass.OnDataAvailableListener mOnDataAvailable =new OnDataAvailableListener()/BLE终端数据被读的事件Overridepublicvoid onCharacteristicRead(BluetoothGatt gatt,BluetoothGattCharacteristic characteristic,int status)PluseExam.recData(Utils.b

36、ytesToString(characteristic.getValue(), characteristic.getValue(), characteristic.getUuid().toString();/收到BLE终端写入数据回调Overridepublicvoid onCharacteristicWrite(BluetoothGatt gatt,BluetoothGattCharacteristic characteristic)PluseExam.recData(Utils.bytesToString(characteristic.getValue(), characteristic.

37、getValue(), characteristic.getUuid().toString();接收到的数据即characteristic.getValue(),是一个字节数组(byte),是因为从蓝牙发送过来的数据是16位的,此处就由一个字节数组接收,接收得来的数据就为两个字节,以方便之后的处理。UUID(Universally Unique Identifie)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。这里的characteristic.getUuid()即得到蓝牙设备的UUID值,整个应用中也是通过判断UUID值来确定是否为配套的设备12。3.2.3数据处理模

38、块数据处理模块被设计为对接收到的数据进行一定的算法处理,并在用户选择下将接收到的所有数据以文件形式保存下来,以便之后静态观察;另一方面,将接收到的数据进行条件分析,判断波形的周期,并以此计算BPM(Beat Per Minutes)。首先,蓝牙传来的值就波形来看是上下颠倒了,故而为了波形显示将传过来的值一律取反,并转换为整型值。接着,将此整型值以追加模式写入SD卡目录下pluse_data.txt文件中,并在绘图过程中调用PluseSure()方法以计算BPM。部分代码如下:/ 从蓝牙接收数据的方法体publicstaticvoid recData(String str,byte data,

39、String uuid)if(uuid.equals(DeviceScanActivity.UUID_HERATRATE)int pluse =data1;/ pluse = 0 - pluse;/ pluse = pluse =)dataList.clear();/ 将接收到的数据加入集合dataList.add(pluse);/ 如果读写标志为真,则将接收到的数据写入文件if(saveFlag)tryif(!dataFile.exists()dataFile.createNewFile();FileWriter fw =new FileWriter(dataFile,true);fw.ap

40、pend(String.valueOf(pluse)+rn);fw.close();catch(IOException e)e.printStackTrace();/ 判断BPM的方法体protectedstaticvoid pluseSure()/ 调用此方法时的时间long curTime = System.currentTimeMillis();/ 将每次调用此方法的时间加入时间集合timeList.add(curTime);int timeListSize = timeList.size();/ 求得此时与初始时刻所经历的时间间隔durTime = curTime - timeList

41、.get(0);/ 求得BPMBpp =(float)(timeListSize -1)*1000/ durTime;Bpm =(int)(Bpp *60);String bpmStr = String.valueOf(Bpm);/ 判断心率曲线是否稳定if(timeListSize 4)long tmpTime = curTime - timeList.get(timeListSize -4);/ 如果连续4个心率曲线上扬的时间不在正常围,则将时间集合清0,否则显示if(tmpTime 3000| tmpTime 1000)textBpm.setText();timeList.clear()

42、;elsetextBpm.setText(bpmStr);由于类中有大量数据传递,所以使用了List集合作为数据的存储空间,可以从代码中看出,接收到的数据都存入dataList,而时间值存入了timeList。在下面的绘图模块中可以看到一个判断条件:当波形数据上扬(即前一个数据小于0,后一个大于0,0是判定界限)时,就调用判断BPM的方法体。数据存入文件时,为了方便二次调用和查看,在每个数据后面追加了换行符,结果就是每个数据会在文件中单独成行。判断BPM的前提是在脉搏较为稳定的情况下,所以在计算之前加了一个判定脉搏是否稳定的算法,即心率上扬之间的间隔稳定在一定围之才开始真正计算BPM并显示,此处是检测到4个上扬波形在合理围之后就由相互之间的时间间隔除上扬波形的个数(即跳动次数)再扩大60倍,得到的值四舍五入后就可算出心率。3.2.4图表显示模块图表显

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁