OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
楼主: 空心杯

移植Arduino的max30100心率传感器模块函数

[复制链接]

12

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2016-7-20
在线时间
33 小时
 楼主| 发表于 2017-3-30 11:37:36 | 显示全部楼层
ygxdh 发表于 2017-3-30 11:30
请问楼主大人,你分享的程序里面这3个数字2.43,55,20.576是怎么出来的呢?求解释,谢谢啦@空心杯

嗯,,,怎么说,这是我之前用这个芯片一个错误的地方,我以为出来的波形是噪声,所以想让波形平稳一些,后来才知道波形本来就是那样不用人为修改的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-11
在线时间
28 小时
发表于 2017-3-30 19:12:44 | 显示全部楼层
空心杯 发表于 2017-3-30 11:37
嗯,,,怎么说,这是我之前用这个芯片一个错误的地方,我以为出来的波形是噪声,所以想让波形平稳一些,后来才 ...

哦哦,谢谢楼主大人。那我是不是可以直接HR=getHeartRate();然后用printf输出值就可以了,不用除以2.43和分情况考虑了?
然后如果我想输出SPO2的值的话,是不是也和心率一样,直接定义一个SPO2,然后SPO2=getSpO2(),最后用串口输出?
因为最近在做毕设,要涉及到这个心率模块,所以想请教楼主一下。
回复

使用道具 举报

12

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2016-7-20
在线时间
33 小时
 楼主| 发表于 2017-3-31 21:25:51 | 显示全部楼层
对的对的
回复

使用道具 举报

12

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2016-7-20
在线时间
33 小时
 楼主| 发表于 2017-3-31 21:26:06 | 显示全部楼层
ygxdh 发表于 2017-3-30 19:12
哦哦,谢谢楼主大人。那我是不是可以直接HR=getHeartRate();然后用printf输出值就可以了,不用除以2.43和 ...

对的对的
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-11
在线时间
28 小时
发表于 2017-4-6 20:31:20 | 显示全部楼层

谢谢啦
回复

使用道具 举报

2

主题

21

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2016-6-11
在线时间
42 小时
发表于 2017-4-7 21:43:58 | 显示全部楼层
ygxdh 发表于 2017-3-30 19:12
哦哦,谢谢楼主大人。那我是不是可以直接HR=getHeartRate();然后用printf输出值就可以了,不用除以2.43和 ...

你好,我想请问下你们都出来的数据都是固定的几个值吗?  我的读出来的都是相同的几个值一直在多次循环  得到的波形也是一段段横线  谢谢了
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-11
在线时间
28 小时
发表于 2017-4-8 10:23:29 | 显示全部楼层
zach_iot 发表于 2017-4-7 21:43
你好,我想请问下你们都出来的数据都是固定的几个值吗?  我的读出来的都是相同的几个值一直在多次循环   ...

不是的,输出结果应该没问题,我之前也遇到过这样的问题,最后发现是自己初始化GPIO出错了,导致心率模块的芯片没有工作。
回复

使用道具 举报

2

主题

21

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2016-6-11
在线时间
42 小时
发表于 2017-4-8 13:13:44 | 显示全部楼层
ygxdh 发表于 2017-4-8 10:23
不是的,输出结果应该没问题,我之前也遇到过这样的问题,最后发现是自己初始化GPIO出错了,导致心率模块 ...

我用的是上面发的那个心率的压缩包,发现出来的数据就是几个相同的数字组成的线段。。。一直找不到原因
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-4-8
在线时间
3 小时
发表于 2017-4-8 16:31:43 | 显示全部楼层
请问大家有没有同通过控制R_DRV和IR_DRV引脚来降低功耗呢,请问该怎么控制它们?
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-4-8
在线时间
3 小时
发表于 2017-4-8 16:33:34 | 显示全部楼层
@zach_iot   是不是SDA和SCL的上拉电压没有改到3.3V.
回复

使用道具 举报

2

主题

21

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
212
金钱
212
注册时间
2016-6-11
在线时间
42 小时
发表于 2017-4-8 16:37:27 | 显示全部楼层
tanghaideng10 发表于 2017-4-8 16:33
@zach_iot   是不是SDA和SCL的上拉电压没有改到3.3V.

我用的是自带4.7K上拉电阻的模块,读出来的数据都是的图形都是线段   找不到是啥问题
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-4-8
在线时间
3 小时
发表于 2017-4-8 17:14:41 | 显示全部楼层
你是淘宝上买的那种30块左右的吗?那个上拉电阻接的电压是1.8V,要把线割掉接到3.3V上
回复

使用道具 举报

6

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2016-4-12
在线时间
97 小时
发表于 2017-4-11 22:04:54 | 显示全部楼层
我用楼主的程序  IIC通讯不成功啊  上拉电阻我也改成外接3.3V的了
回复

