13376| 10
|
[DFRobot-9月免费试用]+<Chonly>结果篇-心率传感器的使用 |
本帖最后由 chonly 于 2016-12-19 23:21 编辑 隔了好久了,但时间总是不够用。一忙就顾不上,花了好几个的夜晚来截图和打字。 这次的图片会比较多,请略览即可哈~~ 直入正题~~~ 一:原理说明(摘自网络,看看就好) 传统的脉搏测量方法主要有三种: 一是从心电信号中提取; 二是从测量血压时压力传 感器测到的波动来计算脉率; 三是光电容积法。 前两种方法提取信号都会限制病人的活动,如果长时间使用会增加病人生理和心理上的不舒适感。 而光电容积法脉搏测量作为监 护测量中最普遍的方法之一,其具有方法简单、佩戴方便、可靠性高等特点。 光电容积法的基本原理是利用人体组织在血管搏动时造成透光率不同来进行脉搏测量 的。其使用的传感器由光源和光电变换器两部分组成,通过绑带或夹子固定在病人的手指 或耳垂上。 光源一般采用对动脉血中氧和血红蛋白有选择性的一定波长(500nm~700nm)的 发光二极管。当光束透过人体外周血管,由于动脉搏动充血容积变化导致这束光的透光率 发生改变,此时由光电变换器接收经人体组织反射的光线,转变为电信号并将其放大和输 出。由于脉搏是随心脏的搏动而周期性变化的信号,动脉血管容积也周期性变化,因此光 电变换器的电信号变化周期就是脉搏率。 根据相关文献和实验结果,560nm 的波可以反映皮肤浅部微动脉信息,适合用来提取 脉搏信号。 二:原理图对比 pulse sensor传感器采用了峰值波长为 515nm 的绿光 LED,型号为 AM2520,而光接收器采 用了 APDS-9008,这是一款环境光感受器,感受峰值波长为 565nm,两者的峰值波长相近, 灵敏度较高。此外,由于脉搏信号的频带一般在 0.05~200Hz 之间,信号幅度均很小,一般在毫伏级水平,容易受到各种信号干扰。在感受器后面使用了低通滤波器和由运放 MCP6001 构成的放大器,将信号放大了 331 倍,同时采用分压电阻设置直流偏置电压为电 源电压的 1/2,使放大后的信号可以很好地被单片机的 AD 采集到。 整个心率传感器的结构如下图: 其原理图如下: 该传感器只能输出模拟信号,灵敏度一般。 DF 心率传感器正如之前所猜测的一样,所使用的是SON3130方案,IC是一个四通路比较器。 输出具有模拟数字可选,灵敏度较高。通用性和稳定性会更好一些,但是价格却也高了很多。 三:硬件与测心率波形测试 1、首先是pulse sensor的测试情况: 我贴了黄色高温胶纸,避免汗水影响电路。 这个体积比较小。 DF的心率传感器食物就不拍了,上次的帖子已有,感情兴趣的可以再去看看:[url=[DFRobot-9月免费试用]+<Chonly>心率传感器晒单与简测 https://mc.dfrobot.com.cn/forum. ... &fromuid=726355]点我跳转![/url] 下面使用示波器来测试下实际测心率时候的波形是什么样的: 供电电压5V的时候: (出现削顶失真是因为按压的比较用力,信号幅值已经不能再高了) 供电压3.3V的时候: 来测下频率: (重要的也就是根据这个时间间隔来计算出心率) 测量了几次,感觉误差挺大的,可能这与我手轻微移动的缘故。 2、看看DF心率传感器的测试 先是模拟信号的波形(传感器供电3.3v): 可以看到,DF传感器的模拟信号波形没pulse sensor 的波形好看,而且我抓了很多次,才抓到上图。 还有个情况就是有个同事手指比较多肉点那种,模拟波形波动非常小。。且还不怎么规律,不知道是不是他不太会按手?哈哈,我弄这个弄好久了,知道力度。 但是数字波形他的还是强免能出来。后面有软件测试可以看到。 下面测测数字信号,分别是两个人的: 数字波形是非常的好看哈 四:DF心率传感器的Arduino测试 连线图如下: 数据看起来还是挺稳定的,但是另外一个同事测试的话很难测出一个数据。。。 再来看看实际示波器测得数据和手机测得数据对比,感兴趣的可以自己计算下哈 我觉得可以以手机的数据为准。 这个传感器只有一个,还挺贵的,我就不打算拿它应用了,准备被用作对比测试。实际的DIY还是使用便宜的pulse sensor。毕竟成本还是很值得考虑的。 五:我的便携心率传感器DIY硬件: 做东西在功能要求能实现的前提下还要考虑成本。 而要做成便携的,还必须要考虑功耗问题。 本着容易制作的原理,我使用的带比较器的STC15W204S单片机。一片1.8元吧。然后数码管0.5元,PCB 0.5元,转接板0.5元,pulser sensor 16元。其他事一个移动电源功能,另计成本。 就心率测试模块来说总成本大概:20元左右。 看看丑陋的手板吧,主要是测试功能,根本没考虑外观。。所以也就这个样子了 工作时候电流大概30MA 休眠电流50ua左右。 贴上这个简单的初步电路吧 使用单片机的比较器输出口P1.2,P1.2同时点亮一个LED,全部IO驱动数码管,定时休眠,中断按键唤醒,程序采用定时器计时,软件均值滤波+中值滤波。 六:pulse sensor 的调试过程 这是正常测试时候的波形抓取。 CH0 是串口数据线 CH2是定时器开启定时(打开定时器就会1ms发生一次中断,然后对此进行计数换算成时间) CH3是比较器输出引进 (以下都是干扰比较严重未解决之前的截图) 下面是干扰严重的细节放大 由上图可以看到,干扰严重时候,定时器是跟随比较器结果中断来开启或关闭的,但是图中的定时器完全不规则。所以计算出来的数据也是没法用的。 有的想计时改更小会不会更精确?但是这点精度和保证比较器输出稳定孰更重要? 但实际数码管显示的数据根本就没变好。。 但是调整单片机的晶振频率最低感觉会好那么一点点,但是还不够。 看看串口输出结果: 1ms (22.1184M)模式: *** STC心率计测试程序 *** last BPM ^255^ BPM:114 BPM:109 BPM:100 BPM:103 BPM:103 BPM:097 BPM:108 1ms (6M)模式(开显示): *** STC心率计测试程序 *** last BPM ^255^ BPM:087 BPM:110 BPM:097 BPM:108 BPM:098 BPM:100 BPM:096 解决干扰后(解决重点方法是比较器加入负反馈,可见前面原理图): 1ms (6M)模式: *** STC心率计测试程序 *** last BPM ^255^ BPM:077 BPM:085 BPM:087 BPM:092 BPM:084 BPM:082 BPM:087 BPM:080 BPM:085 BPM:084 BPM:083 BPM:085 BPM:086 BPM:088 BPM:086 BPM:084 BPM:088 BPM:084 BPM:082 BPM:082 BPM:082 BPM:082 BPM:082 BPM:080 0.5ms (6M) 模式: *** STC心率计测试程序 *** last BPM ^255^ BPM:083 BPM:082 BPM:080 BPM:079 BPM:082 BPM:081 BPM:080 BPM:082 BPM:081 改成0.5ms的定时中断,结果也没怎么提升。 改进后测试对比时序: 这个时间间隔计算下就是心率波形的周期。 同时把DF心率传感器也接上同时测下心率输出波形(数字输出): 可以看到处理时差,但是整体延时并不会影响精度。 测量2分钟看看(中间波动是手放累了动了。。): 看起来还是基本没有什么误差的,实际数据输出结果的话上面串口数据可以看到。 七:小结 这个采用定时器来计算的方法容易受到干扰波动的影响,而且由于是采用单片机自带比较器直接来处理模拟信号,可调整参数不多,受限制较多,虽然改了硬件电路改善了干扰,但是从实际数据输出来说还没有达到我最初的设计想法要求。 如果采用DF的心率传感器,干扰问题就不那么严重了,从arduino的测试输出结果来看,也会有波动,主要是测量时候手指会动,影响输出波形。 如过采用带AD的单片机也可以直接不用比较器,但是这样程序的任务量就稍大一些了,具体情况怎么样,我还没有做实验的,不知道情况怎么样。 ~~~~~~欢迎大家跟帖交~~~~~~~ 如果有感兴趣这个的程序交流的可以跟帖回复邮箱(主要可以提高点回复量哈),其实也没啥难度。 另外的移动电源功能整合将在下一次发帖再讲,最近在玩 BGA 置锡球,用手机芯片做U盘,速度还不错: (32G的, 自己也用不完,有想了解怎么做的或者需要高速U盘的坛友可以私信哦) |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed