极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 31526|回复: 13

使用 Arduino DIY 心率计

[复制链接]
发表于 2013-12-17 14:01:25 | 显示全部楼层 |阅读模式
前几天完成的,用的是跑步机的心跳模块



具体介绍在:
http://www.lab-z.com/%E4%BD%BF%E7%94%A8-arduino-diy-%E5%BF%83%E7%8E%87%E8%AE%A1/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-12-17 19:44:46 | 显示全部楼层
2楼 顶楼主
回复 支持 反对

使用道具 举报

发表于 2013-12-18 11:27:11 | 显示全部楼层
很好的想法,不过你似乎关键的pulseIn没提供代码啊,我很想知道你是怎么读取信号并计算出心率的,有没有加什么滤波算法,测量的时侯是保持静止还是运动。

我前阵子因为父母心脏不好,为了敬点孝心,也搞过一个显示脉搏波形的东东,当时想的是很好,让他们一直戴着传感器,传感器把信息持续传给手机,然后手机来判断心脏状况,如果有问题就自动给我打电话。考虑到是自己父母,下了血本,用的比被你老婆大人嘲笑的pulsesensor还贵的传感器,具体是什么型号就不说了。试验下来,还真的显示出了脉搏,上升沿下降沿很清晰,和心电图差不多(看附件),看着手机里不断跳动的波形简直太兴奋了,一兴奋就不自觉的握紧拳头大叫一声“耶”,这一叫不要紧,再一看,完了,波形全变样了,这叫我怎么判断啊,这一个问题就直接把我打入冰窟,理想很美好,现实很残酷。最后结果是万分愧疚的对父母承认自己的无能,同时希望有能人能帮助我解决这个干扰问题。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-18 13:32:53 | 显示全部楼层
pulseIn 不是我写的代码,是arduino库里面带的,我也是从论坛上才知道有这个函数可以直接用的。

可以参考
http://wiki.geek-workshop.com/doku.php?id=arduino:arduino_language_reference:pulsein


我用的是带有超时的那个函数。因为我实验中断感觉很不可靠,所以修改了算法(也没有用滤波算法)

算法使用的不是“测试在单位时间内跳动多少次”的常规算法,用的是“跳动了单位次数经过的时间”。

最主要原因是:接触可能会出现问题,前面的算法没有办法知道接触是否有问题,后面的算法发现

没有接触好(就是超时,3秒没有收到信号程序就算做超时)就会不断重新开始,一直到成功读取了

10次心跳然后再进行折算的。

用画笔简单画了一下,希望有助于你的理解。



另外,你可以在程序中直接使用 pulseIn ,但是如果他仍然满足不了你的要求建议你考虑一下胸带式

这种应该更适合专业运动,价格更高。你遇到的问题应该是传感器没有正确输出(原理决定松紧,

或者触摸与否都会导致错误)。为了验证这一点,建议你用示波器看一下,当出现问题的时候是出现

了波形的异常还是根本就是没有输出信号。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-12-18 16:36:05 | 显示全部楼层
zoologist 发表于 2013-12-18 13:32
pulseIn 不是我写的代码,是arduino库里面带的,我也是从论坛上才知道有这个函数可以直接用的。

可以参考 ...

