Kontroler gier USB do ćwiczeń: 8 kroków (ze zdjęciami)
Kontroler gier USB do ćwiczeń: 8 kroków (ze zdjęciami)
Anonim
Kontroler gier USB do ćwiczeń
Kontroler gier USB do ćwiczeń
Kontroler gier USB do ćwiczeń
Kontroler gier USB do ćwiczeń
Kontroler gier USB do ćwiczeń
Kontroler gier USB do ćwiczeń
Kontroler gier USB do ćwiczeń
Kontroler gier USB do ćwiczeń

Aby zachęcić do ćwiczeń dla siebie i rodziny, stworzyłem adapter, który emuluje standardowy adapter kontrolera gier USB, ale kontroluje prędkość ruchu w grze poprzez pedałowanie na maszynie eliptycznej lub rowerze treningowym. Szczególnie dobrze sprawdza się w grach wyścigowych. To z pewnością motywuje do szybkiego pedałowania podczas grania w gry wyścigowe.

Głównym sprzętem jest płytka rozwojowa STM32F103C8 "czarna pigułka" za 2 USD z rdzeniem stm32duino Arduino i biblioteką USB HID, którą opracowałem w oparciu o widelec rdzenia libarra111. STM32F1 jest szybki i tani oraz obsługuje USB o pełnej prędkości, dzięki czemu idealnie nadaje się do projektu.

Aby użyć, musisz podłączyć czujnik obrotu na rowerze eliptycznym lub treningowym (jeśli czujnik obrotu działa inaczej niż ten na naszych maszynach – około 3 V, poziom aktywny – może być konieczna modyfikacja obwodu i/lub kodu).

Prędkość obrotu maszyny eliptycznej/roweru steruje suwakiem kontrolera. Dodatkowo do adaptera podłącza się standardowy kontroler Wii Nunchuck lub Gamecube do poruszania joystickiem, przyciskami itp. Istnieje wiele różnych trybów sterowania. Na przykład mniejsze dzieci mogą potrzebować trochę zwiększenia prędkości, a niektóre gry mogą używać innego schematu sterowania. W oprogramowaniu istnieje wiele wbudowanych schematów sterowania, a inne można łatwo dodać do kodu. Urządzenie może emulować kontroler gier USB, klawiaturę, mysz, kontroler Xbox 360 lub kombinację pierwszych trzech.

Kierunek ruchu nie jest obecnie wykrywany: do przełączania między ruchem do przodu i do tyłu adapter ma przełącznik dwustabilny. (Alternatywnie można użyć czujnika magnetycznego z efektem Halla, takiego jak to urządzenie, i zmienić obwód i oprogramowanie.)

Adapter działa jak standardowy kontroler USB, dzięki czemu można go używać z systemami Windows, Linux, OS X, Android itp.

Jako bonus, adapter posiada wszystkie funkcje tego projektu, działając jako w pełni funkcjonalny adapter Gamecube, umożliwiając korzystanie z kontrolerów Gamecube na komputerze, w tym sterowanie grami za pomocą mat tanecznych Dance Dance Revolution zgodnych z Gamecube/Wii.

Koszt to mniej niż 10 USD plus obudowa (mam projekt do druku 3D), przewody i lut. Części:

  • Płytka rozwojowa "Black Pill" stm32f103c8 (2 USD na Aliexpress)
  • Gniazdo Gamecube (1,60 USD na Aliexpress, na przedłużacz Gamecube, który można wyciąć)
  • Płytka zaciskowa Nunchuck (0,51 USD na Aliexpress; szukaj Wiichuck)
  • Mały dwupozycyjny przełącznik (poniżej 1 USD na Aliexpress)
  • Twój wybór dwużyłowych złączy męskich i żeńskich (około 1 USD na Aliexpress, jeśli wybierzesz złącza 5,5 mm z baryłką mocy); potrzebujesz jednego złącza żeńskiego na maszynę do ćwiczeń
  • 2 przełączniki dotykowe (poniżej 0,50 USD na Aliexpress)
  • 4 czerwone diody LED (poniżej 0,50 USD na Aliexpress; można też użyć małego ekranu LCD Nokia)
  • kondensatory: elektrolityczne 10uF i opcjonalnie 100nF
  • rezystory: 1 x 100K, 2 x 10K, 1 x 1K, 4 x 220ohm
  • mała płyta proto (poniżej 1 USD na Aliexpress).

