stm32真实项目详解 基于STM32的个人健康助手项目说明书
在近年来有很多流行病毒都在我们的周围传播,这对于我们造成了非常大的伤害,包括我们的生活和工作等等都受到严重影响。不但是一个国家的事情,跨越国家传播的病毒也随即产生并以非常快的速度在蔓延。由于病毒产生非常地快,这使很多医生也无可奈何,挡也挡不住病毒的传染,严重威胁着人类的生存。其实大多数病毒都是由于人体的生命机能产生的,当病毒产生就有可能随即传播。当我们身体的温度和心率等因素发生变化都会影响我们的身体健康,这就要必须进一步地检查并采取措施来预防病毒的传播。因此,便携式的个人健康助手就能起到一定的作用,它能对人体的心率和温度进行实时监测,并能够通过手机来显示实时的数据,当人体的心率或者温度超过正常的时候还能及时报警。
人体中的温度和心率都是很重要的数据,当人体的这些数据不在正常的范围之内往往是人体不健康的表现。在现在科学技术的发展,人类对生活的需求也随机提高,家里如果有患者就能实时检测他们的身体状况,当患者的身体发生不好的状况就能立刻知道,及时能够对患者进行治疗了。在医院住院的病人也可以带上这个个人健康助手,这样护士就能对病人的状况实时监测,一旦发现病人的温度或者是心率不正常的时候就能告诉就诊医生。如果能将这个个人健康助手广泛地应用到我们的生活,人类也将会是一个质的飞跃。所以我想就是利用stm32来设计一个便携式的人体健康检测系统,通过移动端随时检测我们身体的数据,希望能够帮助医生的诊断和治疗,能更好地服务于医生和人们之间,更好地用于医疗方面,而且我认为这设计也具有很大的市场研究价值。
关键词:(STM32;体温;心率;医疗;检测)
绪论国内外发展状况国外研究现状经过了解,国外已经能利用传感器网络来监测人体的仪器,并且得到快速发展。国外的技术十分强大,已经可以实现通过无线端传输数据了。国外的那些仪器可以测量人体的数据传输到PC端,其实也可以将这种信号通过无线传输的方式将其传送到网络上去,这样就可以应用于我们的生活上去了。说是有这种技术,但是用这种技术做出来的检测仪还没有用的上,更不用说是应用到广泛地应用到医疗领域当中了。
国内研究现状由于技术的发展,世界各地都把大量的人力和物力投到医疗设备上去,而人体生理监护仪器也随机发展。制造出来的仪器也将投入到医院去监测病人的身体情况,逐渐完善了医疗系统。世界各大国家的监护系统在快速发展,而对于我国的水平来说,与国际水平还是有一定的差距的。大多数的高水平监护设备都是进口的,这些设备都是依赖国外的,价格也一定很昂贵,也不是所有医院能负担得起的。所以,最近几年国内也特别关注这个问题,也在努力地研究,就是利用嵌入式技术做出来的便携式参数人体生理信号检测仪,这种仪器很快被利用起来,逐步应用到人们的生活上去
论文主要内容本论文主要介绍了以STM32F4VET6开发板为核心来制作的便携式个人健康助手,我觉得这个设计有很大的研究价值,希望在未来的生活中能够普及上。这个设计除了运用了STM32F4VET6开发板之外还加上了蓝牙、人体温度传感器、心率脉搏传感器模块,还有一台手机或者电脑用来显示数据,这样就结合成了一个简单的便携式个人健康助手。在这个设计的过程中通过Keil uVision5环境下进行程序的设计,搭建起编程环境,再结合起硬件来对程序的研究与调试。另外要建立起网络的链接,这里就需要用上蓝牙协议,以蓝牙的方式实现无线传输数据。重点还需要对温度和心率模块采集的数据进行打包,经过蓝牙无线传播数据给手机端。而且当监测到人体的温度或者心率不在正常值的范围下还可以通过蜂鸣器发出报警。我觉得这设计十分人性化,不仅在现在每家每户都能用得上,也顺应以后的生活需要,再深入研究一下就能广泛用在医疗方面。
系统总体设计系统工作原理及框架本设计采用的是STM32F4VET6开发板来控制整个过程,另外还有三个模块,分别是GY-MCU90615模块、RCWL-0530模块和蓝牙模块。整个系统的工作原理看似很简单,就是利用两个传感器来对人体采集数据,GY-MCU90615模块其实就是一个利用红外来测量温度的模块,其用来获取人体的温度。RCWL-0530模块就相当于一个心率传感器,用来测量人体的心率,并能获取比较准确的数据。其次,还有一个蓝牙模块,无线传输数据就要用到蓝牙了,它能将采集到的温度和心率的数据通过无线传播的方式传输到手机端,人们就能通过手机端随时监测到人体的数据了。看似一个很简单的工作过程,其实坐起来就有点复杂了,特别是蓝牙传输数据这一块,本是对蓝牙的工作远离就没有什么特别的理解,还要自己去领悟其中的工作远离还有对程序的理解。在这一蓝牙上也花费了我不少的时间。系统的工作原理就是这样了,其系统框架如下:
温度检测模块采集数据
将采集的数据打包,通过蓝牙模块无线传输数据
Stm32开发板
心率检测模块采集数据
手机
当采集的数据不在人体的正常范围内蜂鸣器发出报警
系统总体功能介绍(1)、 利用GY-MCU90615模块来测量人体的温度,这个模块相当于一个温度传感器,方便拿来采集数据。
(2)、利用pulsesensor脉搏心率、传感器来测量人体的心率状况,这个模块里面包含着脉搏心率传感器,可以拿来采集数据。
(3)、利用蓝牙的方式将测量到人体的数据发送给手机,在手机上能够实时监测人体的温度和心率。
(4)、当人体的温度或者是心率在不正常的情况下还能报警。
系统硬件的选择STM32F4VET6开发板这个个人健康助手的设计主要是利用STM32F4VET6开发板来驱动的,也就是这个设计的核心。STM32F4VET6也是STM32F4系列的一种,其特征小而功能强大,就是利用了它的这些特性,将它广泛地利用于嵌入式行业当中。STM32F4系列不仅兼容性强,而且还具有高性能的特点。就是因为STM32F4这个系列的兼容性比较强大,大多数STM32F2系列的产品都能兼容得下。STM32F4采用采用先进的Cortex M4内核,指令集不再是Cortex M3了,与此相比下好带有更高效的FPU和DPS指令集。STM32拥有的资源很多,包括:集成FPU和DSP指令,而且具有192KB SRAM、1024KB FLASH、12个16位的定时器、2个全双工I2S、3个SPI、2个DMA控制器、6个串口、2个USB、3个IIC、2个CAN、3个12位ADC、2个12位DAC、1个RTC、1个SDIO接口、1个FSMC接口、1个摄像头接口以及112个通用的IO口等。对于我的这个设计个人健康助手能用上它功能就十分强大了,而且还具有它的高性能和更低的功耗。这个设计的成本也比较低,但是效率就特别高了,将来如果能广泛地应用于我们的生活中,那就特别地方便而且人人都消费得起。
温度检测模块
温度检测模块这部分采用的是GY-MCU90615红外温度模块,它的成本也比较低。工作电压为3-5V,传感器测量温度范围为-40℃~-85℃,这个范围已经远远超过了我们人体的体温变化了,可以作为使用。其工作原理是通过STM32来读取红外温度的数据,通过串口的通信方式输出数据。在调试这个模块的时候用到的串口波特率有为115200bps,通过串口与电脑连接就可以测试它输出的数据。这个温度传感器的模块特别适用于便携式的个人健康助手,体积小而又具有高性价比。它的感应距离有1-2cm,可以不用紧贴人体就能监测到数据,经过测试,数据的可靠性还是可以的,测量精度达到0.5℃。加上它的体积小,能耗又底,这就很适用于携带了。
另外这模块使用核心芯片MLX90615,其是一个非接触式的红外感应器。这块芯片的精度比较高,可成为高精度数字式芯片。它里面测量的温度范围也是可以修改的,就是通过SMBus和PWM两种输出方式,这样就能大大提高这个设计的准确性和可靠性。MLX90615主要是由红外传感器和低噪声放大器两部分组成的,通过这两部分就能进行数据的采集。其原理式红外传感器通过通过人体采集的红外辐射,并且把它转变为电信号,在经过放大器的处理后把数据送给模数转换器。经过模数转换处理后的数字信号又经过滤波器处理后送到数字处理器,最后把结果保存在MLX90615中,这样就可以把数据提供给CPU了。
GY-MCU90615模块实物图
Pin1 |
VCC |
电源 (3v-5v) |
Pin2 |
GND |
电源地 |
Pin3 |
TX |
串口数据发送 TXD |
Pin4 |
RX |
串口数据接收 RXD |
Pin5 |
RST |
内部使用,不需要连接,悬空 |
Pin6 |
SIM |
内部使用,不需要连接,悬空 |
引脚说明:
心率检测模块心率检测模块是由pulsesensor脉搏、心率传感器弄成的。这个心率传感器可放在手指或者耳垂等处,这样就可以测量数据。心率传感器通过导线将采集到的模拟信号转变为数字信号传到STM32开发板中,再由STM32将数据处理后就能得到心率数。该传感器的可在供电电压3.3V-5V正常工作,放大倍数能达到330倍。传感器是由三根线连出来的,标有S的为模拟信号输出线,要接上STM32的ADC接口;标有 的为电源输入线,应接在STM32开发板的3.3V或5V接口;标有-的为地线,与开发板地线接口相连。
pulsesensor心率传感器模块实物图
RCWL-0530模块线路
蓝牙模块蓝牙在生活中是很常见的,也是我们在传输数据上所需要的,而这个设计的蓝牙模块型号是JDY-08,用的是CC2541芯片来设计。这个蓝牙模块是基于蓝牙4.0的协议标准,能发射的最大距离达到60米,基本的蓝牙传输功能都具备。例如,用户可以通过AT指令来修改设备名称、能配对密码、发射功率、服务UUID等指令,非常灵活快捷。JDY-08蓝牙的测试电压为3.3V,但在调试过程中我也用过5V电压,经过测试还是可以的。没发现什么问题。它的通信速率为3K Bytes/秒,在15到30米的距离之内都能通信,而且还支持IO口控制断开连接。
JDY-08蓝牙模块
DX-BT05 4.0蓝牙模块线路
报警系统这个设计是通过一个蜂鸣器来实现报警的功能。当人体的温度大于38摄氏度,蜂鸣器就会报警。蜂鸣器的工作电压在3.3V-5V,通过其I/O与STM32的GPIO与连接就可以使用。这个蜂鸣器是高电平触发,在STM32中我选用的是PE8引脚,当我给它一个高电平蜂鸣器就能报警。
蜂鸣器引脚说明:
1 |
VCC |
电源 (3v-5v) |
2 |
GND |
电源地 |
3 |
I/O |
外接单片机IO口 |
为了提高系统的运行速度,改善系统的性能,在进行软件设计的时候,也要采用模块化的思路,本设计的软件编程采用了调用固件库函数的设计方法。不管使用的微处理器发展到何种地步,在进行设计的时候,最终也是要对寄存器进行操作,但是stm32拥有数百个寄存器,要是想对每个寄存器都了如指掌的话,我觉得还是有点难度的。虽然说这么多的寄存器,但只要努力地去学习其实并不难。
4.1 keil MDK V5简介在整个设计的编程中都能用到Keil MDK,而我的个人健康助手用的是MDK5.14这个版本。Keil MDK其实也有别名,我比较熟悉的是uVision4。这个软件十分强大,大多数单片机,嵌入式开发都要用上它。Stm32能在该软件中开发是由于该软件能支持ARM处理器提供一个开发环境,相应地就很适用于我这个基于stm32的个人健康助手中了。下载好软件,配置运行环境就可以使用了。这个软件用起来也很简单,而且很容易学,之前我学习的51单片机虽然不是在这个软件上编程的,但是学起来发现这个软件更加的强大简单而且能够满足大多数嵌入式开发当中。软件中自动配置了启动代码,性能分析,编译代码,能烧写程序到开发板中。
MDK具有的几大突出特征:
- 启动代码生成向导,自动引导。
- 软件模拟器,完全脱离硬件的软件开发过程。
- 性能分析器,看得更加的远,更加的细,更加的清。
J-Link是SEGGER公司的产品,能支持仿真ARM内核芯片。J-Link是stm32烧写程序必不可少的东西,它会跟KEIL等配合使用。我的个人健康助手的stm32开发板中的JTAG/SWD调试接口就是跟这个东西连上,经过它再通过USB接口就能连上电脑了,这样就能烧写程序到开发板当中了。J-Link与keil等编程环境连接起来使用,其简单方便,也很容易学。
JLINK主要特点:
- 即插即用。
- 正常工作电压范围1.2v-3.3v。
- 自动速度识别功能。
- 支持所有ARM7/ ARM9/ ARM11内核的芯片。
- 能在ADS,IAR,KEIL,WINRAM,REALVIEW等开发环境使用。
- 最高JTAG速度12MHz。
J-Link实物图
温度采集处理温度数据采集的实现主要是通过传感器和串口之间通信,首先通过红外传感器感应到人体的红外辐射,传感器再由收集到的模拟信号转变成数字信号传给STM32中,STM32再把数字信号经过处理就能通过串口来发送数据,这就实现了温度数据采集。
红外辐射测量基本原理红外辐射是我们肉眼看不见的光,也称作红外线。红外线在我们生活中也比较常见,在很多科技领域上都能用它来感应。由于带电粒子的运动,所有温度高于绝对零度的物体都会在不断地向周围环境发出红外辐射能量。由斯蒂芬-波尔兹曼辐射定律
可以知道,红外线发射的辐射功率。只要知道其中的温度和辐射率就能计算出来。利用其公式相反的也可以知道其中的温度来测量其辐射功率。红外传感器的输出信号是由传感器温度Ta和被测温度To之间的相互作用而成:
。
MLX90615的传输协议主设备和从机设备之间能实现传输数据是通过SMBus传输数据的协议,在这套协议的基础上,主设备可以通过自己定义的读数据和写数据进行设备之间的通讯。每套协议都有该规定的传输方式,要想怎样发送数据就由该设定者来定义的。而这套协议的传输数据格式如下面图1和图2所示。
图1 读数据格式
图2 写数据格式
SDA上的数据是在SCL为上升沿的时候被收集的。其中16位数据需要分2次来传输,而且每次传的是一个字节。按照规定,每一个字节相应的都是按照低位在后,高位在前的方式来传输,而两个字节中间的第9个时钟为应答时钟。下面是数据传输时序图。
图3 数据传输时序
心率采集数据的原理光电容积法采用光电容积法来测量心率是因为这种方法容易对我们走动的身体采集心率数据,相应的我这个个人健康助手设计是便携式的。既要做到精又要做到细,对于我的设计能装上一个很小的设备,我想就只有这种方法可行了。由于人体的血管搏动会造成透光率不同,所以光电容积法就可以通过这个方式来进行心率的采集。当传感器的光束通过人体的血管,由于动脉的搏动,可以使透光率发生改变。然后传感器感应接收反射出来的光想,将其转变为电信号输出给stm32开发板中。传感器放在人体的耳垂或者手指上就能测量到人体的心率,对于这样的采集不但方便简单,而且可靠性也比较高。
传感器是是由光源和光电变换器组成的,而光源是采用了能发射绿光的LED灯,其峰值波长为515nm。另外接收器是采用了一种波长为565nm的光感受器,其实两者的波长相近,所以灵敏度较高。当人体的手指或耳垂感受到LED灯放射的绿光,通过血管搏动会使绿光的透光率发生改变,然后再传到传感器的光感受器。接着传感器就会把收集到的模拟信号转变为数字信号,经过放大器后再把信号传到stm32的AD中,这样就能采集到心率的数据了。
无线数据传输的实现这个个人健康助手是通过蓝牙来实现无线传播数据的。把蓝牙和STM32开发板中的输出数据串口相连就可以无线传输数据,这里我用的是USART1串口。把STM32开发板USART1的TX管脚与蓝牙模块的RX相连,USART1的RX管脚与蓝牙模块的TX相连。连接好导线后就可以通过蓝牙传输数据到手机端去,在蓝牙app上就能查看信息。蓝牙里面有它独立的一套协议,只要在相应的程序中写上这套蓝牙协议就能实现传输数据。
系统调试我觉得调试这个部分挺重要的,一定要细心,否则会现漏洞。我这个设计不是完全做出来才去调试的,而是分开几部分去调试,这样做不但能清楚整个设计的架构,而且会大大地提高我设计的成功率。我的个人健康助手分开了四部分来调试:串口调试、温度模块调试、心率模块调试、蓝牙模块调试。
首先就是串口和蓝牙调试,这两个可以合起来一起测试,验证是否可以通信,这个我用了LED等的亮灭。将蓝牙模块连接在stm32上,然后手机安装一个app。连接好线,安装好app方可通信。打开蓝牙的app,就可以连接上蓝牙了,部分调试过程如下:
以上两张调试的图片可以证明我的USART1串口能顺利收到蓝牙的信号,并且能够用手机控制。我用了一盏LED去测试,当手机发送信号,通过蓝牙协议就能实现控制LED等的亮灭,进而可以用USART1这个串口去做我的个人健康助手设计。
接着就是温度采集还有心率采集模块的测试,这两个过程也是整个设计的最重要的一部分,我也是用了比较长的时间,不断地搜索资料,最后才把这两部分做出来。在调试温度模块的时候,发现温度的数据有两个,经过测试才知道真的有两个数据,分别有人体数据和周围环境的数据。经过修改了程序,我把这两个采集到的数据分开打印出来,除了两个温度都有些误差,其他调试还算成功。我把采集到的温度数据用USART1串口把数据传到电脑打印出来,下面是我调试采集温度模块数据的部分过程:
还有就是心率模块的调试,这部分过程也是整个设计最难的一部分。我把里面的收集心率信号的程序一步一步细心地才能够顺利移植过来,但是在调试过程中出现的问题挺多的,当时我是每相隔一秒就把采集到的心率打印出来的,发现数据是有的,但是有的时候却不是按照我的时间来打印,再仔细调试过,把里面的中断程序改了一点,我再相隔两秒钟打印数据,这个调试还是可以的。然而心率模块的传感器对光较为敏感,当采集不到人体的数据就会随意地采集了周围的数据,就相当于这个传感器在不断地采集数据。有数据误差也不例外,当把手指放到传感器中,是要隔一小段时间才能采集到人体的心率,不然数据都是不准确的。下面是我在调试心率这部分的过程:
经过以上温度和心率代码的调试,最终实现了人体温度数据的采集。一次在调试的过程中我一部小心把一个引脚写错导致了这个程序怎么也实现不了功能,这就是不够细心的体现,所以在调试的过程中我把stm32里用到哪些引脚都记下来,哪个引脚对应要干什么都写下来了,到时候如果程序出现错误的时候就方便我找到问题的原因了。
最后,我的部分调试功能都确保成功了,然后把所有的模块和起来,最终实现了我的个人健康助手所有功能。整设计的实物图和测试如下图:
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com