“Sensor-Pulse/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
规格
第57行: 第57行:
 
*打开Arduino IDE,将下列代码复制到IDE中。
 
*打开Arduino IDE,将下列代码复制到IDE中。
 
<source lang="cpp">
 
<source lang="cpp">
 +
#define PIN A0
  
 +
unsigned long time0;
 +
unsigned long time_cache0;
 +
bool sta = false, sta_cache = true;
 +
unsigned long getTime0() {
 +
  sta_cache = sta;
 +
  sta = digitalRead(PIN);
 +
  delayMicroseconds(200);
 +
  if (sta == HIGH && sta_cache == LOW) {
 +
    time_cache0 = time0;
 +
    time0 = millis();
 +
    return (time0 - time_cache0);
 +
  }
 +
  else {
 +
    return 0;
 +
  }
 +
}
 +
 +
#define time1_MAX 200
 +
#define time1_MIN 50  //过快的波
 +
 +
unsigned long time1;
 +
unsigned long time1_cache;
 +
boolean time1_sta_error = false;
 +
unsigned long getTime1(unsigned long _t) {
 +
  time1_cache = _t;
 +
  if (time1_cache) {  //有数据时才执行滤波
 +
    if (time1_cache < time1_MAX) {  //滤最小阈值
 +
      if (time1_cache < time1_MIN) { //若有过快的波,开启标志位
 +
        //      Serial.println("make");
 +
        time1_sta_error = true;
 +
      }
 +
      return 0;
 +
    }
 +
    else {
 +
      //      Serial.print(".");
 +
      if (time1_sta_error) {  //如果被标志 则本次波形无效
 +
        //        Serial.println("make done");
 +
        time1_sta_error = false;
 +
        return 0;
 +
      }
 +
      return time1_cache;
 +
    }
 +
  }
 +
  else {
 +
    return 0;
 +
  }
 +
}
 +
 +
#define pulse_MIN 40
 +
#define pulse_MAX 180
 +
#define pulse_UPDATA  5
 +
int pulse_num = 0;
 +
unsigned long pulse_vol = 0;
 +
unsigned long pulse_cache = 0;
 +
unsigned long pulse(unsigned long _t) {
 +
  if (_t) {
 +
    unsigned long  _pulse_vol = 60000 / _t;
 +
    //    Serial.print("_pulse_vol:");
 +
    //    Serial.println(_pulse_vol);
 +
    if ((_pulse_vol > pulse_MIN) && (_pulse_vol < pulse_MAX)) {
 +
      pulse_vol += _pulse_vol;
 +
      pulse_num++;
 +
      if (pulse_num > (pulse_UPDATA - 1)) {
 +
        //        Serial.println("OUTPUT");
 +
        unsigned long _pulse = pulse_vol / pulse_UPDATA;
 +
        pulse_num = 0;
 +
        pulse_vol = 0;
 +
        pulse_cache = _pulse;
 +
        return _pulse;
 +
      }
 +
      else {
 +
        return pulse_cache;
 +
      }
 +
    }
 +
    else {
 +
      pulse_num = 0;
 +
      pulse_vol = 0;
 +
      return 0;
 +
    }
 +
  }
 +
  else {
 +
    return 0;
 +
  }
 +
}
 +
 +
 +
// the setup routine runs once when you press reset:
 +
void setup() {
 +
  // initialize serial communication at 9600 bits per second:
 +
  pinMode(A0, INPUT);
 +
  Serial.begin(9600);
 +
 +
  Serial.println("hello");
 +
}
 +
 +
// the loop routine runs over and over again forever:
 +
void loop() {
 +
  // print out the value you read:
 +
  //    Serial.print("t0:");
 +
  //  Serial.print(digitalRead(A0) * 2000);
 +
  long p0 = getTime0();
 +
  long p1 = getTime1(p0);
 +
  long p2 = pulse(p1);
 +
  if (p0) {
 +
    Serial.print(millis() / 1000);
 +
    Serial.print(",");
 +
    Serial.print(p0);
 +
    Serial.print(",");
 +
    Serial.print(p1);
 +
    Serial.print(",");
 +
    Serial.print(p2);
 +
    Serial.println();
 +
  }
 +
  //  delay(3);        // delay in between reads for stability
 +
}
 
</source>
 
</source>
 
*在Arduino IDE的工具(Tools)→端口(Serial Port)里面选择正确的端口号。
 
*在Arduino IDE的工具(Tools)→端口(Serial Port)里面选择正确的端口号。
第66行: 第182行:
 
[[file:mCookie-pir-res.JPG|600px|center]]
 
[[file:mCookie-pir-res.JPG|600px|center]]
 
*结果
 
*结果
当红外热释电运动传感器在检测范围内检测到运动的生命体时,在输出引脚会输出高电平,电压为5V,当检测到红外热释电信号消失时,延迟2.3~3秒后,输出低电平,电压为0V。因此我们可以根据这个特点来快速的建立一个运动人体检测的应用。
+
心率传感器会检测到由于心脏的跳动而引起指尖的血液变化情况,将一些不稳定的情况通过算法滤掉,从而得到一个较准备的值。
 
 
 
===程序调试===
 