Nunchuck jest dobry do obsługi jedną ręką na maszynie eliptycznej. Na rowerze treningowym możesz użyć dwuręcznego adaptera, takiego jak Gamecube. Jeśli chcesz używać tylko jednej z tych dwóch opcji sterowania, możesz użyć mniejszej liczby połączeń.

Potrzebujesz również komputera, lutownicy i multimetru. Będziesz także potrzebował mostka UART-to-USB (użyłem Arduino Mega, który miałem do innego projektu; lub możesz kupić moduł CP2102 na Aliexpress za dolara), aby zainstalować bootloader na swojej czarnej pigułce, aby używać go z środowiska Arduino, albo możesz wydać kilka dolarów więcej i zdobyć płytkę rozwojową RobotDyn z fabrycznie załadowanym bootloaderem Arduino.

Dodam, że biorę to do konkursu Koła, ponieważ jest to sposób na połączenie wirtualnych kół w grach wyścigowych na komputerze z fizycznymi kołami rowerów treningowych i orbitrek.

Krok 1: Dotknij czujnika obrotu

Dotknij czujnika obrotu
Dotknij czujnika obrotu
Dotknij czujnika obrotu
Dotknij czujnika obrotu
Dotknij czujnika obrotu
Dotknij czujnika obrotu
Dotknij czujnika obrotu
Dotknij czujnika obrotu

Obie maszyny do ćwiczeń, które zhakowałem, mają konsolę wyświetlającą prędkość. Pomiędzy konsolą a korpusem maszyny biegną przewody. Musisz podłączyć się do tych przewodów, aby uzyskać dostęp do danych. Jeśli twoje maszyny są takie jak moje, konsolę można usunąć i znajdziesz tam kabel taśmowy (eliptyczny) lub dwa przewody (rower). Skorzystałem z nich, odłączając przewody i łącząc je indywidualnymi zworami męskimi i żeńskimi, do których mogłem się podłączyć.

Użyj metody prób i błędów oraz multimetru, aby zidentyfikować parę przewodów, pomiędzy którymi występuje impuls napięcia podczas pełnego obrotu.

Zasadniczo ćwiczenie jest takie: podłącz multimetr do pary przewodów (uważając, aby niczego nie zwierać) przy pracującej maszynie i bardzo powoli obracaj pedałami. W obu naszych maszynach znajduje się para przewodów, między którymi normalnie napięcie wynosi około +3V, ale podczas krótkiej części obrotu spada do masy: jest to układ aktywny-niski. Może się okazać, że twoja maszyna ma aktywny wysoki schemat, w którym większość obrotów jest uziemiona, a impuls jest dodatni, a następnie będziesz musiał edytować szkic Arduino.

Jeśli uważasz, że jest jakaś szansa, że którykolwiek z przewodów do konsoli, z którą masz do czynienia, jest sieciowym AC, zalecam zatrzymanie, chyba że naprawdę wiesz, co robisz. Na szczęście nasz rower treningowy jest zasilany bateryjnie, a nasze maszyny eliptyczne są podłączane do brodawki ściennej, więc wokół konsoli jest tylko około 12 V DC.

W przypadku roweru treningowego było to naprawdę łatwe. Były tylko cztery przewody. Dwa dotyczyły czujnika tętna, a dwa czujnika obrotu.

Maszyna eliptyczna miała dużo więcej drutów, więc wymagało to więcej pracy. Oto metoda brutalnej siły. Podłącz multimetr do pary przewodów. Powoli wykonaj pełny obrót (lub trochę więcej na wszelki wypadek) na pedałach i zobacz, czy nie ma zapadu napięcia lub skoku. Jeśli tak, to masz. Jeśli nie, powtórz dla kolejnej pary. To dużo prób i błędów: dla 13 przewodów to 78 obrotów.

Oto sztuczka, która może pomóc przyspieszyć wyszukiwanie właściwej pary przewodów. Możesz mieć nadzieję, że twoja maszyna, podobnie jak moja, ma zwykle wysokie napięcie detektora przy niskim impulsie. Jeśli tak, to jeśli zostawisz pedały w losowym miejscu, masz dużą szansę, że dwa przewody detektora mają między sobą około +3V lub +5V. Tak więc test obrotów pedału wykonuj tylko dla tych par przewodów, które mają między sobą +3V lub +5V.

