我正在开发一个应用程序,我需要检测某人头部的移动,特别是当有人点头时。为此,我们将Arduino放置在带加速度计(MPU-6050)的盖子上。加速度计返回0到10之间的值,从水平到向上看,0和-10用于向下看。
我需要识别代表简单点头的值中的模式,例如this。我被告知我必须使用类似的东西:
for(int x = 0; x < 100; x++){
result += abs(oldvalue) + abs(newvalue) / 2;
}
这将获得超过100个循环的平均值(如0.5秒),但根据result
,无法确定某个人是否点头。
我自己想过检查某种波形,实际点头。旧值将暂时低于或高于其他值,但不知道如何执行此操作,因为我无法暂停我的代码,因为它还检查其他传感器的输出(麦克风和指南针)。
答案 0 :(得分:-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;
}