Inhoudsopgave:
- Stap 1: Tik op de rotatiesensor
- Stap 2: ontwikkelbord voorbereiden
- Stap 3: Bereid Stm32duino voor in Arduino IDE
- Stap 4: Circuit
- Stap 5: Installeer Sketch
- Stap 6: Aansluiting trainingsapparaat
- Stap 7: Projectcase
- Stap 8: Gebruik
Video: Oefenmachine USB-gamecontroller - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Om beweging voor mezelf en voor het gezin aan te moedigen, heb ik een adapter gemaakt die een standaard USB-gamecontroller-adapter emuleert, maar de bewegingssnelheid van het spel regelt door op een elliptische machine of hometrainer te trappen. Het is vooral leuk voor racegames. Het motiveert zeker om snel te trappen bij het spelen van racegames.
De belangrijkste hardware is een $ 2 "black pill" STM32F103C8-ontwikkelbord met de stm32duino Arduino-kern en een USB HID-bibliotheek die ik heb ontwikkeld op basis van de kernvork van libarra111. De STM32F1 is snel en goedkoop en heeft full-speed USB-ondersteuning, dus perfect voor het project.
Om te gebruiken, moet u de rotatiesensor op de elliptische trainer of hometrainer gebruiken (als uw rotatiesensor anders werkt dan die op onze machines - ongeveer 3v, actief laag - moet u mogelijk het circuit en / of de code wijzigen).
De rotatiesnelheid van de elliptische trainer/fiets regelt de schuifregelaar van de controller. Daarnaast steek je een standaard Wii Nunchuck- of Gamecube-controller in de adapter voor joystickbewegingen, knoppen etc. Er zijn veel verschillende besturingsmodi. Kleinere kinderen moeten bijvoorbeeld mogelijk een beetje sneller worden en sommige games gebruiken mogelijk een ander besturingsschema. Er zijn een aantal ingebouwde besturingsschema's in de software en andere kunnen eenvoudig in de code worden toegevoegd. Het apparaat kan een USB-gamecontroller, toetsenbord, muis, XBox 360-controller of een combinatie van de eerste drie emuleren.
Bewegingsrichting wordt momenteel niet gedetecteerd: om te schakelen tussen voorwaartse en achterwaartse beweging, heeft de adapter een tuimelschakelaar. (Als alternatief zou men een hall-effect magnetische sensor zoals dit apparaat kunnen gebruiken en het circuit en de software kunnen veranderen.)
De adapter werkt als een standaard USB-controller, dus je kunt hem gebruiken met Windows, Linux, OS X, Android, etc.
Als bonus heeft de adapter alle functies van dit project, en werkt als een volledig functionele Gamecube-adapter, waardoor je Gamecube-controllers op een computer kunt gebruiken, inclusief het besturen van games met Gamecube/Wii-compatibele Dance Dance Revolution-dansmatten.
De kosten bedragen minder dan ongeveer $ 10, plus behuizing (ik heb een 3D-afdrukbaar ontwerp), draden en soldeer. Onderdelen:
- "Black Pill" stm32f103c8 ontwikkelbord ($ 2 op Aliexpress)
- Gamecube-aansluiting ($ 1,60 op AliExpress, voor een Gamecube-verlengsnoer dat kan worden ingekort)
- Nunchuck socket breakout board ($ 0,51 op Aliexpress; zoek naar Wiichuck)
- Kleine tuimelschakelaar met twee standen (minder dan $ 1 op Aliexpress)
- Uw keuze uit mannelijke en vrouwelijke connectoren met twee geleiders (ongeveer $ 1 op AliExpress als je gaat met 5,5 mm power barrel-connectoren); je hebt één vrouwelijke connector per fitnessapparaat nodig
- 2 tactiele schakelaars (minder dan $ 0,50 op Aliexpress)
- 4 rode LED's (minder dan $ 0,50 op Aliexpress; je zou ook een klein Nokia LCD-scherm kunnen gebruiken)
- condensatoren: 10uF elektrolytisch en optioneel 100nF
- weerstanden: 1 x 100K, 2 x 10K, 1 x 1K, 4 x 220ohm
- klein protobord (minder dan $ 1 op AliExpress).
Een Nunchuck is goed voor gebruik met één hand met een elliptische machine. Op een hometrainer kun je een adapter voor twee handen gebruiken, zoals de Gamecube. Als u slechts één van deze twee bedieningsopties wilt gebruiken, kunt u minder verbindingen gebruiken.
Je hebt ook een computer, een soldeerbout en een multimeter nodig. Je hebt ook een UART-naar-USB-brug nodig (ik gebruikte een Arduino Mega die ik voor een ander project had, of je kunt een CP2102-module op Aliexpress kopen voor een dollar) om een bootloader op je zwarte pil te installeren om deze te gebruiken met de Arduino-omgeving, of je kunt nog een paar dollar uitgeven en het ontwikkelbord van RobotDyn krijgen met een vooraf geladen Arduino-bootloader.
Ik wil hieraan toevoegen dat ik meedoe aan de Wheels-wedstrijd, omdat het een manier is om de virtuele wielen in autoracegames op een computer te koppelen aan de fysieke wielen van hometrainers en crosstrainers.
Stap 1: Tik op de rotatiesensor
Beide fitnessapparaten die ik heb gehackt, hebben een console die de snelheid weergeeft. Er lopen draden tussen de console en de behuizing van de machine. U moet deze draden aanboren om toegang te krijgen tot gegevens. Als uw machines zijn zoals de mijne, kan de console worden verwijderd en vindt u daar een lintkabel (elliptisch) of twee draden (fiets). Ik heb hier gebruik van gemaakt door de draden los te koppelen en ze te overbruggen met individuele man-naar-vrouw jumpers die ik kon gebruiken.
Gebruik vallen en opstaan en een multimeter om een paar draden te identificeren waartussen een spanningspuls staat tijdens een volledige rotatie.
In principe is de boor als volgt: sluit de multimeter aan op een paar draden (zorg ervoor dat u niets kortsluit) terwijl de machine draait, en draai heel langzaam aan de pedalen. In beide van onze machines zit een paar draden waartussen de spanning normaal rond de +3V ligt, maar tijdens een kort deel van de rotatie valt deze naar de grond: dit is een actief-laag schema. Mogelijk vindt u dat uw machine een actief-hoog schema heeft waarbij het grootste deel van de rotatie wordt gemalen en de puls positief is, en dan moet u de Arduino-schets bewerken.
Als je denkt dat er een kans is dat een van de draden in de console waarmee je te maken hebt, netstroom is, raad ik aan te stoppen, tenzij je echt weet wat je doet. Gelukkig werkt onze hometrainer op batterijen en kan onze elliptische trainer worden aangesloten op een muurwrat, dus er is slechts ongeveer 12V DC rond de console.
In het geval van de hometrainer was het heel eenvoudig. Er waren maar vier draden. Twee waren voor de hartslagmeter en twee waren voor de rotatiesensor.
De elliptische trainer had veel meer draden, en dus was het meer werk. De brute-force methode is dit. Bevestig een multimeter aan een paar draden. Draai langzaam een volledige rotatie (of een beetje meer voor het geval dat) op de pedalen en kijk of er een spanningsdip of sprong is. Zo ja, dan heb je het. Zo niet, herhaal dan voor een ander paar. Dat is veel vallen en opstaan: voor 13 draden zijn het 78 omwentelingen.
Hier is een truc die u kan helpen om het zoeken naar het juiste draadpaar te versnellen. Je zou kunnen hopen dat je machine, zoals de mijne, de detectorspanning normaal hoog heeft met een lage puls. Als dat zo is, dan heb je, als je de pedalen op een willekeurige plaats laat, een goede kans dat de twee detectordraden ongeveer +3V of +5V ertussen hebben. Voer de pedaalrotatietest dus alleen uit voor die paren draden met +3V of +5V ertussen.
Nog een truc. U kunt mogelijk identificeren waar in de pedaalrotatie de rotatiesensor wordt geactiveerd. Uw machine kan dan bijvoorbeeld iets op het scherm laten knipperen, de snelheidsweergave bijwerken, activeren vanuit de slaapstand of piepen. Als dat zo is, beweeg dan de pedalen ongeveer 1/3 van een omwenteling weg, en zoek dan naar paren draden met 3-5V ertussen, en test die door de pedalen te verplaatsen naar de positie waar de sensor activeert.
Als u de aarddraad kunt identificeren, kunt u het proces aanzienlijk versnellen, omdat u dan alleen tussen de grond en elke onbekende draad hoeft te gaan. Vreemd genoeg leek de aarde van de voeding op onze elliptische trainer niet hetzelfde te zijn als de aarde van de rotatiedetector.
Zodra u de draden identificeert, noteert u ze. Let op:
- het hoogspanningsniveau: als het meer dan ongeveer 3,3V maar niet meer dan 5V is, moet je het circuit wijzigen om pin A9 te gebruiken in plaats van A7 voor rotatiedetectie, aangezien pin A9 5V-tolerantie is en A7 dat niet is, en bewerk één regel in mijn schets; als het meer dan 5V is, moet je een spanningsdeler toevoegen
- of de rotatiedetectiepuls laag of hoog is: als de puls hoog is, moet je een regel in mijn Arduino-schets bewerken.
Als je een oscilloscoop hebt en de hometrainer werkt op batterijen, dan kun je in plaats van de multimeter ook de oscilloscoop gebruiken. (Als de oefenmachine is aangesloten op wisselstroom en dat geldt ook voor uw oscilloscoop, dan moet u weten wat aardlussen zijn en hoe u deze kunt vermijden. Wees voorzichtig!)
Stap 2: ontwikkelbord voorbereiden
Soldeer de zes centrale jumperpinnen op je zwarte pil.
Als je een RobotDyn-bord hebt met de Arduino-bootloader, sluit je B0- en B1- aan op de middelste pinnen en je bent klaar met de stap.
Anders moet u nu de bootloader installeren. Je hebt een stand-alone UART naar USB-brug nodig of je kunt hiervoor een Arduino Uno of Mega gebruiken. Hoewel de zwarte pil op 3,3V werkt, zijn de UART-pinnen 5V-tolerant, dus maak je geen zorgen of je connector op 3,3V of 5V werkt.
Als je een Uno of Mega hebt, plaats dan een startkabel tussen RESET en GROUND. Dit verandert de Arduino in een speciale UART-naar-USB-brug, behalve dat de TX / RX-pinnen het omgekeerde zijn van hoe ze gewoonlijk op een connector zitten.
Download het binaire bestand van de bootloader. U wilt generic_boot20_pb12.bin. Installeer op Windows ST's Flash Loader Demonstrator. Gebruik in Linux (en misschien OS X en zelfs Windows als je de voorkeur geeft aan opdrachtregelprogramma's), in plaats daarvan dit python-script, maar mijn instructies zijn voor Windows.
Maak de volgende verbindingen:
- PA9 naar UART bridge RX ("TX" als je de Arduino-truc gebruikt)
- PA10 naar UART bridge TX ("RX" als je de Arduino-truc gebruikt)
- G naar UART-bruggrond
Ik gebruik graag logische sondetips om de verbindingen aan de STM32-kant te maken, maar je kunt ook gewoon wat draden insolderen die je later kunt afknippen (of de-solderen als je netjes wilt zijn).
Sluit uw UART-brug aan op uw computer. Schakel de Black Pill in via de USB-poort (het beste als u hem op een oplader aansluit in plaats van op de computer, omdat de computer waarschijnlijk zal klagen over een niet-herkend USB-apparaat). Start de Flash Loader-demonstrator. Kies de COM-poort voor uw UART-bridge. Kies "Beveiliging verwijderen" indien beschikbaar. Kies een flash-versie van 64 kb in plaats van 128 kb. En upload het binaire bestand van de bootloader.
Schakel alles uit en verplaats vervolgens de jumper van B0+/center naar B0-/center. Je hebt nu een bootloader die je kunt gebruiken met de Arduino IDE.
Stap 3: Bereid Stm32duino voor in Arduino IDE
Ik neem aan dat je de nieuwste Arduino IDE hebt geïnstalleerd.
In Hulpmiddelen | Borden | Boards Manager, installeer ondersteuning voor de Arduino Zero (zet Zero gewoon in de zoekopdracht, klik op het gevonden item en vervolgens op Installeren). Ja, je werkt niet met een Zero, maar dit zal de juiste gcc-compiler installeren.
Download vervolgens de stm32duino-kern. Op Windows raad ik aan om het zip-bestand te downloaden, want toen ik de bestanden uitcheckte (toegegeven, met svn), had ik enkele machtigingsproblemen met bestanden in de map Windows-hulpprogramma's die moesten worden gerepareerd. Zet de branch in Arduino/Hardware/Arduino_STM32 (zodat je mappen hebt zoals Arduino/Hardware/Arduino_STM32/STM32F1, etc.) Installeer in Windows drivers door drivers\win\install_drivers.bat uit te voeren.
Installeer mijn USBHID-bibliotheek: Ga naar Sketch | Bibliotheek opnemen | Beheer bibliotheken en zoek naar USBHID. Klik erop en klik op Installeren.
Installeer mijn GameControllersSTM32-bibliotheek: Ga naar Sketch | Bibliotheek opnemen | Beheer bibliotheken en zoek naar GameControllers. Klik erop en klik op Installeren.
Stap 4: Circuit
Mijn setup gebruikt vier LED's om de huidige emulatiemodus binair aan te geven (ja, je zou een LCD-scherm kunnen gebruiken, maar ik had LED's rondslingeren toen ik dit bouwde), twee drukknoppen om de modus op en neer te schakelen (en nog wat andere dingen te doen) tricks), en een tuimelschakelaar voor het wisselen van bewegingsrichting.
Daarnaast is er een I2C-ingang van de Nunchuck en een connector naar de Gamecube-controller. Als je slechts één van deze twee wilt ondersteunen, kun je gamecube.h gewoon in de schets bewerken en jezelf wat soldeerwerk besparen.
Ik heb een klein stukje protoboard gebruikt om de vier modus-LED's en twee modusschakelaars (omhoog en omlaag) te monteren, evenals de ene pull-up-weerstand voor Gamecube-gegevens. Ik bracht 3.3V naar het protoboard, maar ik hoefde er geen grond naar toe te brengen, hoewel je dat wel kunt als je wilt. Ik heb nog een klein stukje protoboard gebruikt om de Nunchuck-connector te monteren.
Knip de Gamecube-kabel door. U wilt werken met de socketzijde, degene waar uw controller op wordt aangesloten. Kabels strippen om aan te sluiten.
Maak nu deze aansluitingen volgens het schakelschema:
- 10uF condensator tussen 3.3v en aarde (met de minkant van eventuele elektrolyten aan aarde). Dit moet zo dicht mogelijk bij de chip zitten, dus heb ik het direct op het ontwikkelbord gesoldeerd in plaats van op het protobord. Voor de goede orde kun je een 100nF toevoegen zoals ik deed, maar ik weet niet zeker of dat nodig is.
- Gamecube-socket #2 -- A6 op stm32-bord
- 1Kohm weerstand tussen Gamecube socket #2 en 3.3V op stm32 board (of op protoboard)
- Gamecube-socket #3 en #4 -- geaard op stm32-bord
- Gamecube-aansluiting #6 -- 3.3V op stm32-bord (of op protoboard)
- LED in serie met 220ohm (of groter) weerstand tussen A0 op stm32 bord en 3,3V (negatief uiteinde (plat) naar PA0; positief uiteinde naar 3,3V)
- Herhaal met LED+weerstand tussen A1 en 3.3V, A2 en 3.3V, en A3 en 3.3V
- Moment switch tussen A5 op stm32 board (increment mode) en 3.3V en een ander tussen A4 en 3.3V (decrement mode); deze schakelaar verhoogt het modusnummer
- Tuimelschakelaar tussen A8 en 3.3V
- oefenmachine grond -- stm32 grond
- positief signaal fitnessapparaat -- stm32-bord A7 (merk op dat A7 alleen goed is voor 3,3 V; als je trainingsapparaat 5 V is, gebruik dan A9 en bewerk gamecube.h)
- Nunchuck-aarde (gelabeld - op mijn adapterkaart) -- stm32-aarde
- Nunchuck +3.3V (gelabeld +) -- stm32 3.3V
- Nunchuck SDA (aangeduid met D) -- stm32 B7
- Nunchuck SCL (met label C) -- stm32 B6
- 10Kohm weerstand tussen Nunchuck SDA en 3.3V op stm32 board
- 10Kohm weerstand tussen Nunchuck SCL en 3.3V op stm32 bord.
Stap 5: Installeer Sketch
Download mijn Gamecube USB Adapter-schets en laad deze in de Arduino IDE. Er zijn enkele opties om te besturen in gamecubecontroller.h:
- verwijder // voor #define ENABLE_EXERCISE_MACHINE (iedereen moet dit doen)
- als u de aansluiting van het trainingsapparaat naar A9 moet verplaatsen, wijzigt u PA7 in PA9 in de const uint32_t rotationDetector = PA7-regel
- als de detectiepuls voor rotatie van uw trainingsapparaat hoog is, verander dan #define ROTATION_DETECTOR_CHANGE_TO_MONITOR FALLING in #define ROTATION_DETECTOR_CHANGE_TO_MONITOR RISING
- als je geen Nunchuck wilt gebruiken, zet dan // voor #define ENABLE_NUNCHUCK
- als je geen Gamecube-controller wilt gebruiken, zet je // voor #define ENABLE_GAMECUBE.
Kies in de Arduino IDE Extra | Bord | Generieke STM32F103C-serie.
Druk op de uploadknop met de pijl naar rechts. Houd er rekening mee dat u mogelijk op het juiste moment op de resetknop moet drukken (of de kaart moet loskoppelen/aansluiten) als u een bericht krijgt dat de kaart niet wordt herkend.
Stap 6: Aansluiting trainingsapparaat
Splice in een jack voor uw hometrainer-aansluiting. Op onze elliptische machine heb ik hem erin gesoldeerd, terwijl ik op de hometrainer mannelijke en vrouwelijke dupont-connectoren kon gebruiken. Op de elliptische trainer heb ik een gat gemaakt in de zijkant van de console om de verbinding te passen. Op de oefenmachine heb ik gewoon draden die eruit steken en een klein 3D-geprint doosje (OpenSCAD-bestand) aan de buitenkant.
Stap 7: Projectcase
Men kan het project insluiten in een kleine kartonnen doos, een tupperware-container of een op maat gemaakte 3D-geprinte behuizing. Omdat ik een 3D-printer heb, ging ik voor de aangepaste behuizing. De OpenSCAD- en STL-bestanden zijn hier.
De voetjes zijn ontworpen om op de bodem te lijmen (superlijm werkt) en om er kleverige rubberen voetjes in te steken.
Ik heb ook wat klittenband vastgelijmd aan zowel de projectkoffer als de oefenmachines.
Stap 8: Gebruik
De twee knoppen kunnen schakelen tussen maximaal 16 verschillende emulatiemodi (u kunt er eigenlijk meer hebben, maar er zijn slechts vier LED's in het project om het modusnummer weer te geven). De emulatiemodi zijn gedefinieerd in gamecubecontroller.h in de schets. Voor de meeste games kunt u modus 1 gebruiken, een verenigde schuifregelaar met een snelheid van 100%. De geëmuleerde joystick heeft een schuifregelaar (eigenlijk twee schuifregelaars, maar beide doen hetzelfde) die wordt bestuurd door de rotatie van de oefenmachine. De knoppen en joystick zelf worden bestuurd door de Gamecube-controller of Nunchuck. Op Windows ondersteunen sommige games een XBox 360-controller, maar geen USB-joystick. Gebruik daarvoor modus 13 (druk op de omlaag-knop vanuit modus 1).
Met standen 9 en 10 kun je langzamer trappen en toch een volledige schuifregelaar indrukken, wat prettig is voor kinderen, of voor fitnessapparaten die op een hogere weerstand zijn ingesteld. U kunt de snelheden ook aanpassen in exercisemachine.ino.
Er zijn veel andere emulatiemodi. Een afdrukbare referentie is opgenomen in modelist.pdf bij de schets.
Wanneer u op de oefenmachine trapt, schakelen de LED's op het project over van weergave van het huidige modusnummer naar de snelheid. Als alle vier de lampjes branden, is je snelheid maximaal (de geëmuleerde schuifregelaar heeft een maximale extensie) - op dat moment krijg je geen in-game voordeel door sneller te gaan. Bovendien brandt de blauwe LED op het STM32F1-bord wanneer alles werkt, maar knippert deze uit wanneer de rotatiesensor wordt geactiveerd.
Om de beweging om te keren, draait u de richtingstuimelschakelaar op de adapterdoos om.
Voer in Windows joy.cpl uit om te kalibreren en te zien hoe de dingen werken. Omdat het vervelend is om heel snel te moeten trappen om de geëmuleerde joystick te kalibreren, is er een manier om vals te spelen voor kalibratie. Als je op de Gamecube-controller ongeveer 10 seconden stilstaat, kun je de schouderknoppen gaan gebruiken om de geëmuleerde joystickschuifregelaars te bedienen. Met de Nunchuck, terwijl u de modus-min-knop ingedrukt houdt, kunt u in plaats daarvan de joystick omhoog/omlaag gebruiken om de geëmuleerde schuifregelaars te bedienen.
Als je een GUI wilt om van emulatiemodus te wisselen, bevat de sketch op Windows mode.py, een pythonscript met een GUI om van modus te wisselen. Je kunt mode.py ook aanroepen in een batchbestand waarmee een game wordt gestart.
Twee spellen waarvan ik heb ontdekt dat ze heel goed werken met de oefenmachine, zijn Toybox Turbos en SuperTuxCart (gratis).
De adapter bevat ook veel andere emulatiefuncties. U kunt het bijvoorbeeld gebruiken als een rechttoe rechtaan Nunchuck- of Gamecube Controller-adapter, die joystick, toetsenbord (bijv. pijlen/WASD) en/of muis emuleert. Er zijn veel modi vermeld in gamecubecontroller.h. Je kunt ook een Dance Dance Revolution Gamecube/Wii-compatibele pad aansluiten en die gebruiken om games te spelen die er niet voor zijn ontworpen, zoals Tetris, voor extra plezier en oefening.
Aanbevolen:
Hoe maak je een USB-flashdrive met een gum - DIY USB-drivebehuizing: 4 stappen
Hoe maak je een USB-flashdrive met een gum | DIY USB-drivebehuizing: deze blog gaat over "Hoe maak je een USB-flashdrive met een gum | DIY USB-schijfbehuizing" ik hoop dat je het leuk zal vinden
Honkbal oefenmachine: 4 stappen
Honkbal oefenmachine: dit is een machine die je honkbalvaardigheden zal trainen door je te laten oefenen met het raken van een doel.Referentie: https://www.tutorialspoint.com/arduino/arduino_blinking_led.htm
Verander een gewone USB-stick in een veilige USB-stick: 6 stappen
Verander een gewone USB-stick in een veilige USB-stick: In deze Instructable leren we hoe je van een gewone USB-stick een veilige USB-stick kunt maken. Allemaal met standaard Windows 10-functies, niets bijzonders en niets extra's om aan te schaffen. Wat heb je nodig: Een USB-stick of -stick. Ik beveel getti
NODEMcu Usb-poort werkt niet? Upload de code met behulp van USB naar TTL (FTDI)-module in slechts 2 stappen: 3 stappen
NODEMcu Usb-poort werkt niet? Upload de code met behulp van USB naar TTL (FTDI) -module in slechts 2 stappen: moe van het verbinden met veel draden van USB naar TTL-module naar de NODEMcu, volg deze instructie om de code in slechts 2 stappen te uploaden. Als de USB-poort van de NODEMcu werkt niet, geen paniek. Het is gewoon de USB-stuurprogrammachip of de USB-connector
Hoe u uw eigen USB-autolader kunt maken voor elke iPod of andere apparaten die via USB worden opgeladen: 10 stappen (met afbeeldingen)
Hoe u uw eigen USB-autolader kunt maken voor elke iPod of andere apparaten die worden opgeladen via USB: maak een USB-autolader voor elke iPod of ander apparaat dat oplaadt via USB door een autoadapter aan elkaar te koppelen die 5v en een vrouwelijke USB-stekker uitvoert. Het belangrijkste onderdeel van dit project is om ervoor te zorgen dat de output van uw gekozen auto-adapter wordt ingezet