Kolejna sztuczka. Możesz być w stanie określić, gdzie w rotacji pedału uruchamia się czujnik obrotu. Na przykład urządzenie może wtedy migać coś na ekranie, aktualizować wyświetlanie prędkości, aktywować się z trybu uśpienia lub emitować sygnał dźwiękowy. Jeśli tak, odsuń pedały o około 1/3 obrotu, a następnie poszukaj par przewodów, które mają między sobą napięcie 3-5 V, i przetestuj je, przesuwając pedały do pozycji, w której zadziała czujnik.

Jeśli potrafisz zidentyfikować przewód uziemiający, możesz znacznie przyspieszyć proces, ponieważ wtedy wystarczy przejść między uziemieniem a każdym nieznanym przewodem. Co dziwne, na naszej maszynie eliptycznej masa zasilacza nie wydawała się taka sama, jak masa detektora obrotu.

Po zidentyfikowaniu przewodów zanotuj je. Upewnij się, że zanotowałeś:

  • wysoki poziom napięcia: jeśli jest większy niż około 3,3 V, ale nie więcej niż 5 V, będziesz chciał zmienić obwód, aby używał pinu A9 zamiast A7 do wykrywania obrotów, ponieważ pin A9 ma tolerancję 5 V, a A7 nie, i edytuj jedna linia w moim szkicu; jeśli jest więcej niż 5 V, musisz dodać dzielnik napięcia
  • niezależnie od tego, czy impuls wykrywania obrotu jest niski, czy wysoki: jeśli impuls jest wysoki, musisz edytować linię w moim szkicu Arduino.

Jeśli posiadasz oscyloskop, a urządzenie do ćwiczeń jest zasilane bateryjnie, zamiast multimetru możesz również użyć oscyloskopu. (Jeśli urządzenie do ćwiczeń jest podłączone do prądu przemiennego, podobnie jak oscyloskop, musisz wiedzieć o pętlach masy i jak ich unikać. Uważaj!)

Krok 2: Przygotuj tablicę rozwojową

Przygotuj Radę Rozwoju
Przygotuj Radę Rozwoju
Przygotuj Radę Rozwoju
Przygotuj Radę Rozwoju
Przygotuj Radę Rozwoju
Przygotuj Radę Rozwoju

Przylutuj sześć środkowych zworek do swojej czarnej pigułki.

Jeśli masz płytę RobotDyn z bootloaderem Arduino, podłącz B0- i B1- do środkowych pinów i gotowe.

W przeciwnym razie musisz teraz zainstalować bootloader. Potrzebujesz albo samodzielnego mostka UART na USB, albo możesz użyć do tego celu Arduino Uno lub Mega. Chociaż czarna pigułka działa na 3,3 V, piny UART są tolerancyjne na 5 V, więc nie martw się, czy twoje złącze działa na 3,3 V czy 5 V.

Jeśli masz Uno lub Mega, umieść kabel połączeniowy między RESET i GROUND. To zamienia Arduino w dedykowany mostek UART na USB, z wyjątkiem tego, że piny TX/RX są odwrotnością tego, jak zwykle są na złączu.

Pobierz plik binarny bootloadera. Chcesz generic_boot20_pb12.bin. W systemie Windows zainstaluj program Flash Loader Demonstrator ST. W systemie Linux (i może OS X, a nawet Windows, jeśli wolisz narzędzia wiersza poleceń), użyj tego skryptu Pythona, ale moje instrukcje będą dotyczyć systemu Windows.

Wykonaj następujące połączenia:

  • PA9 do mostka UART RX („TX”, jeśli używasz sztuczki Arduino)
  • PA10 do mostka UART TX ("RX", jeśli używasz sztuczki Arduino)
  • Uziemienie mostka G do UART

Lubię używać końcówek sond logicznych do wykonania połączeń po stronie STM32, ale możesz też po prostu wlutować niektóre przewody, które później możesz odciąć (lub odlutować, jeśli chcesz być schludny).

