大家好,我是兔子。是嵌入式工程师。
现在各种智能手环卖的很火,我自己同事都有好几个带着手环。智能手环有个很重要的功能,就是可以检测心率。
正好我以前就是在公司里做过智能手环,有一天我灵机一动,为什么不让Arduino也检测心率呢。
那就动手吧。
![86702815429b639084e1d07103edbb06.png](https://i-blog.csdnimg.cn/blog_migrate/c00189c2dfc8b8247a31a2565a02521c.jpeg)
1.检测心率,肯定就需要心率传感器了
采用是PAH8002心率传感器,并将心率传感器做成了模块。
正面:PAH8002心率传感器
![993c32664022e1cf0700099b5d74b57a.png](https://i-blog.csdnimg.cn/blog_migrate/198de91a403efc7ab7be76a22e8fe522.jpeg)
背面:心率算法芯片及陀螺仪芯片。(陀螺仪芯片没用到,主要是提供给心率算法去除振动造成的检测误差,不用也可以)
![d77b899121db9638e082631cdb7181ed.png](https://i-blog.csdnimg.cn/blog_migrate/4114e48f79b629963880edab0d0273a9.jpeg)
2.接线
心率传感器模块支持I2C和串口。我们就用I2C接口吧。
模块 SCL --> Arduino A5
模块SDA --> Arduino A4
模块VCC --> Arduino 3.3v
模块GND --> Arduino GND
3.写程序
/*
程序 心率检测
作者:兔子
效果:心率传感器模块PAH8002 输出实时心率值
时间:19.04.08
CONNECTIONS:
PAH8002 module SCL --> A5
PAH8002 module SDA --> A4
PAH8002 module VCC --> 3.3v
PAH8002 module GND --> GND
*/
#include <Wire.h> // I2C 协议必不可少的库
#define HeartRate 0x50 // 心率传感器模块的地址(模块特定定义的地址,必须填对,无任何意义)
unsigned char buffer;//设置的字节变量
void setup() {
Serial.begin(115200);
Wire.begin();//I2C 要开始了
Serial.println("开始运行程序");
}
void loop() {
// put your main code here, to run repeatedly:
Wire.requestFrom(HeartRate,1);
buffer = Wire.read();
if(buffer == 0 || buffer == 0xFF)
{
Serial.print("请将手指轻贴至传感器上,并等待");
Serial.println(" ");
}
else
{
Serial.print("当前心率值:");
Serial.print(buffer);
Serial.println(" ");
}
delay(1000);
}
心率传感器模块读取的数据如果为0或0xff,则表明手指未轻触传感器,需要将手指轻触传感器来让传感器采集心率数据。
传感器读取心率数据并计算出心率值需要一点时间,稍事等待一会就能显示当前心率值啦。
![8965c97c7ac398964bec916db051225d.png](https://i-blog.csdnimg.cn/blog_migrate/c6a01cd9798f55618e5822ce4682adff.jpeg)