【问题标题】:Determine the heartbeat using Arduino with a photoplethysmogram sensor使用带有光电容积描记图传感器的 Arduino 确定心跳
【发布时间】:2016-04-05 19:09:44
【问题描述】:

我设法将TSD200 光电容积描记传感器从BIOPAC 连接到Arduino Uno 并读取0 到1023 之间的值。

我正在尝试使用传感器发送的串行数据来确定特定时间间隔(例如 30 秒)内的心跳次数。我尝试将实际值与之前的值进行比较,但这种测量绝对不可靠,因为即使手指没有放在传感器上,数据也会发生振荡。

int val = 0;
int prev;

void setup() 
{
   Serial.begin(9600);
}

void loop() 
{        
   prev = val;
   val = analogRead(A0);

   if(val != prev) 
   {
      Serial.println("Heartbeat");
   }

   delay(1);
}

不知不觉我从错误的角度看待这个问题。我真的很感激任何帮助...

【问题讨论】:

  • 传感器输出为 20mV 峰峰值(表示交流波形)。 Arduino 需要 0 到 5V 之间的输入。 Arduino 输入的分辨率为 5mV。要使其工作,您需要 AC 耦合、偏置和放大输入信号的定制硬件。
  • 哦,但是当我将手指放在传感器上时,我怎么可能读取 700 到 850 之间的值?
  • 您的手指可以在很短的时间内产生数百甚至数千伏的电压。当湿度非常低时,您会感到触电。但即使在正常湿度下,当你感觉不到电击时,你身体的电势很容易达到 5V(除非你赤脚站在金属地板上,或者穿着static strap)。

标签: c arduino


【解决方案1】:

心跳不是尖峰(您尝试检测)。典型的体积描记图是正弦波。您需要找到峰值/谷值/零交叉(或多或少容易但容易出错)或傅里叶变换样本并获得主频率(推荐但涉及)。

还建议使用偏置增益电路,如 user3386109 所述。

【讨论】:

  • 能否请您指出一些教程,我可以在其中阅读如何找到peaks/troughs/zero crossings - 这正是我所需要的。我现在很清楚,为BIOPAC 构建的TSD200 传感器不适用于Arduino。我会寻找一个不同的。
  • @F.Gran 我不知道任何具体的教程。这个想法非常简单:通过低通滤波器运行样本并找到序列可靠地从增加变为减少的位置确定max 值。那是一个高峰。低谷则相反。识别出maxmin 后,插入样本应为(max - min)/2 的位置。这些是零交叉。它们应该每个周期发生两次。心跳频率降低了一半。差不多就这些了。
  • 我会阅读更多关于你刚才所说的内容!这是一个好的开始!谢谢。
【解决方案2】:

您以前尝试过使用信号调理吗?在传感器输出和输入 arduino 之间添加第一个信号调理电路。传感器的输出需要放大,因为arduino上ADC的范围是0-5 V

【讨论】:

  • 我没试过...你能详细说明一下吗?我真的很想理解。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多