Zbieranie danych
Do śledzenia pozycji dłoni użyjemy czujnika Sharp GP2D12. Cały eksperyment powinien jednak działać także z innymi sensorami (oczywiście po przygotowaniu własnych danych uczących). Czujnik jest zasilany z płytki, a jego wyjście jest podłączone do złącza A0. Złożony model prezentuje fotografia otwierająca. Na czujnik została nałożona papierowa rura. Zapobiega ona przyłożeniu ręki zbyt blisko czujnika, którego zakres pracy wynosi od 10 do 80 cm.
Program zbierający dane znajduje się w repozytorium [1]. Został przygotowany w STM32CubeIDE. Odczyt z przetwornika cyfrowo-analogowego wyzwalany jest przepełnieniem licznika/czasomierza (Timer) numer 4. Następuje ono co 50 ms.
Zakończenie pomiaru wyzwala przerwanie, w którym następuje wysłanie zebranych danych poprzez interfejs UART.
Postanowiłem przygotować cztery gesty wykonywane dłonią nad czujnikiem. Obrazowo określiłem je jako:
- z dołu do góry,
- z góry na dół,
- koziołkowanie,
- machanie.
Dla każdego z czterech gestów zapisałem przebieg z dwudziestoma powtórzeniami. Dane można zebrać za pomocą dowolnego monitora portu szeregowego. Zebrałem także około 40 sekund przebiegu z czujnika, gdy nie był pokazywany żaden gest. Następnie w edytorze tekstowym usunąłem znaki nowej linii. Zebrane dane wkleiłem do notatnika Jupyter [3] jako tablicę w języku Python. Tworzą one dwuwymiarową tablicę d, której kolejne wiersze odpowiadają po kolei gestom z tablicy g:
g=["pusty", "z dołu do góry", "z góry na dół", "koziołkowanie", "machanie"]
Odstęp pomiędzy kolejnymi próbkami wynosi T=0.05 sekundy. Aby zorientować się, jakie dane zebraliśmy, przebiegi zostały wyrysowane na wykresach. Przyjąłem, że pojedyncze okno detekcji będzie miało długość 1 sekundy, czyli 20 próbek. Wektory zawierające kolejne 20 próbek będą podawane na wejście sieci neuronowej, która będzie rozstrzygała, czy zawierają one jakiś istotny sygnał. Dla każdego z gestów został powiększony pojedynczy przykład o długości 20 próbek. Nasz czujnik zwraca wartość odwrotnie proporcjonalną do odległości, więc wyższa wartość oznacza rękę w bliższej, a niższa w dalszej odległości od czujnika. Długość wektora równa 20 próbkom została wybrana dość arbitralnie. Dociekliwi czytelnicy mogą sprawdzić, jak zmiana tego parametru wpłynęłaby na uzyskane wyniki.