Podłącz mostek UART do komputera. Włącz Black Pill przez port USB (najlepiej, jeśli podłączysz go do ładowarki, a nie do komputera, ponieważ komputer prawdopodobnie będzie narzekał na nierozpoznane urządzenie USB). Uruchom program Flash Loader Demonstrator. Wybierz port COM dla swojego mostka UART. Wybierz opcję „Usuń ochronę”, jeśli jest dostępna. Wybierz wersję flash 64kb zamiast 128kb. I wgraj plik binarny bootloadera.

Wyłącz wszystko, a następnie przesuń zworkę z B0+/środek do B0-/środek. Masz teraz bootloader, którego możesz używać z Arduino IDE.

Krok 3: Przygotuj Stm32duino w Arduino IDE

Przygotuj Stm32duino w Arduino IDE
Przygotuj Stm32duino w Arduino IDE
Przygotuj Stm32duino w Arduino IDE
Przygotuj Stm32duino w Arduino IDE

Zakładam, że masz zainstalowane najnowsze Arduino IDE.

W Narzędziach | Tablice | Boards Manager, zainstaluj obsługę Arduino Zero (wystarczy umieścić Zero w wyszukiwaniu, kliknąć znaleziony wpis, a następnie zainstalować). Tak, nie pracujesz z Zero, ale to zainstaluje odpowiedni kompilator gcc.

Następnie pobierz rdzeń stm32duino. W systemie Windows zalecam pobranie pliku zip, ponieważ kiedy wyewidencjonowałem pliki (wprawdzie za pomocą svn), miałem pewne problemy z uprawnieniami do plików w katalogu narzędzi Windows, które wymagały naprawy. Umieść gałąź w Arduino/Hardware/Arduino_STM32 (będziesz więc mieć foldery takie jak Arduino/Hardware/Arduino_STM32/STM32F1 itp.) W systemie Windows zainstaluj sterowniki, uruchamiając drivers\win\install_drivers.bat.

Zainstaluj moją bibliotekę USBHID: Przejdź do szkicu | Dołącz bibliotekę | Zarządzaj bibliotekami i wyszukaj USBHID. Kliknij go i kliknij Zainstaluj.

Zainstaluj moją bibliotekę GameControllersSTM32: Przejdź do szkicu | Dołącz bibliotekę | Zarządzaj bibliotekami i szukaj GameControllers. Kliknij go i kliknij Zainstaluj.

Krok 4: Obwód

Okrążenie
Okrążenie
Okrążenie
Okrążenie
Okrążenie
Okrążenie
Okrążenie
Okrążenie

Moja konfiguracja używa czterech diod LED do wskazywania bieżącego trybu emulacji w formacie binarnym (tak, można użyć wyświetlacza LCD, ale miałem diody LED leżące wokół, kiedy to budowałem), dwa przyciski do przełączania trybu w górę i w dół (i robienia innych triki) oraz przełącznik do przełączania kierunku ruchu.

Dodatkowo jest wejście I2C z Nunchuck i złącze do kontrolera Gamecube. Jeśli chcesz obsługiwać tylko jeden z tych dwóch, możesz po prostu edytować gamecube.h w szkicu i zaoszczędzić sobie trochę lutowania.

Użyłem małej płytki prototypowej do zamontowania czterech diod LED trybu i dwóch przycisków przełączania trybu (góra i dół), a także jednego rezystora podciągającego dla danych Gamecube. Wyprowadziłem 3,3 V na płytkę prototypową, ale nie musiałem wyprowadzać do niej uziemienia, chociaż możesz, jeśli chcesz. Do zamontowania złącza Nunchuck użyłem kolejnego kawałka płyty prototypowej.

Odetnij kabel GameCube. Chcesz pracować ze stroną gniazda, do której podłączy się kontroler. Odizoluj kable do podłączenia.

