0

我正在开发一个需要检测某人头部运动的应用程序,尤其是当有人点头时。为此,我们在带有加速度计 (MPU-6050) 的盖子上放置了一个 Arduino。加速度计从水平方向返回 0 到 10 之间的值以向上看,0 和 -10 以向下看。

我需要识别代表简单点头的值中的模式,例如this。我被告知我必须使用类似的东西:

for(int x = 0; x < 100; x++){
    result += abs(oldvalue) + abs(newvalue) / 2;
}

这将获得 100 次循环(如 0.5 秒)的平均值,但无法根据result.

我自己考虑过检查某种波形,实际上是点头。旧值会在一段时间内低于或高于另一个值,但不确定如何执行此操作,因为我无法暂停我的代码,因为它也在检查其他传感器(麦克风和指南针)的输出。

4

1 回答 1

-1

当传感器处于空闲/静态状态或小自然头部运动时,您配偶有一个阈值嗯,您可以尝试此代码,我认为它会为您工作:

void loop()
{
    int CurrentState = analogRead(AccPin);
     if(CurrentState > ThresHold || CurrentState < ThresHold)
     {boolean IsNoding = CheckForNoding();} 
     if(IsNoding)
     {
         //Do Whatever You Want
     }
     else
     delay(TimeInterVal); 
}

boolean CheckForNoding()
{ 
  Count = 0;
  boolean State = false;
  while(Count<MinToConsiderNode) // Your Case 100?!
  {
      int CurrentState = analogRead(AccPin);
      if(CurrentState > ThresHold || CurrentState < ThresHold)
      {
          int Count ++;
          delay(TimeInterval) // What you Think Should Be The Time Period Between each => Head Going Up or Down
          State = true;
      }
      else 
        {
            State = false;
            break;
        }
  }

    return State;
}
于 2013-11-09T08:10:29.077 回答