Я работаю над приложением, в котором мне нужно обнаружить движение головы кого-то, особенно когда кто-то кивает. Для этого мы поместили Arduino на колпачок с акселерометром (MPU-6050). Акселерометр возвращает значения в диапазоне от 0 до 10 от горизонтального положения, если смотреть немного вверх, и от 0 до -10, если смотреть немного вниз.
Мне нужно распознать шаблон в значениях, которые представляют собой простой кивок, как этот. Мне сказали, что я должен был использовать что-то вроде:
for(int x = 0; x < 100; x++){
result += abs(oldvalue) + abs(newvalue) / 2;
}
Это даст среднее значение за 100 циклов (например, 0,5 секунды), но невозможно определить, кивнул человек или нет, основываясь на result
,
Я сам думал о проверке какой-то формы волны, что на самом деле кивает. Старое значение будет некоторое время ниже или ниже, чем другое значение, но я не уверен, как это сделать, поскольку я не могу приостановить мой код, поскольку он также проверяет выходной сигнал других датчиков (микрофона и компаса).
Вы супруг, чтобы иметь порог, когда датчик находится в идеальном состоянии / статическое состояние
Или небольшое движение головы Натурле
Ммм, вы можете попробовать этот код, я думаю, он будет работать для вас:
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;
}
Других решений пока нет …