版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-7-WIFI远程医疗健康监护系统设摘要对于传统的医疗健康监护系统功能单一,仅仅只能显示病人的基本信息,并不能及时注意到病人的身体情况,以及准确定位病人位置以便及时治疗,因此设计一款能够帮助患者,提高医护人员救助效率的远程医疗健康监护系统是很有必要的。本系统主要设计一个WIFI远程医疗健康监护系统。基于STM32单片机通过红外体温传感器、血氧心率传感器、WIFI模块、GPS模块、报警模块对医疗健康监护系统进行设计。并完成具有能检测病人体温、心率、脉搏生理体征参数等信息以及数据上传报警向医生发送位置信息等功能的设计。以STM32F1芯片为CPU控制血氧心率采集模块、人体体温采集模块,数据传输模块,其具有功能丰富,使用简单,测量数据准确,性能稳定等多个优点。并可以把经过检测将实时检测人体血氧浓度,心率快慢以及人体温度反馈给数据库,同时医疗人员也可以远程获取到数据,如果数据异常也可以及时抢救病人,大大降低了病人因治疗不及时而造成损失的风险。并通过各种算法,实现数据的准确性以及稳定性,最终得到一款人性化,性能高的监护系统。关键词:STM32单片机;血氧心率采集模块;体温采集模块;数据传输模块目录第1章绪论 11.1课题意义与背景 11.2国内外研究现状 11.3本文主要研究的内容 2第2章系统整体设计方案 32.1WIFI远程医疗健康监护系统的需求分析 32.2系统总体方案设计 32.3控制方式的选择 42.3.1单片机芯片的选择 42.3.2血氧心率采集模块的选择 52.3.3体温采集模块的选择 52.3.4定位模块的选择 62.3.5WIFI模块的选择 62.3.6报警模块的选择 62.4本章小结 6第3章硬件系统设计 73.1系统硬件电路设计 73.2晶振、复位与SWD下载电路 73.3MAX30100血氧心率模块电路 83.4体温传感器模块电路 93.5GPS模块电路 93.6WIFI模块电路 93.7报警模块电路 10第4章软件系统设计 114.1软件整体框架 114.2软件设计 114.2.1血氧心率采集程序 124.2.2体温采集程序 154.2.3GPS定位程序 164.2.4WIFI程序 164.2.5报警程序 184.2.5上位机程序 19第5章WIFI远程医疗健康监护系统仿真 205.1WIFI远程医疗健康监护系统仿真 205.2WIFI远程医疗健康监护系统的调试 215.3系统功能验证 225.3.1显示模块 225.3.2检测模块 22第6章总结 23参考文献 24致谢 26附录 27附录A原理图 27附录B主程序 27保定理工学院本科毕业设计第1章绪论1.1课题意义与背景随着社会经济的发展,国民素质逐渐提高,另外科技发展也引起医疗事业的大幅度进步,因此我国的老龄化问题日趋严重,尤其是80后这代人则一个孩子赠养两个老人,养老负担空前沉重[14]。与此同时,目前国内的卫生资源还面临着分布不均衡等问题,这些问题都集中表现为:治疗和治疗的能量总量相对不高,政府相应的投资力度偏小;医疗服务水平不高,很难满足病人的需要。当前,我国医疗机构普遍存在着效率低下和医疗物资资源浪费两大现象,造成这些问题的主要原因还在不同的区域、城市;他们的医疗资源,并不均衡。在病人住院时,医疗器械显示的数据作为医生判断病人生命体征是否正常的条件,但是需要医生及时根据数据进行判断,这对于医疗条件紧张、医护人员紧张的地区,24小时监护是明显做不到的,这样会使得医生不能迅速地了解患者的生命体征变化,从而导致患者出现情况不能快速的被医生发现。因此健康监护系统的建立成为大势所趋,提升了医院医疗设备的便捷性和智能化以及效率,引起了国内外研究者的关注,形成了较多的研究成果。1.2国内外研究现状本文在《家庭远程健康监护云服务系统设计》一书中介绍了该技术,并给出了具体实现方案。该系统主要包括了物联网健康监护终端、家庭监护网关、中心云服务器以及信息服务终端【14】。物联网健康监测终端利用
WIFI作为无线传送手段,对病人的血压进行收集,同时,家庭监测网关从物联网血压计中获取并将其传送到中央云服务器:使用
CART决策树、随机森林和梯度提升;采用K-最近邻居等方法,对不同性别、不同年龄和不同身高的高血压进行了分类和诊断;以体重,收缩压,舒张压为主要指标对高血压进行了定性和定量的分析。利用小波变换、神经网络等技术,对具有非线性、非平稳性的血压数据进行了建模。最终,开发出一套能够进行血压数据输入、数据查询、高血压诊断及血压预报的家用远程监控系统和血压预报系统。在叶琦的《基于
WIFI的远程健康监护系统设计》中,她使用了
ST公司的STM32系列
MCU作为她的实验平台,利用两台计算机之间的WiFi通讯,将从机上获得的相关信息,以及从机上再利用WiFi将这些信息传送给主机上,再利用主机上的LCD12864液晶屏幕,对这些信息进行实时的显示,从而达到调整大气环境质量的目的。整个房间一共有四张病床,只需按下相应的按钮即可调用。与中国相比,医学监测在海外发展迅速,技术也处于中国的前列,随着远程医学应用范围的扩大,其应用范围也在逐步扩大;在海外,无线医学监控系统的发展非常快。2021年AbedNJ;HusseinEhabAbdulrazzaq在《DesignandmplementationofRealTimeHealthCareMonitoringSystemBasedonlot》中提出基于网络的传感器或基于移动的应用程序,这些设备通过网络进行通信,使构建的监测和记录患者医疗数据和健康信息的系统更加有效。设计了一个由传感器和监测设备组成的卫生系统,该系统能够收集患者的医疗数据,然后通过互联网将这些数据传输给专科医生,以便准确地评估患者的健康状况。目前,物联网(loT)在医疗保健领域是最重要的部分,它可以提供更好的思者健康监测,让医生和医院更好地工作,减少工作难度。该计划旨在开发一种适当的监测系统。通过互联网将患者和居住在偏远地区、附近没有医院的患者连接起来,为他们提供更好的医疗服务,通过能够记录患者心率、血氧百分比和体温的设备收集与患者健康有关的数据[11]。在全球医疗监护网络设备市场中,国外产品拥有多样化配置,但是价格昂贵没有得到大范围普及。因此设计硬件和软件管理系统高度结合的安全的、高性价比的远程医疗健康监护系统具有很广的市场前景。1.3本文主要研究的内容本系统主要设计一个WIFI远程医疗健康监护系统[14]。基于STM32单片机通过红外体温传感器、血氧心率传感器、WIFI模块、GPS模块、报警模块对医疗健康监护系统进行设计。设计完成具有能检测病人体温、心率、脉搏生理体征参数等信息以及数据上传报警向医生发送位置信息等功能的设计。通过各种算法,实现数据的准确性以及稳定性,最终得到一款人性化,性能高的监护系统[17]。第2章系统整体设计方案2.1WIFI远程医疗健康监护系统的需求分析WIFI远程医疗健康监护系统是一种基于现代科技,能够通过对人体进行检测人体血氧浓度,心率以及人体温度并传输给医院数据库进行分析的新型智能电子设备。依照目前医院管理现状来看,病人数量远远大于护士护工人员数量,所以减少非必要的劳动力,节约时间显得尤为重要,特别是重症患者的治疗情况紧急,甚至需要无时无刻的关注,另外,老年人逐渐增长,许多突发疾病不能及时通知监护人,从而耽误治疗,而WIFI远程医疗健康监护系统,不仅可以帮助护士与家人快速了解病人,并且实时检测病人当前的心率情况与血氧情况,并且及时反馈给医院系统数据库,当护士人员短缺或病人无人陪伴时,也不用去现场测量病人情况,直接在数据库中远程查看情况,发现异常即可及时进行处理,为病人的安全增添了保障。传统监护系统可以实现病人身份信息的显示,令医护人员方便确认病人。通过对比传统监护系统的功能以及弊端,可以得到医疗腕带具有以下优势特点:(1)在不依靠其他医疗设备的情况下,检测并显示人体血氧浓度,心率快慢以及人体温度,免去了繁琐的仪器测量过程;(2)远程数据传输,将信息数据传输给数据库,医护人员对应编号直接查看病人状态;(3)成本低廉,功能多样,性价比高,而传统监护系统功能单一,完全可被替代。(4)包含GPS定位系统,可以随时精准找到病人,以免因时间问题耽误患者治疗。2.2系统总体方案设计 结合WIFI远程医疗健康监护系统所具备的功能,本文将以单片机为核心控制不同模块实现最终目的。单片机具有良好的集成度,可以大大简化电路设计。同时,由于智能电子设备可能会频繁的使用,所以这些设备的能耗要求非常高,因此需要设计出一些比较节能的控制模块来提高智能电子设备的待机时常,特别是本文所设计的监护系统,需要长时间的开启,而单片机的低耗能正好符合这一需求。除此之外,还将涉及到如何获取人体血氧浓度,心率以及体温,并将数据传输给数据库,多种模块的使用等,利用单片机更容易实现,整个系统的设计主要包含了对系统研究方案的确定设计所需要的硬件电路的设计与软件程序驱动的设计,以及软件后期功能的调试。根据项目功能需求确定项目研究路线,如图2.2.1所示。确定研究对象以及所需材料确定研究对象以及所需材料程序设计学习相关模块驱动方法整合实物进行测试得到准确数据确定方案可行性绘制仿真和原理图编写程序驱动模块根据数据进行调试硬件设计学习相关软件使用图2.2.1系统研究路线图单片机S单片机STM32F103血氧心率传感器晶振与复位电路显示电路数据传输电路体温传感器报警模块GPS模块手机平台图2.2.2硬件系统结构框图2.3控制方式的选择2.3.1单片机芯片的选择方案一:51
MCU从内到外,总体上比较完善。它是以比特操作系统为基础的,所以叫比特处理器。它不仅可以在单片机中对某些具有特定功能的比特进行运算,如传送,设定,调零等;检验等等,也能对比特进行逻辑操作。功能齐全,操作简单。但51MCU虽为经典,但其缺点也十分明显。AD、EEPROM等功能还需要依靠扩展来使用,这为硬件与软件增添了负担。还有就是运行速度过慢,尤其是双数据指针,如果这一部分可以改进,能给编程带来很大的方便。该设备的缺点很明显,51保护能力非常差,不小心差错方位,便很容易损毁芯片。方案二:方案2:STM32MCU的核心是ARM
32位的Cortex-M3CPU,其最大工作频率是72毫赫,1.25
dmips/毫赫。其记忆体晶片内有32至512
Kb闪存与6至64KbSRAM。时钟,重置,功率管理等都是依靠23.6V供电和输入输出接口的驱动电压来实现的。采用4~16兆赫的晶振,PDR及程控电压检测器。内嵌厂注:8兆赫电阻式振荡电路、40千赫电阻式振荡电路.CPU、锁相环。标定了32KHz的RTC水晶振荡器。除错方式:SWD,
SWD,
JTAG接口.最多可提供112个高速输入输出端口,最多可提供11个计时器。除此之外,STM32单片机的学习方式非常的灵活。入门之后,通过各种模块的学习,能够高效的提高使用的效率,并且可以在日常生活中,制作出多种多样的机器人,对于科研学习人员来说,提供能更多的可能性与研究性。针对项目所需进行合理分析后,本文采用STM32F103C8T6为控制核心。在不浪费资源的前提下,充分利用其性能进行调试与实验。2.3.2血氧心率采集模块的选择对于如何获取人体血氧浓度与心率快慢,本文将使用MAX30100的血氧浓度腕式心率检测传感器模块。本设计需要获取到人体内相对准确的心率数据与血氧数据,并且在佩戴较长时间的情况下,能够保持稳定状态,还应具有较低耗能的特点。而MAX30100则是集脉冲式血氧饱和度检测与心跳检测于一体的生化检测系统。其性能和性能都很好地满足了我们的要求,其中包括一台660nm的红光发光二极管,一台880nm的红外发光二极管,一台光电探测器;光学设备,以及降低周围光线干扰的电子线路。具有软件关断模块,待机电流为零,能随时维持其供电状态,适用于低功耗的产品。MAX30100采用1.8伏的电力供应,另外还配有3.3伏的电力供应,并配有符合
IIC标准的通讯接口。现在,市场上大多数都是将MAX30100芯片集成在一个
PCB模块上,在其里面增加一个1.8
V和3.3
VLDO稳压电路,可给模块分别提供5.0
V电源,以便于开发者开发。选择该模块的优点主要是其拥有比较简化的采集血氧与心率的设计,集成LED、光电传感器以及高性能模拟前端;另外它超低功耗的功能可以延长设备的使用寿命,可编程采样率和LED电流节省功率,同时具有超低的关闭电流;另外它具有优良的性能,拥有强大的运动神器弹性,同时可以消除环境光的影响,减少其数据的误差。MAX30100芯片相较与MAX30102芯片廉价,但是性能却十分稳定,测量精确。2.3.3体温采集模块的选择是一种无接触的红外测温,又称辐射测温,通常采用热电型或光电探测器,通过红外辐射进行测温;将红外能量转化成电信号,高精度放大器再对这些电信号展开放大处理,最后利用模数转换成为数字信号。最后,利用单片机,利用算法程序补偿修正、参数校准等工作,就可以输出较高精度的温度值。模块的默认情况是以串口传输方式进行的,该模块有四个接口:电源正极(VCC为3~5V)、电源负极(GND),RC(串口UART-RX)与TD(串口UART-TX)。2.3.4定位模块的选择模组采用ATGM336H定位芯片,支持3.3V~5V供电,采用串口传输,带有SMA和IPEX两种天线接口,以及PPS时钟脉冲输出脚,方便时钟同步,将GPS模块与单片机进行连接,经过单片机程序解析,在串口可输出数据包括UTC时间,经度以及维度,进行快速精准定位。2.3.5WIFI模块的选择在该控制系统中,用户获取系统数据信息需要利用无线通信技术,而对于手机与MCU的无线通信,主要有两种方案,一是利用esp8266wifi模块,通过建立客户端与服务器进行网络通信,实现无线遥控。二是利用蓝牙模块,通过手机蓝牙连接对应蓝牙设备,实现主从通信。两种方案的可行性都十分成熟,但蓝牙模块的传输距离十分有限,且信号容易丢失,而wifi模块只需连接网络后,即可实现任意距离下的信息输送,因此选用esp8266wifi模块。2.3.6报警模块的选择本文采用蜂鸣器模块作为报警模块,蜂鸣器分为有源和无缘两种。在没有振动电源的情况下,通过对振动电源的调节,可以使其产生各种振动信号。但是,有源蜂鸣器里面是有自己的振荡源的,只要在它的正负极连接上直流电压,就可以一直发出声音。本文选用有源蜂鸣器,通过单片机与信号线连接,给与高低电平发出声音,以此实现报警功能。2.4本章小结本章主要介绍了WIFI远程医疗健康监护系统所需要的模块,主要包括主控芯片,测心率血氧模块,蓝牙传输模块,体温模块以及显示模块,在模块选择的过程中,需要查找足够多的资料,进行多方面的对比,充分了解模块的优缺点,关键要对使用场合,数据准确性,功能稳定性进行分析,通过对各个模块进行性能上的分析,从而选择出最合适的模块进行研究,制作出性能稳定,功能齐全的医疗健康监护系统[11]。第3章硬件系统设计3.1系统硬件电路设计本节主要是对各个模块电路的设计,利用了AltiumDesigner软件绘制原理图,并对电路进行简单分析,主要对单片机的晶振、复位与SWD下载电路,MAX30100血氧心率模块电路,体温模块电路,GPS电路,数据传输模块电路,WIFI模块进行了详细设计。软件模块的正常驱动离不开硬件电路的支持,只有合理的硬件电路才能证明系统的可行性,因此对于模块的原理图设计,也是不可或缺的一部分。在完成本设计的过程中,绘制硬件原理图是所要完成的第一步,不仅是确保方案的可行性与合理性,同时也方便了后期搭建实物。本设计采用了AltiumDesigner软件进行了原理图的绘制,该款软件被开发者普遍地应用于各种系统的研发当中,软件内部具有丰富的功能,开发者们可以进行原理图的绘制,PCB板设计,电路仿真等等,有效的提高了系统开发效率。3.2晶振、复位与SWD下载电路在设计最小系统电路时,晶振电路是非常重要的一部分,晶振电路主要功能是为单片机提供一定的时钟参考信息,晶振电路的设计非常简单,只用在单片机的X1与X2对应的引脚上进行石英晶体的连接就可以了,此次设计单片机的晶振频率选择8MHz的,电容大小选择22pF,晶振电路如图3.1所示。图3.1晶振电路原理图因为单片机在工作运行程序时,经常需要重新运行程序,但不能仅凭借重新上电来解决问题,所以需要手动复位,来进行重启,这对于一个单片机系统来说也是十分重要的,NRST系统复位,通过按键按下,电容放电使NRST引脚上为低电平,将所有寄存器复位,当按键没有按下时,则电容会一直充电,两端的电压回到3.3V。其电路如图3.2所示。图3.2复位电路原理图STM32单片机系列拥有多种下载方式,本设计采用SWD下载电路为单片机进行程序烧录,其电路连接非常简单,只需接好对应接口即可,下文会详细介绍,其原理图如图3.3所示。图3.3SWD原理图3.3MAX30100血氧心率模块电路MAX30100模块的工作原理主要利用光信号发射和接收,通过AD转换以及消除环境光的干扰,并对异常数据进行滤波,得到较为准确的光强值,使用者再通过单片机的IIC与其进行通信,读取寄存器中的光强值。这里STM32单片机与其通信采用了模拟IIC的方式,SDA—PB8,SCL—PB9其原理图如图3.4所示。图3.4MAX30100模块原理图3.4体温传感器模块电路GY-614V3是一款红外非接触温度计。电源接口VCC为电源输入,建议输入电压在3.3V-5V之间。分别将VCC和GND引脚连接好,串口分别连接两根信号线,本设计配置了IIC通信,需要焊接PS焊点,通过发射率计算目标温度,外加额温补偿进行温度计算,其原理图如图3.5所示。图3.5GY-614V3模块原理图3.5GPS模块电路GPS模块采用3.3~5V供电,带有SMA和IPEX两种天线接口,用户连接单片机的串口TTL电平或者USB-TTL模式,带有PPS授时输出引脚,采用NMEA-0183的输出协议,设置9600波特率,采用串口读取数据进行采集,原理图如图3.6所示。图3.6GPS模块原理图3.6WIFI模块电路Esp8266芯片内部为32位处理器,用作wife协议处理器,支持UART/GPIO/IIC/PWM/ADC/HSPI等接口,本系统利用单片机的串口与wifi模块进行通信交互,实现数据的传输,下图为esp8266WiFi模块原理图。图3.7WIFI模块原理图3.7报警模块电路本模块将VCC端接入3.3v~5v电压,GND端接地,I/O接信号的输入,当触发时就能发出“哔哔哔~~~”的响声。继电器的驱动电压不能超过限制电压,不然会烧掉继电器,模块采用三极管驱动,下图为蜂鸣器模块原理图。图3.8蜂鸣器模块原理图第4章软件系统设计4.1软件整体框架 软件系统的设计主要针对STM32的程序设计,并结合体温采集模块,心率血氧采集模块,通信模块以及OLED显示模块,软件整体流程如下图4.1所示。图4.1软件流程图4.2软件设计本节主要介绍了智能医疗腕带的软件技术开发[11],单片机技术开发中,设计软件系统也是极其重要的一部分[13],软件程序可以说是机器人的灵魂了,合适的软件方案不仅能够提高工作效率,也能保证数据的准确行,这里主要对编程软件,程序烧录的软件配置,采集各个模块数据的软件操作流程进行了详细的介绍。4.2.1血氧心率采集程序对于MAX30102的使用,首先要了解其采集血氧气与心跳之理论,将于下文中个别说明。血氧测量原理:血氧饱和度,也叫血氧浓度,是指血液中氧饱和血红蛋白与总血红蛋白(不饱和+饱和)的比率。身体要求并调整一种十分精密而具体的血氧平衡。正常情况下,人体内的血管血氧饱和度应该在95-100%之间。若其值在90%以下,就会被认定为贫血。血液含氧量的测定有透过法和反射法两种方法。现在最受欢迎的是传输型。这两种仪器的原理很相似,都都是利用发光二极管(红光RED,红外IR,绿光GREEN和蓝光BLUE等)再用一个二极管来接受被检测物体的发射或者发射出来的光,并将其转化成电信号。再利用高准确度的模数转换器,测定其所产生的电流强度,从而判断出血液中的氧气含量。图4.2PPG波形图上面4.2所示为一种由半导体探测器所收到的最初的光学讯号所形成的一般情况下的PPG波形。波形(由图中间的白色横虚线)可分为
DCsignal和ACsignal,即直流信号和交流信号。其中,直流信号从下到上可以被分成三个部分的反射,分别是:组织(issue),静脉血(Venousblood)和不跳动的动脉血(Nonpulsatilearterialblood)。除此之外,不同性别、不同肤色、不同年龄的人,相应的
DCsignal值也会有所不同。所以,接下来的血液含氧量的测量,都是以相对数值来进行的。在了解完其原理之后,将开始进行分析设计其软件实现流程,图4.7为血氧采集的软件流程图。其中最为重要的是IIC通信的程序与驱动模块读取数据的程序,后面本文将会对程序方面进行刨析讲解,获取心率与血氧数据。图4.3MAX30100软件流程图首先是对IIC通信程序的分析,对于MAX30100测心率血氧模块的数据读取,本设计这里选用软件模拟IIC的方式,需要使用程序去控制SCL与SDA线输出高低电平,并模拟IIC协议的时序,虽然软件模拟IIC的速度较硬件慢,但是可以灵活转换GPIO口,对于一些小应用场景传输速度完全足以运行,配置的程序虽然比较繁琐,但是认真研磨,不难掌握。以下是对模拟IIC程序的讲解:第一步就是GPIO口的初始化,因为本设计使用的是库函数版本,所以以下程序运行环境都在官方库函数版本下进行,模拟采用的GPIO口为PB8,PB9。在完成了初始化以后,开始写启动信号功能,其基本原则是:在SCL线路处于高电平的情况下,
SDA线路从高电平到低电平;此时间序列上的跳跃即为启动信号。当开始信号被设置完毕后,接着进入结束信号,即所谓的停止信号,当SCL线路处于高电平时,该结束信号和开始信号相同,但其SDA从低到高电平跳跃;这也是开始讯号的反方向。下来就是配置接收ACK应答的函数,过程就是先将数据线拉高,等待稳定之后,再将时钟线拉高,继续等待稳定,完成之后就是采集数据线的电平状态了,如果是高电平就表示未应答,如果是低电平即代表应答。配置产生ACK应答的函数,其过程主要是先将数据线与时钟线拉低,等待稳定之后,再将时钟线拉高,4微秒过后,把时钟线重新拉低。配置产生ACK非应答的函数,单听名字与上一个函数关系密切,其过程也是相近,首先将时钟线拉低,数据线拉高。等待稳定之后,然后把时钟线拉高,采样结束后,时钟线又拉回低。对IIC发送一个字节的函数进行编写,并让函数返回从机有无应答状况,若有应答则为1,无应答就为0。对IIC接收读取一个字节的函数进行编写,主要是当发送NACK时,则代表通知从机发送结束,再对SDA进行释放。完成以上基础配置之后,软件模拟IIC通信协议基本可以实现。可以根据情况灵活使用其他的GPIO进行模拟。配置好IIC之后,就是读取数据,将数据存放在FIFO里面,FIFO是一种可以存放数据的缓冲区,因为要读取的数据十分庞大,所以作者是将IIC获取到的数据存放在FIFO缓冲区内,同时可以对缓冲区的数据进行读取,存放,清除,下面将演示如何更新读取FIFO内的数据函数。其中定义一个数组,数组前两个元素存放红外数据,后两个元素存放红光数据。获取数据后就是对数据进行处理滤波,使数据更加平滑稳定。最后就是分别获取血氧浓度与心率大小了,通过函数公式计算出血氧浓度与心率大小。4.2.2体温采集程序在单片机控制系统中,根据红外传感器得到的信号反馈进行计算所测温度。下图为红外测温软件流程图。图4.4体温采集软件流程图下面简单讲解红外体温计配置。使用GPIO时钟,复用时钟设置IO口为通用端口并设置输入,进行初始化将红外体温计串口分别与串口1进行对应并且定义设置起始寄存器,寄存器数量读取函数指针,分析所读时序得到温度值之后,将异常大或小不符合人体温度范围内的值进行过滤以及额温补偿,最后就是根据阻值大小与电压大小计算出人体温度值。4.2.3GPS定位程序GPS定位功能主要依靠其本身程序对自身位置的定位以及相应联系,图4.5为GPS软件流程图。图4.5GPS软件流程图下面是GPS模块初始化的步骤:第一步是启动命令,开启低功耗模式。第二步是配置输出消息的时间间隔,设置输出波特率。第三步是定位信息上传数据帧,GPS数据解析4.2.4WIFI程序对于数据的传输,本文将使用STM32单片机上的USART2进行通信,图4.6为数据传输流程图图4.6数据传输软件流程图对于STM32F103上面的USART2串口的配置流程如下:第一步是GPIO端口的配置,这里选用串口1,故对照引脚后需驱动PA2(TXD)与PA3(RXD),设置模式为复用推挽输出。第二步是使串口时钟与串口复位。第三步是设置波特率(通信两端的波特率需要一致)、数据格式、一个停止位、无奇偶校验、无硬件数据流控制、收发模式,并进行初始化。第四步是配置中断并开启中断。第五步就是编写中断处理函数,本文对于串口中断处理函数没有无进行运用,根据情况而定。第六步是串口数据的接收与发送,直接调用库函数中的收发函数即可。最后就是获取串口的传输状态,用来判断数据是否接收或发送成功。4.2.5报警程序针对报警器的信号控制,主要通过单片机IO口输出的高低电平进行控制,图4.7为蜂鸣器报警流程图图4.7蜂鸣器报警流程图对于蜂鸣器的配置流程如下:使能GPIO时钟,复用时钟设置IO口为通用端口并设置下拉输入,推挽输出,进行初始化将蜂鸣器与IO口进行对应并且定义在主函数中进行引脚初始化与逻辑程序的定义蜂鸣器配置完成之后,在主函数中进行逻辑控制,当体温,心率等数据条件到达某一数值时,控制蜂鸣器发出声音,达到报警的效果。4.2.5上位机程序通过前期采集的血氧心率信号以及体温信号并将其上传到手机app之中,图4.8为APP操作界面图。图4.8APP操作界面图第5章WIFI远程医疗健康监护系统仿真5.1WIFI远程医疗健康监护系统仿真 对于系统的硬件设计与软件设计进行仿真,来进一步证明系统的可行性,对于仿真软件的选择,采用Proteus仿真软件,其软件内部提供了非常多的仿真元器件资源,以及丰富的测试信号(数字信号和模拟信号等),可以用于对电路的测试,都对仿真提供了极大的便利,能够快速的验证自己的电路,对于单片机系统的仿真来说再适合不过,另外Proteus的操作也是简单,十分容易入门,对于一些初级开发者来说是非常不错的选择。下图5.1为Proteus界面图。图5.1Proteus界面图在STM32
MCU的编程方面,我们使用了Keil5编译环境,
KeilMDK-ARM是一种由美国
Keil
SoftwareCorporation(现在已经被ARMCorporation)所生产的一种支持
ARMMCU的IDE(IntegratedDevices)。MDK-ARM中包括了行业标准的
KeilC编译器,宏编译器,调试器,即时核心,以及其他一些其他的功能。关于keil5的安装,可以在keil5官方网站上下载安装包来进行安装,并且需要事先下载好stm32固件库,本文中所使用的固件库是STM32F10x_StdPeriph_Li_V3.5.0,可以从ST官方下载。而对于STM32芯片,有库函数与寄存器两个编译方式,本文将采用库函数版本对单片机以及各个模块进行编程调试,开发语言选用C语言,做好准备工作之后,就是建立一个新的工程,具体流程本文不再赘述,具体可参考官方网站教程实例或直接使用正点原子官方STM32F103C8T6工程模板。在IDE中编译好程序后,需将程序烧录至单片机中,SMT32烧录程序方法有多种种,本文简单介绍两种,并选取一种进行具体使用:第一种ST-LINK的烧录方式,采用SWD方式,仅需4条导线。其中有VCC、GND、SWCLK、
SWDIO这四根线分别于单片机上的这个口对应接好后,再将keli5的STLINK配置好(下文会讲述如何配置),即可一键烧录程序。第二种方法是
USB转
TTL连接线烧写(也称为
ISP烧写,请注意,所用的串端口一定是串端口1)这里将会用到一个烧录软件FlyMcu。第一个步骤就是把单片机的BOOT0设置成1,然后把BOOT1设置成0,然后再按单片机重设按钮,完成上述的操作之后;只有这样,你才能从你的系统内存中开始读写。然后在
BootLoader的协助下,使用1号串接口将该程序烧录到flash中。在程序下载完毕之后,首先要做的就是将BOOT0接地,并进行手工复位。如若不然,单片机将不会在Flash中启动。通过对比这两种烧写方法与简便性,本文将采用第一种ST-LINK烧写方法。在使用ST-LINK烧录程序的时候,需要提前对keil5配置,配置方法如下:打开工程文件,进入到keil5IDE,然后在菜单栏找到魔法棒。进去之后选择Debug框,在Debug框下面找到Use,选择ST-LinkDebugger。接下来点击Use旁边的Settings,,将Port参数选为SW,Max改为1.8MHz。这样基本配置就结束了,当我们插入ST-Link之后,ST-Link配置成功。最后就是烧录程序了,将程序编译好之后,无报错,即可进行烧录,将ST-Link与单片机连接之后,插入电脑,按下按钮,即可成功烧录。5.2WIFI远程医疗健康监护系统的调试在搭建电路的过程中,要注意先对各个模块的电路进行单独调试,确定模块正常运行,在许多的工程项目中,往往会因为一个小模块的问题而影响整个项目进度,因此单独对模块的调试非常重要。测试完成之后,就是对模块的焊接,根据设计要求,需要实物体积小,可穿戴在手腕上,方便携带,因此需要将模块集成焊接在一起,实物焊接完成之后就是进行软件调试,在调试的过程中,遇到的问题主要有以下几点问题需要注意:接线问题,很多时候复杂的线路很容易让人混乱,导致接线错误,烧毁系统,因此在调试的过程中,需要做到不紧不慢,条理清晰的进行接线;焊接问题,由于焊接技术的不熟练,会造成电路引脚部分接触不良或者断掉,从而导致模块无法正常使用,需要多加进行检查,减少焊接操作失误;软件程序的问题,很多时候编写代码不严谨,不规范,导致单片机运行发生意想不到的事情,另外使用算法进行数据处理时,也要针对实际状况,对算法进行合理优化,确保数据的真实性。搭建完成系统之后,就要对获取到的数据,进行不断地调试,确保心率血氧以及温度的数值接近人体机能的实际值,这一过程,最重要的就是对程序的不断优化,直至达到要求为止。5.3系统功能验证5.3.1显示模块打开开关,通过WiFi模块进行连接,发现显示正常,证明显示模块可以正常使用如图5.3.1所示,可以证明本设计实现了连接WiFi和显示功能图5.3.1显示功能5.3.2检测模块把手放在检测模块相应位置,发现可以正常检测心率以及血氧证明心率以及血氧等模块可以正常使用如图5.3.2所示图5.3.2检测功能第6章总结随着科技创新的发展,围绕单片机为控制系统的各种各样科技产品被研发出来,单片机改变了传统的控制方法和设计方法,通过软件控制各个模块不仅节省了资源,而且非常高效。STM32单片机也从众多单片机中脱颖而出,其强大的功能与体系的优势也会越来越显现出来。本设计主要是STM32F103单片机在智能医疗腕带系统中的应用。重点讲解了WIFI远程医疗健康监护系统的实现,从各个模块的选型,到硬件电路的设计,再到软件程序驱动模块,最终实现其功能。由血氧心率模块与体温模块分别采集到脉冲数据,再经过信号的放大、整形等一系列处理,由单片机通过中断处理与IIC通信协议获取到数据,并利用公式转换数据得到真实的血氧浓度值、心率快慢以及人体温度,再驱动显示屏显示数据并通过单片机的串口通信驱动通信模块发送给数据库。为了更好的完成这次毕业设计,在这段时间里每天认真学习各种软件的使用方法,学习编写程序驱动各个模块获取数据,为毕业设计的成功实现,打好了基础。本次的设计其系统实现简单,功能强大丰富,具有很强的实用价值,为医疗事业贡献了力量。另外也有很多拓展功能可以在今后的学习中不断探索,添加到设计中,使其日渐完善。这一次的毕业设计过程,也是十分艰苦,让我收获到了很多,并做了简单的总结:(1)首先在做任何事之前要做好充分准备,学会搜集资料,不盲目的学习,不然只会浪费时间。(2)经过这次设计之后,让我充分认识到单片机的强大,并认识到自身的不足。(3)只有经过无数次失败,才能走向成功,不断尝试,就会有出路。参考文献[1]周开利,张伟,王旭,基于蓝牙和智能手机的人体多生理参数无线监测系统[J].物联网技术2015(06)[2]张鹏,严孝祥,基于Android平台的心电远程监护系统的实现[J].物联网技术2015(04)[3]吕峰,杨莉,崔茂应等.智能移动医疗动态监护系统与物联网的运用分析[J]自动化与仪器仪表2016(08)[4]翟翔.浅谈老年人监护系统的研究和发展[J]内蒙古科技与经济2016(22)[5]郝文延.病床监测监护系统设计[J]自动化应用2017(04)[6]饶宜迅,郭洛含,易永余.一款基于多传感器的室内病床监护系统设计IJ].电子测试,2021(17).[7]郝天然.智慧医院监护系统集成方案[J]中国新通信2021(17)[8]周杰,王申,田敏.基于无线传感器网络的远程医疗监护系统设计[J].科技与创新2019(13).[9]何非,何克清.大数据及其科学问题与方法的探讨[JL武汉大学学报(理学版)2014(01)[10]梁帅.病理文本数据的结构化处理系统研究与实现[D].东华大学2015[11]赵泽,崔莉.一种基于无线传感器网络的远程医疗监护系统[J].信息与控制,2006(02):265-269.[12]王鑫.便携式心肺监护系统的设计与实现[D].南京邮电大学,2022.[13]黄俊翔,肖振邦,陈真诚,朱健铭.便携式心电血氧动态监护系统设计[J].信息技术与信息化,2022(09):15-19.[14]许乐,赵文龙.基于STM32的老年人健康监护系统设计[J].南昌航空大学学报(自然科学版),2022,36(02):95-101.[15]BarettaA,BursiR,PalazzinAetal.AnautomatedcomputationaltooltostudyMRIsafetyofimplantedpassivecardiovascularmedicaldevices[Jj.EuropeanHeartJournal,2020.41.[16]OlsonDevraJ.,KulukianAnita,TaylorJanelleD.etal.PreclinicalcharacterizationoftucatinibinHER2-amplifiedxenograftandCNSimplantedtumors[J].CANCERRESEARCH,2020,80(16)[17]BruiningNico.deJaegerePeterTelemedicalmonitoringbyanimplantedlooprecordergatewaytopersonalizedmedicine?ResultsoftheSMARTMIstudy.[J]Cardiovascularresearch,2022[18]StanislavS.Dukhin,MohamedE.LabibHydrodynamically-drivendrugreleaseduringinterstitialfowthroughhollowfibersimplantednearlymphatics[JJColloidsandSurfacesA:PhysicochemicalandEngineeringAspects,2016,521.[19]AlshammariHamoudH..TheinternetofthingshealthcaremonitoringsystembasedonMQTTprotocol[J].AlexandriaEngineeringJournal,2023,69.[20]ColomboGL,TorreE,DiMatteoS,MontiE,MartinottiC,BrunoG,LevratGuillenF.EE281FreestyleLibre2FlashGlucoseMonitoringSystem:BudgetImpactandCost-UtilityAnalysesinType1DiabetesFromtheItalianNHSPerspective[J].ValueinHealth,2022,25(12S).[21]WeiShuoshuo,LuRong,ZhangZhengping,WangFaxuan,TanHai,WangXiaohong,MaJinlan,ZhangYating,DengNing,ChenJuan.MRI-assesseddiaphragmaticfunctioncanpredictfrequentacuteexacerbationofCOPD:aprospectiveobservationalstudybasedontelehealth-basedmonitoringsystem[J].BMCPulmonaryMedicine,2022,22(1).附录附录A原理图附录B主程序#ifndef__gps_h#define__gps_h#include"stm32f10x.h"#defineGPS_USART_REC_LEN 200 //定义最大接收字节数200externcharGPS_USART_RX_BUF[GPS_USART_REC_LEN];//接收缓冲,最大USART_REC_LEN个字节.末字节为换行符//定义数组长度#defineGPS_Buffer_Length80#defineUTCTime_Length11#definelatitude_Length11#defineN_S_Length2#definelongitude_Length12#defineE_W_Length2#definefalse0#definetrue1 typedefstructSaveData{ charGPS_Buffer[GPS_Buffer_Length]; charisGetData; //是否获取到GPS数据 charisParseData; //是否解析完成 charUTCTime[UTCTime_Length]; //UTC时间 charlatitude[latitude_Length]; //纬度 charN_S[N_S_Length]; //N/S charlongitude[longitude_Length]; //经度 charE_W[E_W_Length]; //E/W charisUsefull; //定位信息是否有效}_SaveData;extern_SaveDataSave_Data;voidCLR_Buf(void);voidclrStruct(void);voidGPS_RecHandle(u8res);voidparseGpsBuffer(void);//parse:分析GPS数据#endif#include"gps.h"#include<string.h>#include<stdio.h>#include"led.h"u16point1=0;//接收数组定位charGPS_USART_RX_BUF[GPS_USART_REC_LEN];//接收缓冲,最大USART_REC_LEN个字节._SaveDataSave_Data;voidCLR_Buf(void)//串口缓存清理{ memset(GPS_USART_RX_BUF,0,GPS_USART_REC_LEN);//清空 point1=0;}voidclrStruct(void){ Save_Data.isGetData=false; Save_Data.isParseData=false; Save_Data.isUsefull=false; memset(Save_Data.GPS_Buffer,0,GPS_Buffer_Length);//清空 memset(Save_Data.UTCTime,0,UTCTime_Length); memset(Save_Data.latitude,0,latitude_Length); memset(Save_Data.N_S,0,N_S_Length); memset(Save_Data.longitude,0,longitude_Length); memset(Save_Data.E_W,0,E_W_Length);}voidGPS_RecHandle(u8Res){ if(Res=='$') { point1=0; } GPS_USART_RX_BUF[point1++]=Res; if(GPS_USART_RX_BUF[0]=='$'&&GPS_USART_RX_BUF[4]=='M'&&GPS_USART_RX_BUF[5]=='C') //确定是否收到"GPRMC/GNRMC"这一帧数据 { if(Res=='\n') { memset(Save_Data.GPS_Buffer,0,GPS_Buffer_Length);//清空 memcpy(Save_Data.GPS_Buffer,GPS_USART_RX_BUF,point1); //保存数据 Save_Data.isGetData=true; point1=0; memset(GPS_USART_RX_BUF,0,GPS_USART_REC_LEN);//清空 } } if(point1>=GPS_USART_REC_LEN) { point1=GPS_USART_REC_LEN; } }voiderrorLog(intnum){ // while(1)// {// printf("ERROR%d\r\n",num);// } LED_Control(ON);}voidparseGpsBuffer(void)//parse:分析GPS数据{ char*subString; char*subStringNext; chari=0; if(Save_Data.isGetData) { Save_Data.isGetData=false;// printf("**************\r\n");// printf(Save_Data.GPS_Buffer); for(i=0;i<=6;i++) { if(i==0) { if((subString=strstr(Save_Data.GPS_Buffer,","))==NULL) errorLog(1); //解析错误 } else { subString++; if((subStringNext=strstr(subString,","))!=NULL) { charusefullBuffer[2]; switch(i) { case1:memcpy(Save_Data.UTCTime,subString,subStringNext-subString);break; //获取UTC时间 case2:memcpy(usefullBuffer,subString,subStringNext-subString);break; //获取UTC时间 case3:memcpy(Save_Data.latitude,subString,subStringNext-subString);break; //获取纬度信息 case4:memcpy(Save_Data.N_S,subString,subStringNext-subString);break; //获取N/S case5:memcpy(Save_Data.longitude,subString,subStringNext-subString);break; //获取经度信息 case6:memcpy(Save_Data.E_W,subString,subStringNext-subString);break; //获取E/W default:break; } subString=subStringNext; Save_Data.isParseData=true; if(usefullBuffer[0]=='A') Save_Data.isUsefull=true; elseif(usefullBuffer[0]=='V') Save_Data.isUsefull=false; } else { errorLog(2); //解析错误 } } } }}#ifndef__WUXIAN_H#define__WUXIAN_H#include"Def_config.h"#include"stm32f10x.h"#defineXinLv_Length5#defineXueYang_Length5#definelatitude_Length11#defineN_S_Length2#definelongitude_Length12#defineE_W_Length2#defineWuXian_RX_BUF_Length100#defineJUDGE_Length2typedefstruct{ charWuXian_Buffer[WuXian_RX_BUF_Length]; charisGetData; //是否获取到数据 charisParseData; //是否解析完成 charXinLv[XinLv_Length]; //心率值,字符串形式存储 charXueYang[XueYang_Length]; //血氧数据 charlatitude[latitude_Length]; //纬度 charN_S[N_S_Length]; //N/S charlongitude[longitude_Length]; //经度 charE_W[E_W_Length]; //E/W charis_XinLvWarn[JUDGE_Length]; charis_XueYangWarn[JUDGE_Length]; charis_HandWarn[JUDGE_Length];}_SendData;extern_SendDataSend_Data;#definefalse0#definetrue1 voidparseWuXianBuffer(void);voidWuXian_Rec(u8Res);voidWuXian_Clear(void);#endif#include"wuxian.h"#include<string.h>#include<stdio.h>#include"lcdUart.h"#include"usart1.h"u8point1=0; u8WuXian_RX_BUF[WuXian_RX_BUF_Length];_SendDataSend_Data;voidWuXian_Clear(void){ memset(Send_Data.WuXian_Buffer,'\0',WuXian_RX_BUF_Length); memset(Send_Data.XinLv,'\0',WuXian_RX_BUF_Length); memset(Send_Data.XueYang,'\0',WuXian_RX_BUF_Length); memset(Send_Data.latitude,'\0',WuXian_RX_BUF_Length); memset(Send_Data.N_S,'\0',WuXian_RX_BUF_Length); memset(Send_Data.longitude,'\0',WuXian_RX_BUF_Length); memset(Send_Data.E_W,'\0',WuXian_RX_BUF_Length); memset(Send_Data.is_XinLvWarn,'\0',WuXian_RX_BUF_Length); memset(Send_Data.is_XueYangWarn,'\0',WuXian_RX_BUF_Length); memset(Send_Data.is_HandWarn,'\0',WuXian_RX_BUF_Length); Send_Data.isGetData=FALSE; Send_Data.isParseData=FALSE;}voidWuXian_Rec(u8Res){ if(Res=='$') { point1=0; } WuXian_RX_BUF[point1++]=Res; if(Res=='\n') { memset(Send_Data.WuXian_Buffer,'\0',WuXian_RX_BUF_Length);//清空 memcpy(Send_Data.WuXian_Buffer,WuXian_RX_BUF,point1); //保存数据 Send_Data.isGetData=true; point1=0; USART1_SendString((u8*)Send_Data.WuXian_Buffer);// printf("DCV16(0,7,'%s',%d);\r\n",WuXian_RX_BUF,1);// LCD_CheckBusy(); memset(WuXian_RX_BUF,'\0',WuXian_RX_BUF_Length);//清空 } if(point1>=WuXian_RX_BUF_Length) { point1=WuXian_RX_BUF_Length; } }voidparseWuXianBuffer(void)//parse:分析数据{ char*subString; char*subStringNext; chari=0; if(Send_Data.isGetData) { Send_Data.isGetData=false; for(i=0;i<9;i++) { if(i==0) { if((subString=strstr(Send_Data.WuXian_Buffer,"$"))!=NULL) { subString++; if((subStringNext=strstr(subString,","))!=NULL) { memcpy(Send_Data.XinLv,subString,subStringNext-subString); subString=subStringNext; } } } elseif(i<8) { subString++; if((subStringNext=strstr(subString,","))!=NULL) { switch(i) { case1: memcpy(Send_Data.XueYang,subString,subStringNext-subString); break; case2: memcpy(Send_Data.latitude,subString,subStringNext-subString); break; case3: memcpy(Send_Data.N_S,subString,subStringNext-subString); break; case4: memcpy(Send_Data.longitude,subString,subStringNext-subString); break; case5: memcpy(Send_Data.E_W,subString,subStringNext-subString); break; case6: memcpy(Send_Data.is_XinLvWarn,subString,subStringNext-subString); break; case7: memcpy(Send_Data.is_XueYangWarn,subString,subStringNext-subString); break; default:break; } subString=subStringNext; } } else { subString++; if((subStringNext=strstr(subString,"\r"))!=NULL) { memcpy(Send_Data.is_HandWarn,subString,subStringNext-subString); } } } Send_Data.isParseData=true; } }#ifndef__XINLV_H#define__XINLV_H#includ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年吉林省事业单位人员招聘考试试题与答案详解
- 2026年呼和浩特市玉泉区事业单位人员招聘笔试试题与答案详解
- 2026北京市朝阳区卫生健康委员会所属事业单位第二批招聘241人考试备考题库及答案解析
- 2026年上饶市信州区公务员人员招聘笔试备考试题与答案详解
- 2026年平顶山市湛河区公务员人员招聘考试试题与答案详解
- 制药厂原料验收规范
- 2026浙江台州温岭市医疗急救指挥中心招聘1人笔试备考试题及答案解析
- 2026年陕西交通控股集团有限公司社会招聘考试参考题库及答案解析
- 2026年江西省萍乡市公务员人员招聘笔试试题与答案详解
- 2026成都银行股份有限公司招聘总行数据管理部大数据开发专家等岗位笔试备考题库及答案解析
- 三年级语文上册人教版《大自然的声音》
- 2026安徽省考评员培训考试题库及答案
- 2026年四川省拟任乡科级领导干部任职资格试题及参考答案
- 统编五年级上册《航天员写给孩子的信》课件
- 2026年陕西水务发展建设集团第三工程有限公司招聘(28人)考试备考试题及答案详解
- 2026年高校审计处岗招聘笔试真题附答案
- 安徽省黄山市屯溪四中2025年七年级上学期地理期中考试(含答案)
- 桥梁伸缩缝更换工程施工组织方案
- 世界各大洲国家中英文、区号、首都大全
- 2024年国家储备粮食购销标准化合同
- 《 会计学基础》 课件 谢合明 第2、3章 会计概念框架、会计核算流转程序
评论
0/150
提交评论