失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Arduino使用手指测心跳模块

Arduino使用手指测心跳模块

时间:2021-03-14 18:04:00

相关推荐

Arduino使用手指测心跳模块

下图展示的模块就是我买的37款传感器中的手指测心跳模块,通过查阅资料和目测,上面应该是一个红外线发射器,商家给的资料中说下面的是一个红外光敏三极管。 原理大概是手指放在红外线发射器和红外光敏三极管之间后,随着心脏跳动,红外光敏三极管的输出也在不断变化,通过这种变化来检测心跳。为防止外界红外线对数据造成影响,最好将手指测心跳模块放在一个封闭的盒子里面,然后进行心跳检测。 Arduino的代码是采用的商家给的示例代码代码如下:

int ledPin = 13;

int sensorPin = 0;

double alpha = 0.75;

int period = 20;

double change = 0.0;

void setup()

{

pinMode(ledPin, OUTPUT);

Serial.begin(115200);

}

void loop()

{

static double oldValue = 0;

static double oldChange = 0;

int rawValue = analogRead(sensorPin);

double value = alpha * oldValue + (1 - alpha) * rawValue;//这个平滑就是取本次和上一次测量数据的加权平均值

Serial.println(value);

oldValue = value;

delay(period);

}

我把实际检测到的数据导入到matlab里面画了一个图,可以看到数据还是有一定的规律,只是最大值和最小值之间相差的不是很大。 最后是实际的接线图。

然后是手指放在上面测数据,最后一个图中的是我找了一个纸盒子,把测心跳模块放在里面,然后手指伸进去进行测量,matlab图形中使用的数据就是最后这幅图中的方式获得的。 最后是一个Processing程序,这个程序从串口中读取数据,然后实时显示曲线,但是由于心跳数据幅度不大,看着很像水平线,没有matlab图形看着那么直观,还需要进一步处理才行。

import processing.serial.*;

Serial port;

float val;

float[] receiveDatas=new float[440];

int arrayLength=440;

int startIndex=0;

int dataLength=0;

void setup()

{

size(440,440);

frameRate(30);

strokeWeight(2);

smooth();

port=new Serial(this,"COM3",115200);

background(0);

}

void draw()

{

background(0);

if(port.available()>0)

{

String inString = port.readStringUntil('\n');

val=int(trim(inString));

receiveDatas[startIndex]=map(val,0,1023,0,height);

startIndex=(startIndex+1)%arrayLength;

dataLength=min(dataLength+1,arrayLength);

}

stroke(0,255,0);

//beginShape();

for(int i=0;i<dataLength-1;i++)

{

line(i,receiveDatas[(startIndex+i)%arrayLength],i+1,receiveDatas[(startIndex+i+1)%arrayLength]);

//vertex(i,receiveDatas[(startIndex+i)%arrayLength]);

println(receiveDatas[(startIndex+i)%arrayLength]);

}

//endShape();

}

最后还有一个疑问,把心跳检测模块放在盒子里是为了防止外部红外线对检测造成影响,但是人体本身也有红外线,这个难道不影响检测数据?

参考文献:1).tw/make2599131456/arduino16

如果觉得《Arduino使用手指测心跳模块》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。