Microduino心跳模块中断法测量两则简介
本帖最后由 topdog 于 2016-8-28 23:43 编辑Microduino心跳模块使用低功耗心率传感器SON7015,采用光电式容积描记(photoplethysmograph)的方式感应人体的心跳信息并加以提取,最后输出心率波形。由松恩电子最新开发的心率传感器,其工作电流只有0.2毫安,比同类传感器功耗节省10倍到50倍,高灵敏度可实现人体任意部位检测心率信号,帮助客户实现心率实时监控功能。同时,松恩电子可提供专业的运动心率算法IC,帮助客户监测用户运动时的心率变化,达到真正的运动心率监测功能。
左面双绿光LED:波长=550nm,右面是光电式容积描记感应器。使用时需要把手指搭在左面两个绿光LED,同时也要接触到右面的传感器。
SON7015的工作原理是借光电手段在活体组织中检测血液容积变化的一种无创检测方法。当一定波长的光束照射到指端皮肤表面时,光束将通过透射或反射方式传送到光电接收器。在此过程中,由于受到指端皮肤肌肉和血液的吸收衰减作用,检测器检测到的光强度将减弱。其中,皮肤肌肉组织等对光的吸收在整个血液循环中是保持恒定不变的,而皮肤内的血液容积在心脏作用下呈搏动性变化。当心脏收缩时,外周血容量最多光吸收量也最大检测到的光强度最小。而在心脏舒张时,正好相反检测到的光强度最大,使光接收器接收到的光强度随之呈脉动性变化,将此光强度变化信号转换成电信号,便可获得容积脉搏血流的变化。
通用的方法一是模拟输入的analogRead()函数和内部定时器Time2结合测量,第二种方法使用digitalRead()函数和滤波算法结合测量,来判断心跳的一个波长的时间。
我使用外部中断写了两个程序。一个模仿老中医诊脉法,程序分享github地址:看着秒表,心理计数15秒里面心跳的数量乘以4倍,就是每分钟心跳率了。测到心跳屏幕上的心脏会跳动,下面是15秒显示,一个心跳一个心跳的累计,最后跳出英文显示的心跳率。
另一个连续测量法,程序分享github地址:手指按住传感器,随着心跳的搏动,led会闪烁。oled就会显示出心跳率。用数组把10个心跳波长相邻对减,得出平均值。
现在介绍一下主要的几个步骤,准备的器材:core+,usb-ttl,hub,oled,led,bm电池组。
看看下面的调试程序,调用time = millis();来测量每次的时间,正常的心跳一般是60-150次,不在这个范围里面的,不计数或心跳率不显示。
unsigned long time,heart_time;
int heartbeat = 0;
boolean condition = false;
void isr(){
heart_time = time;
heartbeat = heartbeat+1;
condition = true;
}
void setup(){
Serial.begin(115200);
attachInterrupt(0,isr,RISING);
}
void loop(){
time = millis();
Serial.print( heartbeat );
Serial.print(" ");
Serial.println(heart_time);
if(heart_time>15000){
detachInterrupt(0);
Serial.println( heartbeat );
delay(1000);
}
}
oled1306显示用了u8glib库,用PCtoLCD2002做的bmp位图,还是简洁方便的。
在实际程序中,两个程序都没有使用延时程序,串口输出全部关闭,感应心跳后,或是在oled上闪烁,或是led波动。其检测结果还是较好的。
本人水平有限,欢迎大家指正。
页:
[1]