
1. O czym opowiem, już po raz drugi.
1.5 roku temu prezentowałem na forum wykorzystanie płytki eXtrino XL do realizacji joysticka USB.
https://www.elektroda.pl/rtvforum/topic3082868.html
Rozwiązanie miało to jednak podstawową wadę - rozmiar. Pierwszy pomysł zakładał wykonanie własnej płytki z podobnym procesorem, jednak ostatecznie znalazłem na zagranicznym serwisie aukcyjnym STM32F103C8T6 ARM STM32 Minimum System Development Board.

( Źródło: http://artofcircuits.com/ )
2. Sprzęt elektroniczny
Zastosowany moduł z mikrokontrolerem STM32 można nabyć za około 2-3 USD z przesyłką, czyli około 8-12 zł.
W tej cenie otrzymujemy miniaturową płytkę o rozmiarach 23x54mm, wyposażoną w złącze micro-USB i procesor ze sprzętowym interfejsem USB. Na pokładzie znajduje się także stabilizator i inne elementy konieczne do pracy urządzenia.
W sumie dostępnych mamy 20 wejść cyfrowych i 10 analogowych/cyfrowych.
3. Oprogramowanie
Oprogramowanie powstało przy użyciu bibliotek STM32 Cube HAL oraz oprogramowania STM32CubeMX. Środowisko, jakiego użyto, to darmowe SW4STM32.
Ostatecznie zdecydowałem się (aby nie stwarzać konfliktów sprzętowych) na wykorzystanie 17 wejść cyfrowych na przyciski, oraz 10 wejść analogowych.
1 wyprowadzenie użyto do sygnalizacji pracy urządzenia za pomocą migania diody zamontowanej na płytce, a 2 kolejne podłączone są do oscylatora 32kHz i niewykorzystane.
Po stronie USB na komputerze urządzenie przedstawia się jako 2 joysticki. Na pierwszym z nich zmapowano 7 osi analogowych i wszystkie przyciski, na drugim - pozostałe 3 osie analogowe.
4. Część mechaniczna

Ta część u mnie się nie zmieniła - jako podstawę wykorzystano joystick Logitech Wingman Warior. Tym razem jednak cała elektronika została zamontowana w środku urządzenia. Na zewnątrz wyprowadzono złącze do podłączenia wspomnianego w dawnym projekcie joysticka do widoku, a także podpiąłem pedały z kierownicy.
Dzięki zastosowaniu obliczeń:
1. Różnica w położeniu obu pedałów kontroluje położenie steru kierunku
2. Minimalne wciśnięcie (to które jest mniejsze) pedału kontroluje siłę hamowania
3. Różnica w położeniu obu pedałów kontroluję symetrię hamowania
Dodatkowo także obsługuję enkoder, dzięki czemu mogę łatwo kontrolować parametry autopilota.
Takie "rarytasy" zawdzięczam oprogramowaniu spersonalizowanemu pod własne potrzeby.
5. Programowanie
Urządzenie można zaprogramować za pomocą programatora z interfejsem SWD, a także za pomocą fabrycznego bootloadera na interfejsie UART. Wystarczy więc posiadanie dostępu do interfejsu szeregowego lub nawet prawie dowolnego Arduino.
6. Wady i zalety w porównaniu z innym sprzętem
Mój sprzęt (a raczej oprogramowanie) można porównywać z podobnymi rozwiązaniami:
1. MJOY8, MJOY16
2. Arduino Leonardo
3. eXtrino XL
Kategoria | STM-JOY | MJOY | Arduino Leonardo | eXtrino XL |
Cena | 8-12 zł | ok. 40 zł | Klon ok. 40 zł | 115 zł |
Ilość kanałów analogowych | 10 | 8 | 6-8 | 8-12 |
Interfejs USB | Sprzętowy | Programowy | Sprzętowy | Sprzętowy |
Rozmiary | niewielkie | w zależności od konstrukcji | średnie | duże |
Programator | Dowolny interfejs UART-TTL | Programator ISP | brak | brak |
Jeśli jeszcze zauważycie jakieś kategorie warte do dodania - uzupełnię tabelę.
7. udostępnienie
Kod oraz instrukcje jak wykorzystać moje oprogramowanie na tym urządzeniu przedstawiam na repozytorium.
https://gitlab.com/piotrva/STM-JOY
Jeśli zainteresowanie projektem będzie wystarczające być może uzupełnię go o wersje obsługujące przyciski w połączeniu matrycowym (nawet 100 przycisków), enkodery, dodatkowe kanały (można podpiąć po SPI lub I2C dodatkowe "karty rozszerzeń").
Zapraszam do (merytorycznych) komentarzy i zadawania pytań!
Cool? Ranking DIY