pulse sensor心率传感器

pulse sensor心率传感器

脉搏传感器本质上是一个光电容积描记器,用于无创心率监测的医疗设备。有时,光电容积描记器可以测量血氧水平,有时却不能。来自光电容积描记器的心脏脉搏信号是电压的模拟波动,它具有可预测的波形,如图所示。脉搏波的描绘被称为光电容积描记图,或PPG。我们最新的硬件版本,脉冲传感器安培,放大了以前的脉冲传感器的原始信号,并规范了在V/2(电压中点)左右的脉搏波。脉冲传感器安培响应光强度的相对变化。如果入射到传感器上的光量保持不变,信号值将保持在(或接近)512(模数转换器范围的中点)。光线越强,信号就越强。光线越少,情况就越相反。在每个脉冲期间,从绿色发光二极管反射回传感器的光发生变化。
找到瞬时心跳的连续时刻,并测量它们之间的时间间隔,称为国际心跳间隔(IBI)
pulse sensor心率传感器_第1张图片
波形随时间T 变化,当脉搏波通过传感器下方时,信号值迅速上升,然后信号回落到正常点。有时,双极性陷波(向下尖峰)比其他信号更明显,但通常在下一个脉冲波通过之前,信号会稳定在背景噪声中。由于波是重复的和可预测的,我们可以选择几乎任何可识别的特征作为参考点,如峰值,通过计算每个峰值之间的时间来测量心率。
pulse sensor心率传感器_第2张图片有些心脏研究人员说当信号达到振幅的25%时,一些人说当信号达到振幅的50%时,一些人说这是上升过程中斜率最大的点。这种1.1版本的脉冲传感器代码设计用于通过信号在快速上升期间穿过50%的波振幅的时刻之间的计时来测量心搏间隔(IBI)
检测心率的方式:测出两个ADC峰值间的时长,假设这个时长为T,单位是毫秒,那么1分钟的心率假设为S,则 S = 60000/T 次/秒

实物图:
pulse sensor心率传感器_第3张图片
程序的流程图:
pulse sensor心率传感器_第4张图片

pulse sensor模块基于51单片机程序设计:

ADC初始化:

void ADC_init(unsigned char channel)//ADC初始化
{
 P1ASF=ADC_MASK<<channel; //使能PlusePin作为模数转换器输入
 ADC_RES=0; //清除以前的模数转换器结果
 ADC_RESL=0; //清除以前的模数转换器结果
 ADC_CONTR=channel|ADC_POWER|ADC_SPEEDLL|ADC_START; //开启模数转换器并开始转换

模拟读取:

unsigned int analogRead(unsigned char channel)//无符号整数模拟读取
{
 unsigned int result;
 ADC_CONTR &=!ADC_FLAG; //清除模数转换器标志
 result=ADC_RES;
 result=result<<8;
 result+=ADC_RESL;
 ADC_CONTR|=channel|ADC_POWER|ADC_SPEEDLL|ADC_START;
 return result;
}

定时器中断:

void T0_init(void){     
  // 初始化定时器0,每隔2毫秒引发一次中断。
 TMOD |= 0x01;
 TL0=T0MS;
 TH0=T0MS>>8;
 TR0=1; 
 ET0=1; 
  EA=1;                 
} 

void Timer0_rountine(void) interrupt 1
{                       
  int N;
 unsigned char i;
 // 保持最近10个IBI值的累计
  unsigned int runningTotal = 0;                    
 EA=0;                                  
 TL0=T0MS;
 TH0=T0MS>>8;    //重载16位定时器0
  Signal = analogRead(PulsePin);              // 读取 Pulse Sensor 
  sampleCounter += 2;                         // 使用此变量跟踪时间(以毫秒为单位)
  N = sampleCounter - lastBeatTime;       // 监控自上一拍开始的时间以避免噪音

你可能感兴趣的:(单片机,pulse,sensor,传感器,单片机,算法)