Elektroda.pl
Elektroda.pl
X
Sklep HeluKabel
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Bezprzewodowy system kontroli klawiatury/myszy gestami

jacu007 20 Sie 2013 16:58 7695 8
  • Bezprzewodowy system kontroli klawiatury/myszy gestami Mister Gloves to bezprzewodowy interfejs USB, pozwalający poprzez intuicyjne ruchy ręki i palców sterować komputerem. Rękawica noszona na prawej dłoni umożliwia użytkownikowi kontrolę ruchu kursora, wykonywanie skrótów klawiaturowych oraz symulowanie kliknięć przyciskami myszy, poprzez zginanie palców bądź kciuka. Rękawica lewej ręki umożliwia wprowadzanie poszczególnych klawiszy klawiatury poprzez dotykanie odpowiednich punktów na dłoni znajdującej się w wyznaczonej pozycji. Lewy i prawy kontroler komunikują się z komputerem bezprzewodowo za pośrednictwem stacji bazowej. Komunikacja z komputerem odbywa się za pomocą interfejsu USB 1.1, z racji czego nie wymaga instalowania żadnych dodatkowych sterowników.

    System jest przeznaczony dla każdego, kto nie lubi być przywiązanym do biurka przy korzystaniu z komputera, szczególnie podczas surfowania po internecie. Dobrym pomysłem jest również zastosowania takiego rozwiązania, jako alternatywnego kontrolera do gier. Dzięki stymulacji nerwów urządzenie może pomóc zapobiegać powstawaniu cieśni nadgarstka oraz innych poważnych chorób dłoni.

    Projekt

    Na początku sporządzono listę gestów, które mogą być obsługiwane przez system, jak również korespondujące z nimi wejścia klawiatury oraz myszki.
    Dla prawej dłoni określono cztery pozycje, a dla każdej z nich przypisano odpowiednie funkcje, którymi będzie starowała.
    Bezprzewodowy system kontroli klawiatury/myszy gestami
    W pozycji „pistolet” (finger gun), zginanie palca wskazującego imituje klikanie lewym przyciskiem myszy, a zginanie kciuka w dół symuluje klikanie prawym przyciskiem myszy. W tej pozycji sterowany jest również kursor. Poprzez zginanie nadgarstka w prawo i lewo można sterować kursorem w osi poziomej, a poprzez ruchy w górę i w dół w osi pionowej
    Bezprzewodowy system kontroli klawiatury/myszy gestami




    W pozycji „pięść w dół” (downward fist), poprzez poruszanie dłonią w górę i w dół można symulować kręcenie kółkiem scroll myszy.
    Bezprzewodowy system kontroli klawiatury/myszy gestami
    W pozycji „pięść w górę” (upward fist), zginanie palca wskazującego symuluje naciskanie klawisza alt, a zginanie kciuka symuluje naciskanie klawisza ctrl.
    Bezprzewodowy system kontroli klawiatury/myszy gestami
    W ostatniej pozycji „ręka karateki” (karate chop), zginanie kciuka powoduje symulację naciskania klawisza shift.

    Takie ułożenie gestów umożliwia współpracę obu dłoni podczas pisania tekstów.
    Dla dłoni lewej określono 4 pozycje oraz 14 punktów kontaktu na dłoni i palcach, które mogą być dotykanie przez kciuk. Taka kombinacja daje możliwość wprowadzania w sumie 56 różnych klawiszy. Pozycje dłoni to odpowiednio: dłoń do góry, dłoń na dół, kciuk do góry, palce do góry.
    Bezprzewodowy system kontroli klawiatury/myszy gestami
    Kolory liter oznaczone na dłoni odpowiadają poszczególnym punktom przy danym ułożeniu dłoni.

    W projekcie zastosowano dodatkowo piezoelektryczny buzzer, który odpowiednim dźwiękiem sygnalizuje właściwe ułożenie kontrolera lewej dłoni. Częstotliwości poszczególnych pozycji dłoni odpowiadają kolejnym czterem strunom gitary. Są to D (293.66 Hz), G (392 Hz), B (493.88 Hz), E (659.26 Hz), odpowiednio dla pozycji: dłoń na dół, kciuk do góry, dłoń do góry oraz palce do góry. Regulacją głośności zajmuje się specjalny potencjometr.

    Na kontrolerze lewej dłoni został zamontowany kontroler kalibracji. Cztery specjalne przyciski, służą do resetowania każdej pozycji dłoni zgodnie z życzeniem użytkownika. Trzeba go po prostu nacisnąć w danej pozycji a system zarejestruje nowe położenie docelowe.

    Na kontrolerze prawej dłoni znajdują się dwa potencjometry do regulacji poziomej i pionowej czułości myszy. Trzeci potencjometr reguluje jak wysoko musi zostać odchylony palec wskazujący, aby wywołać klik. Dodatkowo kontroler prawej dłoni zawiera duży czerwony przycisk do resetowania pozycji „pistolet”, jak również do włączania całego systemu i aktywacji stacji bazowej.

    Struktura logiczna

    Projekt został podzielny na trzy podstawowe części: kontroler prawej dłoni, kontroler lewej dłoni oraz stacja bazowa.

    Mikrokontroler kontrolera lewej dłoni, zbiera pomiary pary akcelerometrów, aby określić aktualną pozycję dłoni. Sprawdza również, który z punktów kontaktowych na dłoni lub palcu jest aktualnie aktywny. Pomiary te przesyłane są poprzez przewód do mikrokontrolera znajdującego się w kontrolerze prawej dłoni.
    W tym samy czasie, mikrokontroler znajdujący się na kontrolerze prawej dłoni zbiera pomiary z pary akcelerometrów czujnika 5 stopni swobody oraz czujnika wygięcia (flex sensor). Następnie sprawdza stan punktów kontaktowych na dłoni i przetwarza informację, aby określić dany gest. W kolejnym kroku MCU prawej dłoni, przetwarza wszystkie pomiary z obu dłoni, konwertuje je na sygnały odpowiadające poszczególnym wejściom klawiatury oraz myszy i przesyła do stacji bazowej za pomocą pakietu radiowego pracującego w paśmie 902-928 MHz.

    Stacja bazowa również składa się również z dwóch mikrokontrolerów. Jeden z nich podłączony jest do pakietu radiowego i odbiera sygnały z kontrolerów rękawic. Przychodzące surowe dane są następnie przekazywane do drugiego MCU. Obsługuje on program interfejsowy USB, za którego pomocą przekazywane są informacje do komputera. Powodem, dla którego nie zastosowano tylko jednego mikrokontrolera w stacji bazowej jest kolizja przerwań USART pracujących z prędkością „high baud rates” (57600 bps) z systemem przerwań USB. Powodowało to brak rozpoznania urządzenia przez system Windows. Początkowo interfejs USB miał być zaimplementowany sprzętowo, ale długi czas oczekiwania na odpowiedni scalak spowodował, że zrobiono to programowo i tak już zostało.
    Bezprzewodowy system kontroli klawiatury/myszy gestami
    Podczas testów nie znaleziono żadnych powodów, dla których byłaby konieczna odwrotna komunikacja komputera z kontrolerami.

    Sprzęt

    Kontroler lewej dłoni

    Akcelerometry MMA1260D oraz MMA2260D firmy Freescale Semiconductor
    W kontrolerze zastosowano parę jednoosiowych akcelerometrów +/-1,5G. Zostały one tak ustawione, że ich wektory mierzące przyśpieszenie są do siebie prostopadłe w osiach Z oraz X lewej dłoni. Przyśpieszenie mieszone względem ziemskiego jest przekazywane do wewnętrznego przetwornika ADC mikrokontrolera poprzez filtr dolnoprzepustowy. Zarówno na zasilanie obu sensorów jak i napięcie odniesienia AREF w mikrokontrolerze podawane jest 5V. Zasilanie stanowią cztery baterie paluszki AAA podłączone do stabilizatora LM340T5.
    Bezprzewodowy system kontroli klawiatury/myszy gestami
    Okazało się, że w trakcie spadku napięcia na bateriach (z powodu wyczerpywania się) punkt pracy i czułość akcelerometrów zmienia się. Oznacza to, że nie można ustalić na sztywno pozycji dla poszczególnych gestów. Rozwiązaniem tego problemu są przyciski resetu dla każdej pozycji dłoni.

    Czujnik dotyku

    Czujniki dotyku to zwykły zbiór elektrod zamocowanych wokół palców i dłoni, połączony z kolejnymi wejściami mikrokontrolera. Wszystkie wejścia MCU są połączone z napięciem zasilającym poprzez wewnętrzne rezystory pull-up. Na kciuku został nałożony cienki pasek miedzi, połączony poprzez cienki przewód z masą. Kiedy czujnik jest dotykany przez kciuk, na wejściu pinu mikrokontrolera pojawia się stan niski. Okazało się, że dotkniecie kciukiem elektrody, powoduje powstanie stanu nieustalonego, wywołanego drganiami. Problem wyeliminowano poprzez odpowiednie oprogramowanie.

    Kontroler prawej dłoni

    Sparkfun IMU, czujnik 5-stopni swobody

    Autorzy wykorzystali taki czujnik, ponieważ dostali go w prezencie. Ta płytka scalona łączy w sobie 3-osiwy akcelerometr Analog Devices ADXL330 z pomiarem przyśpieszenia +/- 3G oraz 2-osiowy żyroskop o wychyleniu 500 stopni, InvenSense IDG300. Początkowo to on, poprzez pomiar wychylenia, miał sterować ruchem kursora myszy, jednakże duży dryft biasu spowodował, że nie było to możliwe. Ostatecznie o położeniu kursora decyduje przyspieszenie mierzone wzdłuż osi X oraz Z przez akcelerometr. Jego wyjścia połączono bezpośrednio do wejść przetwornika ADC w mikrokontrolerze.
    Bezprzewodowy system kontroli klawiatury/myszy gestami
    Akcelerometr jest zamontowany w taki sposób, że płaszczyzna dłoni jest prostopadłą do osi Z a płaszczyzna dłoni w kierunku palców do osi X.
    Ponieważ opisywany czujnik wymaga zasilania 3,3V w kontrolerze zastosowano odpowiedni stabilizator. Analogiczne napięcie podłączone jest do wejścia AREF w MCU.

    Czujnik wygięcia

    Do kontroli wygięcia zakupiono czujnik firmy Sparkfun, który zamocowano na placu wskazującym. Czujnik zmienia rezystancję z około 8kΩ do około 12kΩ podczas zginania. Jego wyjście zostało podłączone poprzez dzielnik rezystancyjny do wejścia nieodwracającego wzmacniacza operacyjnego LM358. Na wejście odwracające został podpięty potencjometry, za którego pomocą można określić punkt przełączenia. Dodatkowo w celu uzyskania histerezy zastosowano rezystor o wartości około 1MΩ podpięty pomiędzy wyjście wzmacniacza a wejście nieodwracające. Kiedy palec wskazujący jest zginany rośnie napięcie na wejściu nieodwracającym wzmacniacza. Po przekroczeniu wartości granicznej z wyjścia przesyłany jest sygnał na wejście mikrokontrolera. Z powodu wysokiej ceny zastosowano tylko jeden czujnik tego rodzaju. Do wykrywania zgięcia kciuka wykorzystano mały przycisk.

    Radiotronix Transceiver (Wi.232FHSS-25-R)

    Jako moduł radiowy autorzy zastosowali produkt firmy Radiotronix . Wysyła on dane z prędkością 57600 bps w jednym z kanałów pasma częstotliwości 902-928 MHz . Pozwala to na wysłanie całego bloku instrukcji klawiatury i myszy bez zauważalnego opóźnienia. Moduł posiada domyślnie załączoną funkcję CSMA, która początkowo troszkę spowalniała transmisję, ale po jej wyłączeniu wszystko pracuje znakomicie.

    Stacja bazowa

    Stacja bazowa składa się z mikrokontrolera obsługującego odbiornik, mikrokontrolera symulującego programowo port USB oraz moduł odbiornika Radiotronix. Porty mikrokontrolera odbiorczego zostały bezpośrednio połączone z mikrokontrolerem obsługującym USB. W celu osiągnięcia na liniach transmisyjnych USB napięcia 3,3V, które znajduje się w zakresie obwodu USB komputera, zastosowano dodatkowe diody zenera na napięcie 3,6V. Rezystory 75Ω odpowiadają za ograniczenie prądu a rezystor pull-up 1.5kΩ, dostosowuje obwód, aby komputer wykrywał, że urządzenie obsługuje niską prędkość transmisji.
    Bezprzewodowy system kontroli klawiatury/myszy gestami
    Konstrukcja

    Kontroler lewej dłoni został zmontowany na małej płytce prototypowej i zamontowany na rękawicy ogrodowej przy pomocy taśmy izolacyjnej. Starano się maksymalnie jak to tylko możliwe odizolować układy elektroniczne i elektrody, aby nie stykały się ze skórą użytkownika. Kontroler prawej dłoni to rękawica to podnoszenia ciężarów czujnikiem zgięcia, przyciskami oraz sensorem 5 osi swobody przymocowanymi do niej taśmą izolacyjną. Nie jest to najwygodniejsze rozwiązanie, ale autorzy są pewni, że docelowy produkt ulegnie minimalizacji. Obudowę stacji bazowej stanowi tekturowe pudełko.

    Oprogramowanie

    Mikrokontroler lewej dłoni

    Na początku programu obliczanych jest kilka wartości domyślnych dla odczytów osi X oraz osi Z, służących ustaleniu jednej z czterech pozycji dłoni. Zostały one zmierzone empirycznie przy pomocy woltomierza w laboratorium i podane, jako stałe na początku kodu źródłowego. Wartości zmierzonego napięcia dla każdej pozycji są dzielone zmiennoprzecinkowo i mnożone przez 255 przed zapisaniem ich, jako wartości 8-bitowe. Obliczone wartości są tymi, które normalnie „przychodzą” na przetwornik ADC w jednej z czterech zdefiniowanych pozycji dłoni.

    Następnie w głównej pętli programu, ustalany jest stan wychylenia poprzez odczyt 8-bitowej wartości z przetwornika ADC każdego czujnika i porównywaniu jej do wstępnie obliczonej wartości ( niewielkim marginesem błędu). Użytkownik ma również możliwość redefinicji docelowej pozycji dłoni poprzez wciśnięcie jednego z przycisków podłączonych do portu A. Działanie takie powoduje zamianę wartości docelowej, do której będzie porównywany aktualnie zmierzony stan.

    Na koniec skanowane są piny portów B i C, które są fizycznie połączone z elektrodami kontaktowymi, aby określić czy któraś z nich została aktualnie dotknięta.
    Port D został połączony przewodami z portem C mikrokontrolera kontrolującego prawą dłoń. Poprzez to połączenie przekazywany jest aktualny stan lewego kontrolera. Przez 4 wyższe bity jest przekazywane położenie ręki a przez 4 niższe stan aktywnych przycisków.

    W programie wykorzystano również Timer0 w trybie CTC, oraz pin PB3, jako generator fali prostokątnej, dla buzzera. Częstotliwości dostosowano w taki sposób, aby odpowiadały częstotliwościom strun gitarowych D, G, B, oraz E (częstotliwości odpowiednio 293.66Hz, 392Hz, 493.88Hz, 659.29Hz). Sygnalizują one odpowiednią pozycję dłoni. Cztery częstotliwości z o jeden wyższej oktawy (podwojone częstotliwości) sygnalizują dotkniecie odpowiedniego kontaktu.

    Mikrokontroler prawej dłoni

    Część kodu dotycząca transmisji radiowej została zaczerpnięta z przykładów umieszczonych na stronie SciencePRog. Mikrokontroler prawego kontrolera rozpoczyna pracę czekając aż użytkownik naciśnie duży czerwony przycisk startowy. Po jego naciśnięciu sprawdzane są akcelerometry a następnie MCU wysyła sygnał inicjalizacyjny do mikrokontrolera stacji bazowej i wchodzi do głównej pętli while. Tutaj sprawdzany jest stan pozycji dłoni oraz stan kontaktów przesłany z lewej dłoni. Z odebranych danych poprzez porównanie z tabelą, uzyskiwany jest konkretny kod przycisku klawiatury. W kolejnym kroku MCU sprawdza, w której pozycji znajduje się kontroler prawej dłoni, aby określić dalsze działanie.

    Jeżeli dłoń jest w pozycji „pistolet”, poprzez przetwornik ADC odczytywane są osie X oraz Z. Decydują one o aktualnej pozycji kursora. Ustawiono niewielki próg, wartości, która musi zostać osiągnięta dla przesunięcia kursora, aby uniknąć ruchów spowodowanych szumem czujnika. Czułość ruchu poziomego i pionowego może być osobno regulowana poprzez potencjometry. Potencjometry ustawiają wartość odniesienia analogowego pomiędzy 3,3V a masą. Środkowe wyjście potencjometru podłączone jest do przetwornika ADC, odczytującego wartości czujnika 5 stopni swobody. Dodatkowo użyto pewnej funkcja wygładzania dla każdej osi, aby generować stopniowe przyspieszanie ruchu kursora. Umożliwiając tym samym precyzyjne wybieranie miejsca przesunięcia kursora przy jednoczesnym szybkim ruchu według poniższego wzoru:
    Bezprzewodowy system kontroli klawiatury/myszy gestami
    Następnie skanowany jest stan elektrody dotykowej pod kciukiem oraz czujnika zgięcia poprzez wyjście wzmacniacza różnicowego, aby wykryć kliknięcie. Proszę zauważyć, że nie są przetwarzane jednoczesne kliknięcia prawego i lewego przycisku. Lewy przycisk myszy ma zawsze wyższy priorytet. Program posiada funkcjonalność, która nie pozwala przesunąć się kursorowi przez 329 milisekund po kliknięciu (odliczane przez Timer1). Ma to na celu pomóc uzyskać podwójne kliknięcie, (kiedy jak wiadomo wymagana jest stabilność pozycji kursora) i wyeliminować niestabilność ręki.

    Jeżeli prawa dłoń znajduje się w pozycji „pięść dół”, zablokowany jest ruch kursora oraz jakiekolwiek kliknięcia prawym lub lewym klawiszem. Zamiast tego sterownik zachowuje się jak scroll myszy. Sterowanie odbywa się z pomocą akcelerometru osi X. Problemem jest tutaj gubienie nastaw akcelerometru, kiedy nadgarstek przekręci się 90o. Aby temu zapobiec za każdym razem, kiedy dłoń wróci do tego stanu z innej pozycji wartości ładowane są od początku.

    Kontroler w pozycji „pięść w górę”, również nie umożliwia sterowania kursorem oraz kliknięciami. Jest ona przeznaczona do sygnalizacji naciśnięcia klawiszy ctrl lub alt.

    Wreszcie kontroler w pozycji „ręka karateki”, sygnalizuje tylko o naciśnięciu klawisza Shift. Również tutaj zablokowane są wszelkie ruchy myszą i kliknięcia.
    Po takim sprawdzeniu mikrokontroler ma ustalone, które wejścia myszy i klawiatury mają być przesłane do stacji bazowej. Wysyłanych jest 6 bajtów:
    Bezprzewodowy system kontroli klawiatury/myszy gestami
    Mamy tutaj bajt ADDR o wartości 0x44, który zawsze jest sprawdzany przez odbiornik, zanim zostanie sprawdzona jakakolwiek inna wartość. Dwa najbardziej znaczące bity baju KEYS, przechowują stan lewego/prawego przycisku myszy. Jeżeli oba bity są ustawione na wartość 1 (co nigdy nie może wystąpić naturalnie), niższe bity przechowują ustawienia odnośnie funkcjonalności scroll. Dla bajtu MODIFERS wykorzystywane są jedynie 3 najbardziej znaczące bity (informujące o klawiszach carl, alt i shift).

    Na prawym kontrolerze znajduje się dodatkowo przełącznik załączający tryb gry. Aktywuje on zamrożenie funkcji kursora myszy i pozwala, aby były do kontroli ruchu były przesyłane stany czterech klawiszy (np. d c v x) bez zależności z nachyleniem ręki. Umożliwia to łatwiejsze kontrolowanie ruchu w grach typu typu FPS.

    Mikrokontroler stacji odbiorczej

    Również tutaj cześć kodu transmisji zaczerpnięto ze strony ScienceProg. Program uruchamia system przerwań ISR, kiedy poprzez UART zostanie przekazany bit synchronizacji. Następnie mikrokontroler przechodzi do stanu detekcji adresu, klawiszy klawiatury, przycisku myszy, pozycji poziomej/pionowej oraz klawiszy pomocniczych. Jeżeli adres jest zgodny z założonym, aktualizowane są wartości portów A, B, C oraz 3 bitów portu D, aby następnie przesłać je do mikrokontrolera obsługującego USB. Port A przesyła klawisze klawiatury oraz przyciski myszy, port B położenie pionowe kursora, port C położenie pionowe kursora a 3 bity portu D klawisze pomocnicze.

    Podczas testów okazało się, że po włączeniu sterownika mikrokontroler podłączony do portu komputera, przesyła jakieś błędne wartości początkowe. Nie wiadomo do końca, dlaczego tak się dzieje, ale nie wpływa to w żaden sposób na funkcjonalność.

    Mikrokontroler do obsługi USB

    Kod do obsługi portu USB został zapożyczony ze strony obdev. Skopiowano przykładowy kod obsługi myszy/klawiatury poprzez port USB. W zamian za dane urządzenia HID, wstawiane są dane odebrane z mikrokontrolera stacji bazowej. Ustalono, że ten sam przycisk (ta sama litera) nie może być wysłany do komputera częściej niż co 262 milisekundy. Ma to na celu eliminację wielokrotnego niepotrzebnego wprowadzenia tych samach przycisków. Dla spacji i backspace zredukowano ten czas do 131 milisekund, aby umożliwić szybsze wprowadzanie tekstu.

    Podsumowanie

    Gotowy produkt, choć może trochę nieporęczny spisuje się bardzo dobrze. Jego precyzyjność jest na tyle dobra, że pozwala na bezproblemowe zaznaczanie tekstu oraz przenoszenie małych fragmentów rysunku/tekstu. Wszelkie przełączenia pomiędzy pozycjami dłoni również działają bez zarzutów.

    Na swojej stronie autorzy podają dokładną listę elementów.
    Bezprzewodowy system kontroli klawiatury/myszy gestami
    Bezprzewodowy system kontroli klawiatury/myszy gestami
    Bezprzewodowy system kontroli klawiatury/myszy gestami


    Link


    Źródło:
    https://courses.cit.cornell.edu/ee476/FinalProjects/s2010/ssc88_egl27/#CodeListing


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • Sklep HeluKabel
  • #2 21 Sie 2013 17:33
    30402
    Użytkownik usunął konto  
  • Sklep HeluKabel
  • #3 21 Sie 2013 19:59
    szymon122
    Poziom 37  

    Saabotaz napisał:
    Czujnik zagięcia palców robiło się na światłowodzie

    Możesz coś więcej o tym powiedzieć?

  • #4 21 Sie 2013 20:52
    30402
    Użytkownik usunął konto  
  • #5 21 Sie 2013 20:56
    szymon122
    Poziom 37  

    Jakoś nie specjalnie wyobrażam sobie mierzenie takiej małej różnicy prędkości :D Po za tym gdzie ty wyczytałeś o jakiś potencjometrach? Oraz światłowody nie lubią być zginane.

  • #6 21 Sie 2013 21:08
    30402
    Użytkownik usunął konto  
  • #7 23 Sie 2013 08:27
    olinek2
    Poziom 23  

    Saabotaz, co Ty za bajki wypisujesz, policz sobie jaka jest droga optyczna światła w takim krótkim odcinku światłowodu. I jak małe zmiany by to były.

    Cała zabawa opierała się na zmianie współczynnika załamania światła zależnie od naprężeń, co można prosto zdetekować przy pomocy zmian amplitudy na detektorze. Część światła po prostu wyciekała do płaszcza.

  • #8 23 Sie 2013 09:30
    Loker
    Poziom 38  

    Da się zmierzyć zmianę drogi optycznej, ale nie metodą pomiaru czasu ;) Odnośnie użycia światłowodów w takiej "rękawicy" - polecam pogooglać "czujniki światłowodowe".

  • #9 23 Sie 2013 12:53
    30402
    Użytkownik usunął konto