Teraz wykonaj te połączenia zgodnie ze schematem obwodu:

  • Kondensator 10uF między 3,3 V a ziemią (ze stroną ujemną wszelkich elektrolitów na ziemi). To powinno być jak najbliżej chipa, więc przylutowałem go bezpośrednio na płytce rozwojowej, a nie na płycie prototypowej. Na dokładkę możesz dodać 100nF tak jak ja, ale nie jestem pewien, czy jest to potrzebne.
  • Gniazdo GameCube #2 - A6 na płycie stm32
  • Rezystor 1Kohm między gniazdem Gamecube #2 a 3,3V na płycie stm32 (lub na płycie protoboard)
  • Gniazdo GameCube #3 i #4 - uziemienie na płycie stm32
  • Gniazdo Gamecube #6 - 3.3V na płycie stm32 (lub na płycie prototypowej)
  • LED szeregowo z rezystorem 220ohm (lub większym) między A0 na płytce stm32 a 3,3V (biegun ujemny (płaski) do PA0; biegun dodatni do 3,3V)
  • Powtórz z diodą LED+rezystor między A1 i 3,3 V, A2 i 3,3 V oraz A3 i 3,3 V
  • Chwilowe przełączanie między A5 na płycie stm32 (tryb inkrementacji) i 3.3V oraz inny między A4 i 3.3V (tryb dekrementacji); ten przełącznik zwiększa numer trybu;
  • Przełącz przełącznik między A8 i 3,3 V
  • maszyna do ćwiczeń ziemia-stm32 ziemia
  • Dodatni sygnał maszyny do ćwiczeń -- tablica stm32 A7 (pamiętaj, że A7 jest dobre tylko dla 3,3 V; jeśli twoja maszyna do ćwiczeń ma 5 V, użyj A9 i edytuj gamecube.h)
  • Nunchuck ground (oznaczony - na mojej płycie adaptera) -- stm32 ground
  • Nunchuck +3,3 V (oznaczony +) -- stm32 3,3 V
  • Nunchuck SDA (oznaczony D) -- stm32 B7
  • Nunchuck SCL (oznaczony C) -- stm32 B6
  • Rezystor 10Kohm między Nunchuck SDA a 3.3V na płycie stm32
  • Rezystor 10Kohm między Nunchuck SCL a 3,3V na płytce stm32.

Krok 5: Zainstaluj szkic

Zainstaluj szkic
Zainstaluj szkic
Zainstaluj szkic
Zainstaluj szkic

Pobierz szkic Gamecube USB Adapter i załaduj go do Arduino IDE. Istnieje kilka opcji do kontrolowania w gamecubecontroller.h:

  • usuń // przed #define ENABLE_EXERCISE_MACHINE (każdy musi to zrobić)
  • jeśli trzeba było przenieść połączenie maszyny do A9, zmień PA7 na PA9 w linii const uint32_t rotationor = PA7
  • jeśli impuls wykrywania obrotów maszyny do ćwiczeń jest wysoki, zmień #define ROTATION_DETECTOR_CHANGE_TO_MONITOR FALLING na #define ROTATION_DETECTOR_CHANGE_TO_MONITOR RISING
  • jeśli nie chcesz używać Nunchuck, umieść // przed #define ENABLE_NUNCHUCK
  • jeśli nie chcesz używać kontrolera Gamecube, umieść // przed #define ENABLE_GAMECUBE.

W środowisku Arduino IDE wybierz Narzędzia | Zarząd | Ogólna seria STM32F103C.

Naciśnij przycisk przesyłania ze strzałką w prawo. Zwróć uwagę, że może być konieczne naciśnięcie przycisku resetowania (lub odłączenie/podłączenie) płyty we właściwym czasie, jeśli pojawi się komunikat, że płyta nie jest rozpoznawana.

Krok 6: Podłączanie urządzenia do ćwiczeń

Podłączenie maszyny do ćwiczeń
Podłączenie maszyny do ćwiczeń
Podłączenie maszyny do ćwiczeń
Podłączenie maszyny do ćwiczeń
Podłączenie maszyny do ćwiczeń
Podłączenie maszyny do ćwiczeń
Podłączenie maszyny do ćwiczeń
Podłączenie maszyny do ćwiczeń

Włóż gniazdo do podłączenia urządzenia do ćwiczeń. Na naszej maszynie eliptycznej wlutowałem go, podczas gdy na rowerze treningowym mogłem użyć męskich i żeńskich złączy dupont. Na maszynie eliptycznej zrobiłem otwór z boku konsoli, aby dopasować połączenie. Na maszynie do ćwiczeń mam tylko wystające z niej przewody, a na zewnątrz małe pudełko wydrukowane w 3D (plik OpenSCAD).

Krok 7: Przypadek projektu

Przypadek projektu
Przypadek projektu
Przypadek projektu
Przypadek projektu
Przypadek projektu
Przypadek projektu
Przypadek projektu
Przypadek projektu

