[PROJEKT] Czujnik wykrywania gestów PAJ7620U2 i Arduino

Czujniki gestów coraz częściej montowane są w urządzeniach elektroniki konsumenckiej, takich jak smartfony, telewizory, konsoli do gier, a nawet urządzenia kuchenne. W porównaniu do interfejsów opartych o ekrany dotykowe, sterowanie gestami nie stanowi większych problemów wtedy, gdy użytkownik nosi rękawice. Ponadto pozwala wprowadzić do interfejsu trzeci wymiar, gdy ekrany dotykowe mogą jak wiadomo pracować tylko w dwóch wymiarach.

Jednym z niedrogich czujników wykrywających gesty jest układ PAJ7620U2. Sensor jest produkowany przez firmę PixArt Imaging. Zawiera w jednej obudowie zarówno nadajnik światła podczerwonego, jak i cały tor optyczny służący do odbioru światła odbitego. Układ został zaprojektowany z uwzględnieniem mechanizmów oszczędzania energii, co pozwala na wykorzystanie sensora w aplikacjach zasilanych bateryjnie. Dodatkowo czujnik oferuje m.in. niezawodną pracę przy świetle otoczenia do 100 kLux, a także redukcję szumów otoczenia.

Czujnik PAJ7620U2 jest w stanie rozpoznać 9 różnych gestów: (góra, dół, lewo, prawo, pchnięcie, pociągnięcie, ruch w kierunku wskazówek zegara, przeciwnie do wskazówek zegara, fala). Wykrywane są ruchy wykonywane w odległości 5-15 cm od czujnika, natomiast kąt widzenia wynosi 60°. Szybkość wykonywania ruchu obsługiwana przez sensor wynosi 60-600°/s w trybie normalnym lub 60-1200°/s w trybie gry. Sensor komunikuje się za pomocą magistrali I2C i zawiera dodatkowo wbudowany czujnik wilgotności, poprawiający wykrywanie obiektów wchodzących lub wychodzących z pola widzenia.

Sensor, oprócz trybu rozpoznawania gestów, oferuje także tryb obrazowania. Pozwala on na przesyłanie danych o obrazach za pomocą interfejsu SPI. Rozdzielczość takiego obrazu wynosi 30×30 pikseli, a częstotliwość odświeżania – 120 Hz. Intensywność każdego piksela jest przesyłana z 9-bitową głębią. Parametry obrazu w tym trybie można programować przez I2C.

Moduły z czujnikiem PAJ7620U2

Czujnik PAJ7620U2 jest dostępny na rynku także w postaci modułów umożliwiających łatwe podłączenie do popularnych platform rozwojowych, takich jak Arduino, Raspberry Pi czy STM32. Ja w projekcie wykorzystam niewielki i niedrogi moduł oznaczony jako GY-PAJ7620U2. Płytka udostępnia jedynie magistralę I2C, co oznacza, że mogę pracować jedynie w trybie rozpoznawania gestów. Oprócz czujnika na płytce zamontowano także stabilizatory upraszczające zasilanie sensora. Moduł można zasilać jednym napięciem z zakresu od 2,8 V do 3,3V. Na złącze goldpin wyprowadzono także pin INT, który może posłużyć do przekazania przerwania z czujnika do mikrokontrolera.

W zestawie znajduje się także złącze szpilkowe proste, które służy do przylutowania do wyprowadzeń modułu.

Rys. 1. Moduł GY-PAJ7620U2 z czujnikiem gestów PAJ7620U2

W dalszej części artykułu zaprezentuję kod umożliwiający odczyt gestów z czujnika PAJ7620U2 na platformie Arduino. Następnie dołączę do układu wyświetlacz OLED modOLED130_I2C BLUE o przekątnej 1,3” ze sterownikiem SH1106 i komunikacją I2C. Na wyświetlaczu będą prezentowane gesty aktualnie odczytywane przez sensor.

Rys. 2. Moduł modOLED130_I2C BLUE z wyświetlaczem OLED 1,3”

Jako moduł główny projektu zastosowano płytkę Maker Uno z oferty Cytron Technologies. Jest ona w pełni kompatybilna z Arduino Uno i w stosunku do oryginału ma kilka dodatkowych elementów, m.in. brzęczyk piezoelektryczny, programowalny przycisk oraz 12 diod LED sprzężonych z wyprowadzeniami cyfrowymi.

Rys. 3. Płytka Cytron Maker Uno kompatybilna z Arduino Uno

Projekt rozpoznawania gestów na Arduino

Do zmontowania projektu potrzebne są następujące elementy:

Podłączenie modułu z czujnikiem do płytki Arduino jest stosunkowo proste. Wystarczy do sensora podłączyć zasilanie, a także komunikację przez I2C. Dokładny sposób połączenia komponentów przedstawiono na poniższej tabeli.

Tabela 1. Połączenie modułu GY-PAJ7620U2 z płytką Maker Uno

Pin modułu GY- PAJ7620U2 Pin Maker UNO
VCC 5V
GND GND
SDA SDA
SCL SCL
Połączenie zaprezentowano także na poniższej fotografii.

Rys. 4. Moduł GY- PAJ7620U2 podłączony do Maker Uno

Do testów układu wykorzystam przykładowy kod dostępny na stronie Waveshare. Kod identyfikuje rozpoznany gest i wypisuje odpowiednią nazwę na porcie szeregowym.

Na początku kodu dołączana jest biblioteka odpowiedzialna za obsługę magistrali I2C oraz biblioteka z funkcjami do obsługi czujnika PAJ7620U2. Inicjalizowana jest także zmienna Gesture_Data, w której przechowywana jest informacja o aktualnie rozpoznanym geście.

W funkcji setup() inicjalizowane są: port szeregowy, interfejs I2C oraz obsługa czujnika gestów. Wybierany jest też bank rejestrów, a także przeprowadzana jest konfiguracja czujnika. Konfiguracja polega na wpisaniu do odpowiednich rejestrów danych z tablicy Init_Gesture_Array.

Z kolei w pętli głównej programu z rejestru PAJ_INT_FLAG1 pobierane są dane dotyczące właśnie rozpoznanego gestu. Następnie w bloku switch dane są dopasowywane do konkretnego gestu i ta informacja jest wypisywana na port szeregowy.

Poniższy zrzut ekranu ilustruje działanie kodu.

Rys. 5. Działanie przykładowego kodu do obsługi sensora PAJ7620U2

Do pobrania

O autorze