制作一个心率/脉搏测量硬件

前言

shineblink core 开发板(简称Core)的库函数支持AD采样功能,所以利用AD采样功能,即可实现对心率测量器件的心率采样

PS:Core 仅用五、六行代码即可实现Wifi/Ble/NB/Lora/ThreadMesh/RFID/Eth/Usb/RS485/RS232通信、以及30多种传感器/10多种硬件外设/10多种Mcu内设功能,并且这些功能最多可以 5 种随机组合同时运行。更多关于Core的内容可以在 shineblink.com 上了解。

在这里插入图片描述
在这里插入图片描述

一、传感器介绍

XD-58C PulseSensor 是一款用于脉搏心率测量的光电反射式模拟传感器。该传感器集成了集成了放大电路和噪声消除电路。可以将手指接触传感器的白色区域部分,利用人体组织在血管搏动时造成透光率不同来进行脉搏测量。传感器对光电信号进行滤波、放大,最终输出模拟电压值。利用Core的AD功能将采集到的模拟信号值转换为数字信号,再通过相应的算法就可以得到心率数值BPM和脉搏时间间隔IBI。

传感器内部原理如下图:

在这里插入图片描述

传感器输出的心率模拟信号理想形态如下图:

在这里插入图片描述

传感器外观结构如下图:

在这里插入图片描述


二、接线图

在这里插入图片描述


三、材料清单

名称推荐购买链接(或者您可以自己制作)
PulseSensor传感器模块模块购买链接

声明:这里推荐的商家和Core没有任何合作关系,您完全可以去其他商家或渠道购买,只要功能相似即可。


四、完整代码

--配置Core的USB口以虚拟串口模式工作,这样print()输出的内容就可以在电脑串口终端上显示了
LIB_UsbConfig("CDC")
--配置AD电压采集功能(最大值采样值4096对应3.6V输入电压)
--配置为当通道采集满50个点时缓存满,每个点的采集时间间隔为2000us(2ms)
--这样配置后就可以每50*2=100ms获取50个的传感器AD采集原始数据,即一秒即可采集500个原始数据
--而心率传感器算法要求喂入的数据也是500Hz的频率
LIB_ADConfig(50,2000)
--为PulseSensor心率脉搏传感器算法准备好运行环境
LIB_HrAlgorithmConfig()
--开始大循环
while(GC(1) == true)
do
	--查询A0通道是否转换完成
	--开发者也可以将传感器接至A1-A3中的任一通道,也可以多个通道接多个传感器,用法都和下面一样
	A0_full_flag, A0_buf = LIB_ADCheckBufFull("A0")
	if A0_full_flag == 1 then --已在100ms内采集满50个传感器原始数据
		--将A0_buf[]数组中的50个原始数据逐个喂入算法中,并查询算法输出结果
		for i, v in ipairs(A0_buf) do
			--给传感器喂原始数据v,并查询是否解析到有效的心率数据
			flag,BPM,IBI = LIB_HrGetBpmIbi(v)
			if flag == 1 then --算法已解析到有效心率结果
				--将解析到的BPM(每分钟心跳)、IBI(心率间隔R-R,单位:毫秒)值打印输出
				print(string.format("BPM:%d IBI:%d ", BPM, IBI))
			end
		end
	end
end

如果感兴趣,上面代码中出现的LIB开头的库函数可以在API文档中通过Ctrl+F查询。

代码中的算法函数**LIB_HrGetBpmIbi()内部的具体实现参考了Github上的知名开源项目1.5.0版本,https://github.com/WorldFamousElectronics/PulseSensor_Amped_Arduino.git,如果需要了解算法的细节可以去此处了解。当然如果您有更好的算法,完全可以用Lua代码实现后替换掉代码中的LIB_HrGetBpmIbi()**函数。


五、实验过程及结论

将手指按压在传感器的白色区域上观察传感器输出的BPM(心率)和IBI(脉搏间隔),并和Keep运动手环对比。

操作注意事项:

  1. 避免手指和传感器背面接触
  2. 按压的力度不要过大,否则阻碍血液流动会导致读不到脉搏信号,但也不要太轻。
  3. 传感器和手指之间接触需保持稳定,按压力度的轻微变化都对测量结果有影响。

在这里插入图片描述

在这里插入图片描述

结论:

通过上面实验可以看出,当传感器测量稳定下来时,测量结果还是相对准确的。但是传感器对于手指的轻微变化也会导致测量结果的扰动。

下面是对测量中出现的异常情况时的推荐对策:

  1. 从手指第一次稳定接触传感器到输出稳定可靠的心率值,传感器算法需要大概8-20秒时间来稳定,请耐心等待。
  2. 测量过程中如果由于手指接触的不稳定导致数据出现波动,这时可以耐心等待几秒直至数据稳定下来,如果一直不能稳定下来,请将手指移开小片刻再放回传感器,让算法重新开始捕捉心率信号。
  3. 测量过程中如果算法一直不更新输出心率结果,这时可以将手指移开小片刻再放回传感器,让算法重新开始捕捉心率信号。

六、推荐的测量方法

通过手指按压的测量方法,需要测量者保持高度的静态下才能测出稳定的值,但借助胶带或其他固定装置将传感器固定手指指腹上可以让测量结果更稳定,数据更准确。

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值