
1. O czym opowiem?
A więc czas zacząć opowieść od początku. Jak zapewne wielu tak i ja marzę o lataniu samolotami nie tylko jako pasażer, ale także w pierwszym rzędzie, czyli jako pilot. Rzecz jasna marzenie takie jest dosyć kosztowne do realizacji (kurs pilotażu kosztuje na dzień dzisiejszy około 20 000 zł, potem dochodzi pożyczanie samolotu, jeśli chcemy polatać). Na szczęście namiastkę takiej przyjemności możemy sprawić sobie w domowym zaciszu. Rzecz jasna nijak umywa się to prawdziwego wzbicia się w przestworza, ale zawsze można choć popróbować swoich sił w startach i przede wszystkim bezpiecznych lądowaniach.
2. Do dzieła, czyli oprogramowanie
Rzecz jasna pierwszą rzeczą, którą musimy posiadać jest komputer (o odpowiednio dobrych parametrach) oraz oprogramowanie symulacyjne. Osobiście kiedyś próbowałem swoich sił z Microsoft Flight Simulator 2002, ale sterując za pomocą klawiatury i myszki zabawa szybko stała się niewygodna. Teraz, za namową kolegi zakupiłem w platformie Steam Microsoft Flight Simulator X: Steam Edition. Zakup, jeśli trafimy na rożnego rodzaju opcje typu bundle, kosztować może około 40 zł (10 USD) i dodatkowo często dostaniemy jakieś inne gry. Normalnie w ofercie Steam symulator kosztuje ponad 100 zł (25 EUR)