使用道具 举报

6

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
354
金钱
354
注册时间
2016-4-12
在线时间
97 小时
发表于 2017-4-11 23:10:31 | 显示全部楼层
MAX30102读取心率和血氧的算法和MAX30100一样么
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-4-8
在线时间
3 小时
发表于 2017-4-12 15:34:53 | 显示全部楼层
算法是一样的,但相关寄存器的配置不一样,要改下。
回复

使用道具 举报

路上的人 该用户已被删除
发表于 2017-4-12 21:07:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2016-10-25
在线时间
4 小时
发表于 2017-4-19 11:35:24 | 显示全部楼层
匿名飞控怎么看输出的结果呢
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-5-6
在线时间
1 小时
发表于 2017-5-6 18:22:54 | 显示全部楼层
ygxdh 发表于 2017-3-30 19:12
哦哦,谢谢楼主大人。那我是不是可以直接HR=getHeartRate();然后用printf输出值就可以了,不用除以2.43和 ...

你的测试结果出来了吗,可以分享一下程序吗
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-11
在线时间
28 小时
发表于 2017-5-7 16:42:17 | 显示全部楼层
本帖最后由 ygxdh 于 2017-5-7 16:44 编辑
sunnan 发表于 2017-5-6 18:22
你的测试结果出来了吗,可以分享一下程序吗

其实楼主大部分都移植好了,我只是在loop()里面这样写的。或者你可以参考一下github上面大神分享的Arduino源码 https://github.com/oxullo/Arduino-MAX30100

测试程序

测试程序
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-4-26
在线时间
6 小时
发表于 2017-5-8 22:53:04 | 显示全部楼层
过眼烟云 发表于 2017-4-11 23:10
MAX30102读取心率和血氧的算法和MAX30100一样么

你好,你的30102数据读出来了吗?
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-4-26
在线时间
6 小时
发表于 2017-5-8 22:55:27 | 显示全部楼层
tanghaideng10 发表于 2017-4-12 15:34
算法是一样的,但相关寄存器的配置不一样,要改下。

我看寄存器差距不小啊,始终没读出来0x04和0x06,0x07的数据,有什么方法吗
回复

使用道具 举报

24

主题

130

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2016-7-20
在线时间
137 小时
发表于 2017-5-13 17:48:52 | 显示全部楼层
我现在遇到个问题。这两个LED需要驱动电路吗,还是传感器内部就有驱动电路。
回复

使用道具 举报

39

主题

234

帖子

0

精华

高级会员

Rank: 4

积分
630
金钱
630
注册时间
2016-8-25
在线时间
57 小时
发表于 2017-5-18 20:05:50 | 显示全部楼层
小小怪 发表于 2016-11-11 13:41
测脉搏3跳、5跳.....越大  测出的脉搏数/分钟  越准,3跳误差±3内;
血氧只是理 论 的 公式上得出了, ...

为什么他的峰值检测,怎么感觉看不懂,怎么感觉他的程序是提取的最低点
回复

使用道具 举报

39

主题

234

帖子

0

精华

高级会员

Rank: 4

积分
630
金钱
630
注册时间
2016-8-25
在线时间
57 小时
发表于 2017-5-18 20:27:16 | 显示全部楼层
小小怪 发表于 2016-11-11 13:41
测脉搏3跳、5跳.....越大  测出的脉搏数/分钟  越准,3跳误差±3内;
血氧只是理 论 的 公式上得出了, ...

可以说一下,你理解的峰值检测程序吗
回复

使用道具 举报

3

主题

108

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2014-2-24
在线时间
257 小时
发表于 2017-5-19 10:26:43 | 显示全部楼层
本帖最后由 小小怪 于 2017-5-19 10:31 编辑
mxiaotao 发表于 2017-5-18 20:27
可以说一下,你理解的峰值检测程序吗

简单点的话看两个值,oldValue和newValue。
newValue一直大于oldValue,说明数值在增长趋势,直到测出newValue小于oldValue,就出现一个波峰;
同理,newValue一直小于oldValue,说明数值在下降趋势,直到测出newValue大于oldValue,就出现一个波谷;
再设定个阈值和时间门限滤除干扰。
思路就这样,所以芯片的采样速率和你读取芯片采回来的值的时间要规划好
如果可以时间门限加FIFO做滤除错误的波峰更好
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2017-5-19
在线时间
1 小时
发表于 2017-5-19 22:02:26 | 显示全部楼层
小小怪 发表于 2017-5-19 10:26
简单点的话看两个值,oldValue和newValue。
newValue一直大于oldValue,说明数值在增长趋势,直到测出ne ...

