Arduino使用手指测心跳模块

下图展示的模块就是我买的37款传感器中的手指测心跳模块,通过查阅资料和目测,上面应该是一个红外线发射器,商家给的资料中说下面的是一个红外光敏三极管。
Arduino使用手指测心跳模块 - gc_2299 - gc_2299的博客 Arduino使用手指测心跳模块 - gc_2299 - gc_2299的博客
原理大概是手指放在红外线发射器和红外光敏三极管之间后,随着心脏跳动,红外光敏三极管的输出也在不断变化,通过这种变化来检测心跳。 为防止外界红外线对数据造成影响,最好将手指测心跳模块放在一个封闭的盒子里面,然后进行心跳检测。
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里面画了一个图,可以看到数据还是有一定的规律,只是最大值和最小值之间相差的不是很大。
Arduino使用手指测心跳模块 - gc_2299 - gc_2299的博客
最后是实际的接线图。
Arduino使用手指测心跳模块 - gc_2299 - gc_2299的博客

然后是手指放在上面测数据,最后一个图中的是我找了一个纸盒子,把测心跳模块放在里面,然后手指伸进去进行测量,matlab图形中使用的数据就是最后这幅图中的方式获得的。
Arduino使用手指测心跳模块 - gc_2299 - gc_2299的博客   Arduino使用手指测心跳模块 - gc_2299 - gc_2299的博客
 
最后是一个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)http://www.makezine.com.tw/make2599131456/arduino16    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值