2013-11-07 3 views
0

Я работаю над приложением, где мне нужно обнаружить движение головы кого-то, особенно когда кто-то кивает. Для этого мы поставили Arduino на крышке с акселерометром (MPU-6050). Акселерометр возвращает значения от 0 до 10 от горизонтали до искажения до 0 и -10 для поиска бит вниз.Обнаружение кивок с Arduino

Мне нужно распознать шаблон в значениях, которые представляют собой простой кивок, например this. Мне сказали, что я должен был использовать что-то вроде:

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

Это позволит получить среднее значение более 100 циклов (например, 0,5 секунды), но это невозможно определить Wheter человек кивая или не основано на result ,

Я сам думал о проверке какой-то формы волны, которая на самом деле кивает. Старое значение будет некоторое время ниже или выше другого значения, но не уверен, как это сделать, поскольку я не могу приостановить мой код, потому что он также проверяет вывод от других датчиков (микрофон и компас).

+1

Вы пробовали взятие производная? –

+0

Я этого не сделал, не совсем уверен, как, но я попробую. Спасибо за ваш вклад. – Jef

+1

При поиске периодического сигнала всегда учитывайте БПФ. Вейвлет-преобразование - еще один вариант. – MSalters

ответ

-1

Вы Супруг иметь порог, когда датчик ideling/статическое состояние Или Лил Naturle Head Movment Ммм вы можете попробовать этот код, я думаю, что это будет работать для вас:

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; 
} 
Смежные вопросы