大佬你好,请问用如CC2541单片机上硬件IIC驱动这个MAX30102或者30100为什么连初始化配置都毫无反应。。。。。。我之前在其他单片机上试过,可以用I\O口模拟驱动和读数据,而且2541单片机本身的IIC也能够驱动其他的IIC设备(比如温湿度传感器),不了解是什么方向的原因。。?另外,可以参考一下血氧模式下该配置那几个寄存器吗?之前虽然能亮LED,但是感觉数据有些不对
回复

使用道具 举报

3

主题

108

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2014-2-24
在线时间
257 小时
发表于 2017-5-20 12:23:19 | 显示全部楼层
邹柯 发表于 2017-5-19 22:02
大佬你好,请问用如CC2541单片机上硬件IIC驱动这个MAX30102或者30100为什么连初始化配置都毫无反应。。。 ...

如果IIC协议没有错,地址没错,但读设备号没有,可以把传感器的IIC接口改用3.3V上拉
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2017-5-19
在线时间
1 小时
发表于 2017-5-20 16:11:17 | 显示全部楼层
小小怪 发表于 2017-5-20 12:23
如果IIC协议没有错,地址没错,但读设备号没有,可以把传感器的IIC接口改用3.3V上拉

1.我对两个相同的30102做了对比试验,把其中一个模块的上拉电阻线割断,自己外接上拉电阻到3.3V,结果仍然没有亮灯(无论拉不拉电阻都没亮,不同之处在于没拉电阻之前IIC启动时会一直停在等待IIC响应区域,拉电阻后会就是正常运行态,但是模块并没有工作),同样,在其他单片机如430的模拟I\O驱动可以亮灯(),
2.但是同时读采集数据时就是不对,同时想问一下配置血氧工作模式的LED寄存器怎么配置?感觉数据和驱动方式和我想象中的情况不同(我已经看了好几遍英文手册了)。。。可以借鉴下你的模块驱动和数据读取代码么,非常急orz......拯救我= =
回复

使用道具 举报

3

主题

108

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2014-2-24
在线时间
257 小时
发表于 2017-5-20 17:12:08 | 显示全部楼层
邹柯 发表于 2017-5-20 16:11
1.我对两个相同的30102做了对比试验,把其中一个模块的上拉电阻线割断,自己外接上拉电阻到3.3V,结果仍 ...

我放在这帖子里面了,自己找
回复

使用道具 举报

6

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2016-7-19
在线时间
13 小时
发表于 2017-5-22 09:12:29 | 显示全部楼层
这个芯片放在手腕上能用吗,急求,谢谢!
回复

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2017-4-22
在线时间
10 小时
发表于 2017-5-23 23:41:36 来自手机 | 显示全部楼层
小小怪 发表于 2016-10-21 18:05
我也正在弄这个,SpO2出不来....

同学你的做出来了吗
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-5-6
在线时间
1 小时
发表于 2017-5-24 11:38:34 | 显示全部楼层
ygxdh 发表于 2017-5-7 16:42
其实楼主大部分都移植好了,我只是在loop()里面这样写的。或者你可以参考一下github上面大神分享的Ardu ...

你使用的是max30100还是max30102,我用的max30102寄存器地址好像没写明白,,没测试出
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-5-6
在线时间
1 小时
发表于 2017-5-24 11:40:51 | 显示全部楼层
匆匆的蚂蚁 发表于 2017-5-8 22:55
我看寄存器差距不小啊,始终没读出来0x04和0x06,0x07的数据,有什么方法吗

问一下,,你的max30102寄存器部分写明白了吗
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-4-26
在线时间
6 小时
发表于 2017-5-24 16:40:46 | 显示全部楼层
sunnan 发表于 2017-5-24 11:40
问一下,,你的max30102寄存器部分写明白了吗

没有啊,网上的程序调不通
回复

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2017-4-22
在线时间
10 小时
发表于 2017-5-25 09:27:09 | 显示全部楼层
小小怪 发表于 2017-5-20 17:12
我放在这帖子里面了,自己找

同学 你可以发一下你那个心率还有初始化的程序吗 ,你的算法我不要,我读出来的两个数都在5万多,觉得不对,我的邮箱是1218085811@qq.com
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-5-6
在线时间
1 小时
发表于 2017-5-25 15:49:28 | 显示全部楼层
匆匆的蚂蚁 发表于 2017-5-24 16:40
没有啊,网上的程序调不通

我也用的MAX30102,和MAX30100寄存器配置有区别,,自己没写明白,测试的值总是有问题。
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-5-6
在线时间
1 小时
发表于 2017-5-25 15:58:11 | 显示全部楼层
tanghaideng10 发表于 2017-4-12 15:34
算法是一样的,但相关寄存器的配置不一样,要改下。

MAX30102的寄存器配置可以分享一下吗,,自己没改明白,,非常感谢哦,,
回复

使用道具 举报

39

主题

234

帖子

0

精华

高级会员

Rank: 4