Dodatkowo wykorzystywać będę dodatkowe paczki scenerii z firmy Drzewiecki Design ( http://www.drzewiecki-design.net/ ) - na screenie na razie wersja demo lotniska Kraków-Balice.

3. Czas na start - czyli sterujemy samolotem
Jak wcześniej wspomniałem, niezależnie od wersji symulatora sterowanie samolotem tylko klawiaturą i myszką jest bardzo uciążliwe, a na pewno niewygodne i całkowicie nierealistyczne. Dlatego jedynym rozwiązaniem, które sprawi, że symulacja może sprawiać przyjemność jest posiadanie joysticka lub wolantu. Oczywiście sprzęt taki można kupić, w zależności od jakości, już za kilkadziesiąt złotych. Ceny pół-profesjonalnych kontrolerów sięgają czasem kilku tysięcy dolarów.
4. Narodziny pomysłu
Pomysł na projekt narodził się około roku temu, wtedy to na pewnym serwisie aukcyjnym wylicytowałem za symboliczną złotówkę stary joystick Logitech Wingman Warrior.

Posiadał on oryginalnie interfejs RS232 + Gameport i był w pełni sprawny mechanicznie. Joystick posiada 3 osie (x, y, przepustnica), 4 niezależne przyciski, 4 przyciski (hat switch - to czarne na szczycie joysticka) na drabince rezystancyjnej oraz przełącznik obrotowy (kręcący się 360+) wyposażony w enkoder optyczny.
Pierwotnie chciałem go wykorzystać do sterowania ramieniem robota, jednak wtedy w ręce wpadły mi płytki z FS2002 i pomyślałem - a może poszukać jakiejś metody na podpięci tego sprzętu do komputera przez USB?
Pierwsze rzecz jasna trafiłem na projekt mJoy (mirror projektu: http://www.mictronics.de/projects/avr-usb-joystick/ ) , jednak z lenistwa nie chciało mi się montować układu. Dalej moje poszukiwania skierowały się na wszechobecne Arduino, a konkretnie Arduino Leonardo, którego miałem kilka sztuk po prototypowaniu - bazujące na układzie ATMega32u4 ze sprzętowym interfejsem USB. To był pierwszy strzał w dziesiątkę. W sieci znalazłem nawet gotowy projekt z opisem jak dokonać koniecznych zmian, aby Leonardo stało się joystickiem. (projekt: http://www.imaginaryindustries.com/blog/?p=80 ).
Rozwiązanie działało, jednakże osiągnięcie celu było tu zdecydowanie zbyt proste, zresztą nieco irytowało mnie występujące od czasu do czasu zawieszenie się komunikacji.
5. Projekt - Joystick z wykorzystaniem eXtrino XL

Akurat w szafce miałem zakupioną wcześniej płytkę eXtrino XL produkcji Leon Instruments, z którą nie miałem wcześniej czasu się zaprzyjaźnić (opis: http://www.leon-instruments.pl/2014/05/extrino-xl.html ). Jako iż bazuje ona na mikrokontrolerze ATXMega128A3U, także posiadającym interfejs USB, pomyślałem, że będzie to dobra okazja do przetestowania płytki a także rozwinięcia pomysłu.
Oprogramowanie powstało w całości w Atmel Studio 6.2 z wykorzystaniem Atmel Software Framework (także pierwszy raz korzystałem z tych bibliotek podczas tworzenia projektu).
Kody źródłowe udostępniam repozytorium: https://bitbucket.org/piotrva/extrino-xl-joystick
Tworząc je wykorzystałem analizę kodu z przytoczonego projektu opartego na Leonardo (zaczerpnąłem działający deskryptor, dostosowując go jedynie do pracy samodzielnej, a nie jako urządzenie composite). Przy uruchomieniu interfejsu USB korzystałem też z informacji ze strony http://www.avrfreaks.net/forum/custom-generic-usb-hid-device-not-reconized - pierwsze uruchomienie mojego urządzenia w celach testu odbyło się jako myszka USB - potem bez reinstalacji sterowników lub zmiany PID pojawiało się w systemie jako niedziałająca mysz USB HID.
Co do oprogramowania chyba nic więcej nie muszę dodawać - ogólnie praca z ASF jest dosyć przyjemna, aczkolwiek czasem brakuje dobrej dokumentacji funkcji bibliotecznych i szybciej można coś uruchomić korzystając bezpośrednio z rejestrów procesora.
Ostatecznie sprzęt został też nieco zmodyfikowany. W joysticku podczas próby rozpracowania enkodera optycznego najprawdopodobniej go uszkodziłem, stąd też postanowiłem usunąć oryginalne elementy optoelektroniczne i wstawić w ich miejsce odpowiedniki wymontowane z myszki. Po ich odpowiednim pozycjonowaniu (co zajęło kilkadziesiąt minut) udało się odebrać prawidłowy sygnał.
Z joysticka usunąłem całą elektronikę i wszystkie sygnały wyprowadziłem widoczną taśmą na zewnątrz. Dodatkowo w środku zainstalowałem rezystory uzupełniające drabinkę od hat switcha oraz zapewniające prawidłową pracę enkodera optycznego. Jego wyprowadzenia zostały podpięte do sprzętowego interfejsu do enkoderów w procesorze XMega.
Wnętrzem nie ma się czym chwalić - ot kilka kabli przylutowanych do płytki uniwersalnej i na niej gniazdko do wpięcia tej taśmy.
Przy okazji zauważyłem, że przez rok przechowywania coś musiało spaść na joystick i odłamał się mały element od odciągu do pozycji centralnej - na szczęście udało mi się z pomocą wiertarki Proxxon, kawałka metalowego pręcika i kropelki zamontować i wzmocnić wyłamany bolec.
Ponadto gdzieś plątał się miniaturowy joystick z 1 przyciskiem - takowy też został podpięty.

Po drugiej stronie kabli na uniwersalnej płytce Arduino wykonałęm trwały adapter łączący wszystkie sygnały z procesorem.
Ostatecznie mam zatem 9 przycisków, 5 osi. Przełącznik obrotowy obecnie wykorzystuję też jako 2 przyciski - do zwiększania i zmniejszania kierunku w autopilocie.
Wykorzystany deskryptor wspiera w sumie 7 osi, 32 przyciski i 2 przełączniki widoku (hat switch), więc jeszcze można podpiąć dodatkowe elementy.
6. Co dalej?
Po pierwsze można wykorzystać kolejnych 8 przycisków z płytki eXtrino, dopiąć dodatkowe potencjometry (są jeszcze wolne kanały ADC dostępne na złączach eXtrino).
Co ciekawe delikatnie modyfikując i powielając deskryptor można na jednym urządzeniu fizycznym uzyskać widoczne w systemie kilka joysticków (testowałem przy 6). Także sumarycznie, stosując np. zewnętrzne ADC i ekspandery można osiągnąć co najmniej (więcej nie testowałem) 6*7 kanałów analogowych i 32*6 przycisków i 12 przełączników widoku, gdyż Flight Simulator współpracuje bez problemu z wieloma kontrolerami.
W najbliższym planie w związku z tym mam wykonanie (z pomocą kolegi i jego drukarki 3D) dodatkowych manetek (klapy, hamulce powietrzne, rozdzielne kanały przepustnicy) a także budowę pedałów do steru kierunku i hamulców asymetrycznych.
7. Konkluzja
Przede wszystkim czekam na komentarze i wartościowe uwagi.
Projekt może nie stanowi odkrycia, nie wykonałem też ani kawałka projektu elektroniki - w zasadzie nic odkrywczego.
Sam jednak w czasie wykonywania sprawdziłem w praktyce swoją wiedzę na temat USB (poszerzając ją), przetestowałem ASF i płytkę z eXtrino, a także zbudowałem z części posiadanych działający kontroler do symulatora, z możliwością jego łatwej rozbudowy.
Całość zajęła po skomasowaniu około 5-6 godzin pracy. Koszty może oszacować każdy sam - na pewno gdyby nie posiadanie wszystkich części tańszy okazałby się zakup gotowego joysticka, jednak nie byłoby na pewno tyle satysfakcji, a także możliwości tak łatwej rozbudowy o kolejne elementy sterujące.
Przede wszystkim jednak miarą przydatności jest frajda z jak dotąd odbytych 40 godzin wirtualnego lotu i 120 udanych lądowań na tym sprzęcie (nie liczę Arduino, z którego korzystałem dosyć rzadko przez ubiegły rok).
Pozdrawiam
Piotrek
Cool? Ranking DIY