pulsesensor传感器和烟雾传感器MQ-2的学习笔记

pulsesensor传感器

PluseSensor传感器简介

PulseSensor 是一款用于心率测量、脉搏波形测量和 HRV 分析的光电反射式模拟传感器。将其佩戴于手指、耳垂等处,通过导线连接可将采集到的模拟信号传输给 Arduino、STM32 和 STC12C5A 等具有模拟采集功能的单片机并转换为数字信号,再通过单片机的简单计算后就可以得到心率数值,Pulse Sensor 是一款开源硬件,非常方便二次开发。
pulsesensor传感器和烟雾传感器MQ-2的学习笔记_第1张图片
pulsesensor传感器和烟雾传感器MQ-2的学习笔记_第2张图片

PluseSensor传感器参数

电路板直径:16mm
电路板厚度:1.2mm
LED 峰值波长:515nm(绿光)
供电电压:3.3~5v
检测信号类型:光反射信号(PPG)
输出信号类型:模拟信号
信号放大倍数:330 倍
输出信号范围:0~VCC
电流大小:~4ma(5v 下)
分辨率:1 bpm
采样率:500Hz(由程序设定)

PluseSensor传感器工作原理

传统的脉搏测量方法主要有三种:一是从心电信号中提取;二是从测量血压时压力传感器测到的波动来计算脉率;三是光电容积法。前两种方法提取信号都会限制病人的活动,如果长时间使用会增加病人生理和心理上的不舒适感。而光电容积法脉搏测量作为监护测量中最普遍的方法之一,其具有方法简单、佩戴方便、可靠性高等特点。
**光电容积法的基本原理是利用人体组织在血管搏动时造成透光率不同来进行脉搏测量的。**其使用的传感器由光源和光电变换器两部分组成,通过绑带或夹子固定在病人的手指或耳垂上。光源一般采用对动脉血中氧和血红蛋白有选择性的一定波长(500nm~700nm)的发光二极管。当光束透过人体外周血管,由于动脉搏动充血容积变化导致这束光的透光率发生改变,此时由光电变换器接收经人体组织反射的光线,转变为电信号并将其放大和输出。由于脉搏是随心脏的搏动而周期性变化的信号,动脉血管容积也周期性变化,因此光电变换器的电信号变化周期就是脉搏率。
根据相关文献和实验结果,560nm波长左右的波可以反映皮肤浅部微动脉信息,适合用来提取脉搏信号。本传感器采用了峰值波长为515nm的绿光LED,型号为AM2520,而光接收器采用了APDS-9008,这是一款环境光感受器,感受峰值波长为565nm,两者的峰值波长相近,灵敏度较高。此外,由于脉搏信号的频带一般在0.05~200Hz之间,信号幅度均很小,一般在毫伏级水平,容易受到各种信号干扰。在传感器后面使用了低通滤波器和由运放MCP6001构成的放大器,将信号放大了330倍,同时采用分压电阻设置直流偏置电压为电源电压的1/2,使放大后的信号可以很好地被单片机的AD采集到。

PluseSensor传感器连接方式

pulsesensor传感器和烟雾传感器MQ-2的学习笔记_第3张图片

可以看到在传感器的背面,引出了三个脚,即传感器的接口, 红框中的 3 根线,标有S的为模拟信号输出线(最左边);标有+的为电源输入线(中间);标有-的为地线(最右边)。

Pulse Sensor检测原理

通过发射光源,然后根据光源返回的效果输出ADC数据。由于手指上布满毛细血管,而毛细血管会随着心率而跳动,这就导致传感器发射和接收光的效果不同,从而达到ADC输出效果不同,比如下图就是ADC的输出图:
pulsesensor传感器和烟雾传感器MQ-2的学习笔记_第4张图片
因此检测心率的方式很简单:测出两个ADC峰值间的时长,假设这个时长为T,单位是毫秒,那么1分钟的心率假设为S,则:

S = 60000/T 次/秒
程序设计需要考虑的地方:

1. 传感器检测时,必须手指按在传感器上,否则检测的数据是不对的,所以首先要判断传感器是否有手指接触。

2. 如何正确的获取两次峰值数据?

程序逻辑:

if(halPulseSensorTouch())  
{
     
  if( (refPeak = halPulseSensorPeakFitting()) == 0 )  
    goto RET;  
    
  // First Beat  
  if(halPulseSensorGetNextBeat(refPeak) == 0)  
    goto RET;  
      
  // Clear and Start Timer  
  HAL_PULSE_SENSOR_TIMER_CLEAR();  
  HAL_PULSE_SENSOR_TIMER_START();  
    
  // Skip the peak value  
  HAL_PULSE_SENSOR_DELAY_MS(200);  
    
  // Second Beat  
  secondBeat = halPulseSensorGetNextBeat(refPeak);  
    
  // Stop Timer and get the delay time      
  HAL_PULSE_SENSOR_TIMER_STOP();  
    
  if(secondBeat == 0)  
    goto RET;  
      
  if( (beatTime = (uint16)HAL_PULSE_SENSOR_TIMER_GET_TIME()) == 0 )  
    goto RET;  
    
  if( (dat.heartRate = (uint16)60000 / beatTime) != 

你可能感兴趣的:(物联网-动物的物联网)