Projekt można zamknąć w małym kartonowym pudełeczku, pudełeczku tupperware lub niestandardowej obudowie wydrukowanej w 3D. Ponieważ mam drukarkę 3D, wybrałem niestandardową obudowę. Pliki OpenSCAD i STL są tutaj.

Stopki są przeznaczone do klejenia (superglue) do spodu i do wklejania w nie lepkich gumowych stopek.

Przykleiłem też na gorąco zapięcie na rzep zarówno do obudowy projektu, jak i do maszyn do ćwiczeń.

Krok 8: Użyj

Posługiwać się
Posługiwać się
Posługiwać się
Posługiwać się
Posługiwać się
Posługiwać się
Posługiwać się
Posługiwać się

Dwa przyciski mogą przełączać się między maksymalnie 16 różnymi trybami emulacji (właściwie możesz mieć ich więcej, ale w projekcie są tylko cztery diody LED do wyświetlania numeru trybu). Tryby emulacji są zdefiniowane w gamecubecontroller.h w szkicu. W większości gier możesz użyć trybu 1, zunifikowanego joysticka z suwakiem przy 100% prędkości. Emulowany joystick ma suwak (właściwie dwa suwaki, ale oba robią to samo), który jest kontrolowany przez obrót maszyny do ćwiczeń. Przyciskami i samym joystickiem steruje kontroler Gamecube lub Nunchuck. W systemie Windows niektóre gry obsługują kontroler konsoli Xbox 360, ale nie obsługują joysticka USB. W tym celu użyj trybu 13 (naciśnij dolny przycisk z trybu 1).

Tryby 9 i 10 pozwalają pedałować wolniej i nadal uzyskać pełne dociśnięcie suwaka, co jest przyjemne dla dzieci lub maszyn do ćwiczeń ustawionych na wyższy opór. Możesz również dostosować prędkość w exercisemachine.ino.

Istnieje wiele innych trybów emulacji. Odniesienie do druku znajduje się w pliku modelist.pdf wraz ze szkicem.

Kiedy pedałujesz na maszynie do ćwiczeń, diody w projekcie przełączają się z wyświetlania aktualnego numeru trybu na prędkość. Gdy wszystkie cztery kontrolki są zapalone, twoja prędkość jest maksymalna (emulowany suwak ma maksymalne wydłużenie) - w tym momencie nie masz żadnej przewagi w grze, jeśli idziesz szybciej. Dodatkowo niebieska dioda LED na płytce STM32F1 świeci, gdy wszystko działa, ale gaśnie, gdy czujnik obrotu zadziała.

Aby odwrócić ruch, przestaw przełącznik kierunkowy na skrzynce adaptera.

W systemie Windows uruchom joy.cpl, aby skalibrować i zobaczyć, jak wszystko działa. Ponieważ trzeba bardzo szybko pedałować, aby skalibrować emulowany joystick, jest uciążliwe, istnieje sposób na oszukanie kalibracji. Na kontrolerze Gamecube, jeśli pozostaniesz nieruchomo przez około 10 sekund, możesz zacząć używać przycisków naramiennych do sterowania emulowanymi suwakami joysticka. Dzięki Nunchuck, przytrzymując przycisk trybu-minus, możesz zamiast tego użyć joysticka w górę / w dół, aby sterować emulowanymi suwakami.

Jeśli chcesz mieć GUI do przełączania trybów emulacji, w systemie Windows szkic zawiera mode.py, skrypt Pythona z GUI do przełączania trybów. Możesz także wywołać mode.py w pliku wsadowym, który uruchamia grę.

Dwie gry, które naprawdę świetnie działają na maszynie do ćwiczeń, to Toybox Turbos i SuperTuxCart (darmowe).

Adapter zawiera również wiele innych funkcji emulacji. Na przykład można go używać jako prostego adaptera kontrolera Nunchuck lub Gamecube, emulującego joystick, klawiaturę (np. Strzałki/WASD) i/lub mysz. W gamecubecontroller.h znajduje się wiele trybów. Możesz także podłączyć pad kompatybilny z Dance Dance Revolution Gamecube/Wii i używać go do grania w gry, które nie są do tego przeznaczone, takie jak Tetris, dla dodatkowej zabawy i ćwiczeń.