===程序调试===
  

2016年6月23日 (四) 09:19的版本

Language English
Microduino-Pulse

Microduino-Pulse是一块光电原理的心率传感器模块。利用特定波长红外线对血管末端血液微循环产生的血液容积的变化的敏感特性,检测由于心脏的跳动,引起指尖的血液变化,

经过信号放大、调整等电路处理,输出反映指尖血容积变化的完整的脉搏波电压信号。



特色

  • SON7015传感器超功耗,耗电为0.2毫安;
  • 体积小,易安装;
  • 模拟信号;

规格

  • 电器规格
    • 输入电压:3.3~5V,最大6V
    • 工作电流:15uA
    • 工作温度:-20~85℃
    • 输出电压:高电平5V,低电平0V
  • 技术参数
    • 感应距离:紧贴皮肤
  • 尺寸
    • 板子大小:20mm*10mm
    • 1.27mm间距的4Pin接口;
  • 接法
    • 引脚说明:GND、VCC、信号、NC。

开发

设备

模块 数量 功能
mCookie-CoreUSB/zh 1 核心板
mCookie-Hub/zh 1 传感器转接板
Microduino Sensor-Pulse/zh 1 心率传感器模块
  • 其他硬件设备
    • USB数据连接线 一根

准备

  • Setup 1:将心率传感器和Hub的D6接起来。
  • Setup 2:将CoreUSB,Hub,pulse连接在一起。通过USB数据线将接入电脑。

实验:检测心率跳动

  • 打开Arduino IDE,将下列代码复制到IDE中。
#define PIN A0

unsigned long time0;
unsigned long time_cache0;
bool sta = false, sta_cache = true;
unsigned long getTime0() {
  sta_cache = sta;
  sta = digitalRead(PIN);
  delayMicroseconds(200);
  if (sta == HIGH && sta_cache == LOW) {
    time_cache0 = time0;
    time0 = millis();
    return (time0 - time_cache0);
  }
  else {
    return 0;
  }
}

#define time1_MAX 200
#define time1_MIN 50  //过快的波

unsigned long time1;
unsigned long time1_cache;
boolean time1_sta_error = false;
unsigned long getTime1(unsigned long _t) {
  time1_cache = _t;
  if (time1_cache) {  //有数据时才执行滤波
    if (time1_cache < time1_MAX) {   //滤最小阈值
      if (time1_cache < time1_MIN) { //若有过快的波,开启标志位
        //       Serial.println("make");
        time1_sta_error = true;
      }
      return 0;
    }
    else {
      //      Serial.print(".");
      if (time1_sta_error) {  //如果被标志 则本次波形无效
        //        Serial.println("make done");
        time1_sta_error = false;
        return 0;
      }
      return time1_cache;
    }
  }
  else {
    return 0;
  }
}

#define pulse_MIN 40
#define pulse_MAX 180
#define pulse_UPDATA  5
int pulse_num = 0;
unsigned long pulse_vol = 0;
unsigned long pulse_cache = 0;
unsigned long pulse(unsigned long _t) {
  if (_t) {
    unsigned long  _pulse_vol = 60000 / _t;
    //    Serial.print("_pulse_vol:");
    //    Serial.println(_pulse_vol);
    if ((_pulse_vol > pulse_MIN) && (_pulse_vol < pulse_MAX)) {
      pulse_vol += _pulse_vol;
      pulse_num++;
      if (pulse_num > (pulse_UPDATA - 1)) {
        //        Serial.println("OUTPUT");
        unsigned long _pulse = pulse_vol / pulse_UPDATA;
        pulse_num = 0;
        pulse_vol = 0;
        pulse_cache = _pulse;
        return _pulse;
      }
      else {
        return pulse_cache;
      }
    }
    else {
      pulse_num = 0;
      pulse_vol = 0;
      return 0;
    }
  }
  else {
    return 0;
  }
}


// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  pinMode(A0, INPUT);
  Serial.begin(9600);

  Serial.println("hello");
}

// the loop routine runs over and over again forever:
void loop() {
  // print out the value you read:
  //    Serial.print("t0:");
  //  Serial.print(digitalRead(A0) * 2000);
  long p0 = getTime0();
  long p1 = getTime1(p0);
  long p2 = pulse(p1);
  if (p0) {
    Serial.print(millis() / 1000);
    Serial.print(",");
    Serial.print(p0);
    Serial.print(",");
    Serial.print(p1);
    Serial.print(",");
    Serial.print(p2);
    Serial.println();
  }
  //  delay(3);        // delay in between reads for stability
}
  • 在Arduino IDE的工具(Tools)→端口(Serial Port)里面选择正确的端口号。
Upload.JPG
  • 编译完成后直接下载程序。
  • 下载完毕你可以打开串口监视器,显示的提示即反应了当前传感器检测的状态。
  • 结果

心率传感器会检测到由于心脏的跳动而引起指尖的血液变化情况,将一些不稳定的情况通过算法滤掉,从而得到一个较准备的值。

程序调试

应用

  • 实时心率检测


项目

购买

历史

图库

  • 正面
Microduino-Pulse sensor Front
  • 背面
Microduino-Pulse sensor Back