感谢你的耐心解答!你一说我才想起来,pulseIn我之前看到过也用过的,但是因为我买的那个传感器是模拟信号输入,我使用digitalRead读到的全是LOW,没法用pulseIn,本来那家店还可以选择数字信号输入的模拟器,但是那样就只有高低电平,看不出波形,而我去图书馆查了几本资料后发现脉搏波形可以用来诊断疾病(比如动脉硬化程度),一开始野心太大,不满足于只测量心率,而希望判断健康状况,因此想着输入的信号越完整越好,想当然的以为通过analogRead拿到原始信号进行转换就很容易计算出心跳以及对信号建模并判断出心脏状况。但结果在静止测量的情况下就象我上面那个图显示的那样,确实不难计算出心率(只要超过上个高点的3/5就开始结合前值判断如趋势反转就得到本次高点以及高点发生时间,连续比较几个高点就得到频率),关键是没法处理突发偶然情况,因为我买的是基于压力检测的传感器,太灵敏了,抬抬手指头造成的压力变化都可能让波形完全失真,这个传感器也有问题,一旦失真需要好一会才能恢复,这个就会严重影响系统对健康状况的判断,真的是绞尽脑汁也想不出来怎么解决了。那些市场上卖的电子血压计也不知道是怎么处理这种偶然事件的影响的,曾经想再买一个血压计成品进行改造,考虑到从小拆装手表闹钟的结果总是会多出零件,这次不敢轻举妄动浪费钱了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-18 16:57:30 | 显示全部楼层
jeffliu 发表于 2013-12-18 16:36
感谢你的耐心解答!你一说我才想起来,pulseIn我之前看到过也用过的,但是因为我买的那个传感器是模拟信 ...

不建议你买一个商用的拆开,因为他很有可能是用 firmware 在处理数据的,你拆开没有用唉~

听你的描述,你的设备太灵敏了,直接用来计算心率有些大材小用。不妨更换一下用途:直接

采集信号进入电脑,在电脑上绘制波形。积累一段时间数据再看看能否创建处理模型。
回复 支持 反对

使用道具 举报

发表于 2013-12-18 17:20:11 | 显示全部楼层
zoologist 发表于 2013-12-18 16:57
不建议你买一个商用的拆开,因为他很有可能是用 firmware 在处理数据的,你拆开没有用唉~

听你的描述, ...

好险,幸亏没买电子血压计,我这人买什么东西太冲动,老婆也不喜欢管钱,工资卡不上交的后果就是家里老是多一些没用的东西,呵呵。
你提醒得对,确实我应该先用这个做数据搜集工作,然后手动确定一段正常波形保存,分析则基于保存下来的波形数据。就这么做了,晚上继续捣腾。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-18 17:27:17 | 显示全部楼层
jeffliu 发表于 2013-12-18 17:20
好险,幸亏没买电子血压计,我这人买什么东西太冲动,老婆也不喜欢管钱,工资卡不上交的后果就是家里老是 ...

存储下来,贴上我们也看看
回复 支持 反对

使用道具 举报

发表于 2013-12-18 18:24:53 | 显示全部楼层
pulsesensor.com 有Arduino源码,不过能不能配合你的传感器就不清楚了。
回复 支持 反对

使用道具 举报

发表于 2016-3-29 16:51:06 | 显示全部楼层
扫描速度:100 ms/     上升沿触发,触发电平61 mv(示波器最大)
供电3.3v
幅值大的波形是手未接触金属片,幅值小的波形是手接触金属片。
示波器显示结果和楼主的比起来差别挺大的,想问问楼主这正常吗?有没有什么建议?下一步该怎么进行?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-29 17:58:58 | 显示全部楼层
美好时光里 发表于 2016-3-29 16:51
扫描速度:100 ms/     上升沿触发,触发电平61 mv(示波器最大)
供电3.3v
幅值大的波形是手未接触金属 ...

有点奇怪啊,看起来信号很差,你可以看一下我那个文档中的波形

检查是否共地(包括示波器)

然后注意需要双手握住
回复 支持 反对

使用道具 举报

发表于 2016-3-29 18:13:56 | 显示全部楼层
实验时是双手握住一段时间

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-29 20:33:40 | 显示全部楼层
美好时光里 发表于 2016-3-29 18:13
实验时是双手握住一段时间

你的采样率是多少,信号幅度是多大?
回复 支持 反对

使用道具 举报

发表于 2016-3-29 21:06:02 | 显示全部楼层
可能原因:1.手柄处接线不良;2.测试时用手掌贴住金属贴片,多个手指头同时接触可能出现问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-18 13:14 , Processed in 0.065784 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表