积分
630
金钱
630
注册时间
2016-8-25
在线时间
57 小时
发表于 2017-5-25 19:30:25 | 显示全部楼层
小小怪 发表于 2017-5-19 10:26
简单点的话看两个值,oldValue和newValue。
newValue一直大于oldValue,说明数值在增长趋势,直到测出ne ...

谢谢您能耐心的回答我的问题,峰值检测的程序理解了;请问时间门限加FIFO做滤除错误的波峰,应该如何实现?
回复

使用道具 举报

3

主题

108

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2014-2-24
在线时间
257 小时
发表于 2017-5-26 09:37:54 | 显示全部楼层
mxiaotao 发表于 2017-5-25 19:30
谢谢您能耐心的回答我的问题,峰值检测的程序理解了;请问时间门限加FIFO做滤除错误的波峰,应该如何实现 ...

开个定时器和RAM空间,滤除干扰
首先要知道脉搏曲线长什么样,脉搏大概是这样子的:
QQ截图20170526092148.png
不同的个人情况会不一样,而实际中你采集的数据可能是这样子的:
QQ截图20170526092846.png
这样在一个脉搏期间可能会有很多个波峰波谷。此时你要滤波,找到一个比较真实的脉搏,开定时器,看下一个脉搏到来时是不是在合理的时间范围内。
这只是我的一个思路,可能有更快捷的方法得自己去了解了。
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
85
金钱
85
注册时间
2017-3-11
在线时间
28 小时
发表于 2017-5-26 14:10:01 | 显示全部楼层
sunnan 发表于 2017-5-24 11:38
你使用的是max30100还是max30102,我用的max30102寄存器地址好像没写明白,,没测试出

我用的是max30100 。
回复

使用道具 举报

39

主题

234

帖子

0

精华

高级会员

Rank: 4

积分
630
金钱
630
注册时间
2016-8-25
在线时间
57 小时
发表于 2017-5-26 15:28:09 | 显示全部楼层
小小怪 发表于 2017-5-26 09:37
开个定时器和RAM空间,滤除干扰
首先要知道脉搏曲线长什么样,脉搏大概是这样子的:

非常感谢您的指导
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2017-5-26
在线时间
0 小时
发表于 2017-5-26 19:55:01 | 显示全部楼层
小小怪 发表于 2017-5-26 09:37
开个定时器和RAM空间,滤除干扰
首先要知道脉搏曲线长什么样,脉搏大概是这样子的:

是否有在Android上调通MAX30102
回复

使用道具 举报

3

主题

108

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2014-2-24
在线时间
257 小时
发表于 2017-5-27 09:10:46 | 显示全部楼层
嵇骏 发表于 2017-5-26 19:55
是否有在Android上调通MAX30102

没用过,只是个IIC外设的使用。原理都一样,只是环境和语言描述有些不同
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-5-27
在线时间
3 小时
发表于 2017-5-27 17:16:43 | 显示全部楼层
max30102貌似也可以用这个算法
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2017-5-27
在线时间
3 小时
发表于 2017-5-27 17:19:45 | 显示全部楼层
楼主的算法还是蛮精妙的,要是IR电流也可以调整,就更加灵活了!!1
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2015-2-8
在线时间
5 小时
发表于 2017-5-30 19:31:15 | 显示全部楼层
ygxdh 发表于 2017-4-8 10:23
不是的,输出结果应该没问题,我之前也遇到过这样的问题,最后发现是自己初始化GPIO出错了,导致心率模块 ...

您好,能把您的工程发出来,让大家参考参考吗?
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2017-5-30
在线时间
13 小时
发表于 2017-5-30 21:55:36 | 显示全部楼层
小小怪 发表于 2016-11-6 20:21
我的平台不是在STM32上的,工程附上太繁琐。把IIC和MAX30100的驱动加载到你的工程里就行了。
while(MAX3 ...

你好!!!
你这是51单片机???
回复

使用道具 举报

3

主题

108

帖子

0

精华

高级会员

Rank: 4

积分
717
金钱
717
注册时间
2014-2-24
在线时间
257 小时
发表于 2017-5-31 09:01:26 | 显示全部楼层
JuneQ1n 发表于 2017-5-30 21:55
你好!!!
你这是51单片机???

      不是
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2017-4-26
在线时间
6 小时
发表于 2017-5-31 09:06:44 | 显示全部楼层
sunnan 发表于 2017-5-25 15:49
我也用的MAX30102,和MAX30100寄存器配置有区别,,自己没写明白,测试的值总是有问题。

不明白配置过程,只读出来温度,寄存器的值全是0
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2017-5-30
在线时间
13 小时
发表于 2017-5-31 18:34:28 | 显示全部楼层

那我直接加89c52的头文件驱动,直接就可以用了吗,没有看懂数据传输那块
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 10:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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