Innholdsfortegnelse:

Treningsmaskin USB -spillkontroller: 8 trinn (med bilder)
Treningsmaskin USB -spillkontroller: 8 trinn (med bilder)

Video: Treningsmaskin USB -spillkontroller: 8 trinn (med bilder)

Video: Treningsmaskin USB -spillkontroller: 8 trinn (med bilder)
Video: В каждой качалке есть такой чувак😅 2024, November
Anonim
Treningsmaskin USB -spillkontroller
Treningsmaskin USB -spillkontroller
Treningsmaskin USB -spillkontroller
Treningsmaskin USB -spillkontroller
Treningsmaskin USB -spillkontroller
Treningsmaskin USB -spillkontroller
Treningsmaskin USB -spillkontroller
Treningsmaskin USB -spillkontroller

For å oppmuntre til trening i meg selv og familien, laget jeg en adapter som emulerer en standard USB -spillkontrolladapter, men som styrer hastigheten på spillbevegelsen ved å tråkke på en elliptisk maskin eller treningssykkel. Det er spesielt fint for racingspill. Det motiverer absolutt en til å tråkke fort når du spiller racingspill.

Hovedmaskinvaren er et $ 2 "svart pille" STM32F103C8 utviklingskort med stm32duino Arduino -kjernen og et USB HID -bibliotek jeg utviklet basert på libarra111s kjernegaffel. STM32F1 er rask og billig og har USB-støtte i full hastighet, så den er perfekt for prosjektet.

For å bruke må du trykke på rotasjonssensoren på den elliptiske eller treningssykkelen (hvis rotasjonssensoren din fungerer annerledes enn de på maskinene våre-omtrent 3v, aktiv lav-må du kanskje endre kretsen og/eller koden).

Den elliptiske/sykkelrotasjonshastigheten styrer kontrolleren. I tillegg kobler du en standard Wii Nunchuck- eller Gamecube -kontroller til adapteren for styring av joystick, knapper osv. Det er mange forskjellige kontrollmoduser. For eksempel kan det hende at mindre barn må øke farten litt, og noen spill kan bruke en annen kontrollordning. Det er en rekke innebygde kontrollordninger i programvaren, og andre kan enkelt legges til i koden. Enheten kan etterligne en USB -spillkontroller, tastatur, mus, XBox 360 -kontroller eller en kombinasjon av de tre første.

Bevegelsesretningen blir for øyeblikket ikke oppdaget: for å veksle mellom bevegelse forover og bakover, har adapteren en vippebryter. (Alternativt kan man bruke en hall-effekt magnetisk sensor som denne enheten, og endre krets og programvare.)

Adapteren fungerer som en standard USB -kontroller, slik at du kan bruke den med Windows, Linux, OS X, Android, etc.

Som en bonus har adapteren alle funksjonene i dette prosjektet, og fungerer som en fullfunksjons Gamecube-adapter, slik at du kan bruke Gamecube-kontrollere på en datamaskin, inkludert kontroll av spill med Gamecube/Wii-kompatible Dance Dance Revolution-dansematter.

Kostnaden er under rundt $ 10, pluss etui (jeg har en 3D -utskrivbar design), ledninger og loddetinn. Deler:

  • "Black Pill" stm32f103c8 utviklingstavle ($ 2 på Aliexpress)
  • Gamecube -kontakt ($ 1,60 på Aliexpress, for en gamecube -skjøteledning som kan kuttes)
  • Nunchuck socket breakout board ($ 0,51 på Aliexpress; søk etter Wiichuck)
  • Liten to-stillings vippebryter (under $ 1 på Aliexpress)
  • Ditt valg av to-leder mannlige og kvinnelige kontakter (ca $ 1 på Aliexpress hvis du går med 5,5 mm strømfatkontakter); du trenger en hunkontakt per treningsmaskin
  • 2 taktile brytere (under $ 0,50 på Aliexpress)
  • 4 røde lysdioder (under $ 0,50 på Aliexpress; du kan også bruke en liten Nokia LCD -skjerm)
  • kondensatorer: 10uF elektrolytisk og valgfri 100nF
  • motstander: 1 x 100K, 2 x 10K, 1 x 1K, 4 x 220ohm
  • lite prototavle (under $ 1 på Aliexpress).

En Nunchuck er bra for enhåndsbruk med en elliptisk maskin. På en mosjonssykkel kan du bruke en tohånds adapter som Gamecube. Hvis du bare vil bruke ett av disse to kontrollalternativene, kan du bruke færre tilkoblinger.

Du trenger også en datamaskin, et loddejern og et multimeter. Du trenger også en UART-til-USB-bro (jeg brukte en Arduino Mega som jeg hadde til et annet prosjekt, eller du kan kjøpe en CP2102-modul på Aliexpress for en dollar) for å installere en bootloader på den svarte pillen din for å bruke den med Arduino -miljø, ellers kan du bruke et par dollar og få RobotDyns utviklingsbrett med en Arduino -opplastningslaster forhåndslastet.

La meg legge til at jeg deltar i dette i Wheels -konkurransen, fordi det er en måte å koble de virtuelle hjulene i bilracespill på en datamaskin med de fysiske hjulene til treningssykler og elliptiske.

Trinn 1: Trykk på Into Rotation Sensor

Trykk på Into Rotation Sensor
Trykk på Into Rotation Sensor
Trykk på Into Rotation Sensor
Trykk på Into Rotation Sensor
Trykk på Into Rotation Sensor
Trykk på Into Rotation Sensor
Trykk på Into Rotation Sensor
Trykk på Into Rotation Sensor

Begge treningsmaskinene jeg hacket har en konsoll som viser hastigheten. Det er ledninger som går mellom konsollen og maskinkroppen. Du må trykke på disse ledningene for å få tilgang til data. Hvis maskinene dine er som mine, kan konsollen fjernes, og du finner enten en båndkabel (elliptisk) eller to ledninger (sykkel). Jeg tappet inn i disse ved å koble fra ledningene og bygge bro mellom dem med individuelle mannlige til kvinnelige hoppere som jeg kunne slå på.

Bruk prøving og feiling og et multimeter for å identifisere et par ledninger mellom som har en spenningspuls under en full rotasjon.

I utgangspunktet er boret dette: Koble multimeteret til et par ledninger (vær forsiktig så du ikke forkorter noe) mens maskinen går, og roter pedalene sakte. I begge maskinene våre er det et par ledninger mellom hvilke normalt spenningen er rundt +3V, men i løpet av en kort del av rotasjonen faller den til bakken: dette er en aktiv-lav ordning. Det kan hende du finner ut at maskinen din har et aktivt høyt opplegg der det meste av rotasjonen er malt, og pulsen er positiv, og deretter må du redigere Arduino-skissen.

Hvis du tror det er noen sjanse for at noen av ledningene til konsollen du har å gjøre med strømnettet, anbefaler jeg å stoppe med mindre du virkelig vet hva du gjør. Heldigvis er treningssykkelen vår batteridrevet og våre elliptiske plugger til en veggvorter, så det er bare omtrent 12V DC rundt konsollen.

Når det gjelder treningssykkel var det veldig enkelt. Det var bare fire ledninger. To var for pulsmåler og to for rotasjonssensor.

Den elliptiske hadde mange flere ledninger, og så det var mer arbeid. Brute-force-metoden er dette. Fest et multimeter til et par ledninger. Dra sakte en full rotasjon (eller litt mer for sikkerhets skyld) på pedalene og se om det er en spenningsdipp eller et hopp. Hvis ja, har du det. Hvis ikke, gjenta for et annet par. Det er mye prøving og feiling: for 13 ledninger er det 78 rotasjoner.

Her er et triks som kan hjelpe deg med å øke hastigheten på søket etter det riktige trådparet. Du kan håpe at maskinen din, i likhet med min, har detektorspenningen normalt høy med lav puls. I så fall, hvis du lar pedalene være på et tilfeldig sted, har du en god sjanse for at de to detektorledningene har rundt +3V eller +5V mellom seg. Så bare gjør pedalrotasjonstesten for de parene med ledninger som har +3V eller +5V mellom seg.

Et annet triks. Du kan kanskje identifisere hvor i pedalrotasjonen rotasjonssensoren utløser. For eksempel kan maskinen din blinke noe på skjermen da, eller oppdatere hastighetsvisningen, eller aktivere fra hvilemodus eller pip. I så fall, flytt pedalene omtrent 1/3 av en rotasjon bort, og se etter par ledninger som har 3-5V mellom dem, og test dem ved å flytte pedalene til posisjonen der sensoren utløser.

Hvis du kan identifisere jordledningen, kan du fremskynde prosessen betraktelig, siden du da bare trenger å gå mellom jord og hver ukjent ledning. Merkelig nok så det imidlertid ut som om strømforsyningens bakke på vår elliptiske side ikke var den samme som rotasjonsdetektorens bakke.

Når du har identifisert ledningene, noterer du dem. Sørg for å merke:

  • høyspenningsnivået: hvis det er mer enn omtrent 3,3V, men ikke mer enn 5V, vil du endre kretsen for å bruke pinne A9 i stedet for A7 for rotasjonsdeteksjon ettersom pinne A9 er 5V-toleranse og A7 ikke er, og redigere en linje i skissen min; Hvis det er mer enn 5V, må du legge til en spenningsdeler
  • om rotasjonsdeteksjonspulsen er lav eller høy: Hvis pulsen er høy, må du redigere en linje i min Arduino -skisse.

Hvis du har et oscilloskop, og treningsmaskinen er batteridrevet, kan du også bruke oscilloskopet i stedet for multimeteret. (Hvis treningsmaskinen er koblet til vekselstrøm og det samme er oscilloskopet ditt, må du vite om jordsløyfer og hvordan du kan unngå dem. Vær forsiktig!)

Trinn 2: Forbered utviklingsstyret

Forbered utviklingsstyret
Forbered utviklingsstyret
Forbered utviklingsstyret
Forbered utviklingsstyret
Forbered utviklingsstyret
Forbered utviklingsstyret

Lodd de seks sentrale jumperpinnene på den svarte pillen.

Hvis du har et RobotDyn-kort med Arduino bootloader, kobler du B0- og B1- til senterpinnene, og du er ferdig med trinnet.

Ellers må du nå installere bootloader. Du trenger enten en frittstående UART til USB -bro, eller du kan bruke en Arduino Uno eller Mega til dette formålet. Selv om den svarte pillen går på 3.3V, er UART -pinnene 5V -tolerante, så ikke bekymre deg om kontakten går på 3.3V eller 5V.

Hvis du har en Uno eller Mega, må du sette en startkabel mellom RESET og GROUND. Dette gjør Arduino til en dedikert UART til USB -bro, bortsett fra at TX/RX -pinnene er motsatt av hvordan de vanligvis er på en kontakt.

Last ned bootloader binær. Du vil ha generic_boot20_pb12.bin. Installer STs Flash Loader Demonstrator på Windows. På Linux (og kanskje OS X og til og med Windows hvis du foretrekker kommandolinjeverktøy), bruk dette python -skriptet i stedet, men instruksjonene mine er for Windows.

Gjør følgende tilkoblinger:

  • PA9 til UART bridge RX ("TX" hvis du bruker Arduino -trikset)
  • PA10 til UART bridge TX ("RX" hvis du bruker Arduino -trikset)
  • G til UART bro bakken

Jeg liker å bruke logiske sonde-tips for å lage tilkoblingene på STM32-siden, men du kan også bare lodde i noen ledninger som du senere kan kutte av (eller av-lodde hvis du vil være pen).

Koble UART -broen til datamaskinen. Slå på den svarte pillen via USB -porten (best hvis du kobler den til en lader i stedet for datamaskinen, da datamaskinen sannsynligvis vil klage på en ukjent USB -enhet). Start demonstrasjonen av Flash Loader. Velg COM -porten for UART -broen. Velg "Fjern beskyttelse" hvis tilgjengelig. Velg en 64 kb snarere enn 128 kb blitsversjon. Og last opp bootloader binær.

Koble fra alt og flytt deretter hopperen fra B0+/senter til B0-/senter. Du har nå en bootloader som du kan bruke med Arduino IDE.

Trinn 3: Forbered Stm32duino i Arduino IDE

Forbered Stm32duino i Arduino IDE
Forbered Stm32duino i Arduino IDE
Forbered Stm32duino i Arduino IDE
Forbered Stm32duino i Arduino IDE

Jeg antar at du har den siste Arduino IDE installert.

I Verktøy | Tavler | Boards Manager, installer støtte for Arduino Zero (bare sett Zero i søket, klikk på oppføringen og deretter Installer). Ja, du jobber ikke med en null, men dette vil installere den riktige gcc -kompilatoren.

Last deretter ned stm32duino -kjernen. På Windows anbefaler jeg å laste ned zip -filen, siden da jeg sjekket ut filene (riktignok med svn), hadde jeg noen tillatelsesproblemer med filer i Windows -verktøykatalogen som måtte fikses. Sett grenen i Arduino/Hardware/Arduino_STM32 (så får du mapper som Arduino/Hardware/Arduino_STM32/STM32F1, etc.) På Windows kan du installere drivere ved å kjøre drivers / win / install_drivers.bat.

Installer USBHID -biblioteket mitt: Gå til Sketch | Inkluder bibliotek | Administrer biblioteker, og søk etter USBHID. Klikk på den og klikk på Installer.

Installer GameControllersSTM32 -biblioteket mitt: Gå til Sketch | Inkluder bibliotek | Administrer biblioteker, og søk etter GameControllers. Klikk på den og klikk på Installer.

Trinn 4: Krets

Krets
Krets
Krets
Krets
Krets
Krets
Krets
Krets

Oppsettet mitt bruker fire lysdioder for å indikere gjeldende emuleringsmodus i binær (ja, en kan bruke en LCD-skjerm, men jeg hadde lysdioder liggende når jeg bygde dette), to trykknapper for å bytte modus opp og ned (og gjøre noen andre triks), og en vippebryter for å bytte bevegelsesretning.

I tillegg er det en I2C -inngang fra Nunchuck og en kontakt til Gamecube -kontrolleren. Hvis du bare vil støtte en av disse to, kan du bare redigere gamecube.h i skissen og spare deg for litt lodding.

Jeg brukte en liten protoboard for å montere de fire modus-LED-ene og to modusbryterknapper (opp og ned), i tillegg til den ene opptrekkmotstanden for Gamecube-data. Jeg hentet ut 3.3V til protoboardet, men jeg trengte ikke å få frem bakken til det, selv om du kan hvis du vil. Jeg brukte en annen liten protoboard for å montere Nunchuck -kontakten.

Kutt Gamecube -kabelen. Du vil jobbe med kontakten siden, den som kontrolleren vil koble til. Stripkabler for tilkobling.

Gjør nå disse tilkoblingene i henhold til kretsdiagrammet:

  • 10uF kondensator mellom 3,3v og jord (med minussiden av en hvilken som helst elektrolytikk i bakken). Dette skal være så nær brikken som mulig, så jeg loddet den rett på utviklingsbrettet fremfor protoboardet. For et godt mål kan du legge til en 100nF som jeg gjorde, men jeg er ikke sikker på at det er nødvendig.
  • Gamecube -kontakt #2 - A6 på stm32 -kortet
  • 1Kohm motstand mellom Gamecube socket #2 og 3.3V på stm32 board (eller på protoboard)
  • Gamecube -kontakt #3 og #4 - malt på stm32 -kortet
  • Gamecube -kontakt #6 - 3.3V på stm32 -kortet (eller på protoboardet)
  • LED i serie med 220ohm (eller større) motstand mellom A0 på stm32 -kortet og 3,3V (negativ ende (flat) til PA0; positiv ende til 3,3V)
  • Gjenta med LED+motstand mellom A1 og 3.3V, A2 og 3.3V, og A3 og 3.3V
  • Midlertidig bytte mellom A5 på stm32 -kortet (inkrementmodus) og 3.3V og en annen mellom A4 og 3.3V (reduksjonsmodus); denne bryteren øker modusnummeret
  • Veksle mellom A8 og 3.3V
  • treningsmaskin bakken - stm32 bakken
  • treningsmaskinens positive signal - stm32 bord A7 (merk at A7 bare er bra for 3,3V; hvis treningsmaskinen din er 5V, bruk A9 og rediger gamecube.h)
  • Nunchuck bakken (merket - på adapterkortet) - stm32 bakken
  • Nunchuck +3.3V (merket +) - stm32 3.3V
  • Nunchuck SDA (merket D) - stm32 B7
  • Nunchuck SCL (merket C) - stm32 B6
  • 10Kohm motstand mellom Nunchuck SDA og 3.3V på stm32 -kortet
  • 10Kohm motstand mellom Nunchuck SCL og 3.3V på stm32 -kortet.

Trinn 5: Installer Sketch

Installer Sketch
Installer Sketch
Installer Sketch
Installer Sketch

Last ned min Gamecube USB Adapter -skisse og last den inn i Arduino IDE. Det er noen alternativer å kontrollere i gamecubecontroller.h:

  • fjerne // foran #define ENABLE_EXERCISE_MACHINE (alle må gjøre dette)
  • hvis du trengte å flytte treningsmaskinens tilkobling til A9, endrer du PA7 til PA9 i linjen const uint32_t rotationDetector = PA7
  • hvis deteksjonspulsen for treningsmaskinrotasjon er høy, endre #define ROTATION_DETECTOR_CHANGE_TO_MONITOR FALLING til #define ROTATION_DETECTOR_CHANGE_TO_MONITOR RISING
  • hvis du ikke vil bruke en Nunchuck, sett // foran #define ENABLE_NUNCHUCK
  • Hvis du ikke vil bruke en Gamecube -kontroller, setter du // foran #define ENABLE_GAMECUBE.

Velg Verktøy |. I Arduino IDE Styret | Generisk STM32F103C -serie.

Trykk på høyre pilopplastningsknapp. Vær oppmerksom på at du må trykke på tilbakestillingsknappen (eller koble fra/plugge) kortet til rett tid hvis du får en melding om at kortet ikke blir gjenkjent.

Trinn 6: Tren maskinen

Treningsmaskin -tilkobling
Treningsmaskin -tilkobling
Treningsmaskin -tilkobling
Treningsmaskin -tilkobling
Treningsmaskin -tilkobling
Treningsmaskin -tilkobling
Treningsmaskin -tilkobling
Treningsmaskin -tilkobling

Splice i en kontakt for treningsmaskinforbindelsen. På vår elliptiske maskin loddet jeg den inn, mens jeg på treningssykkelen kunne bruke mannlige og kvinnelige dupont -kontakter. På den elliptiske laget jeg et hull i siden av konsollen for å passe til tilkoblingen. På treningsmaskinen har jeg bare ledninger som stikker ut av den, og en liten 3D -trykt eske (OpenSCAD -fil) på utsiden.

Trinn 7: Project Case

Project Case
Project Case
Project Case
Project Case
Project Case
Project Case
Project Case
Project Case

Man kan legge prosjektet inn i en liten pappeske, en tupperware -beholder eller et tilpasset 3D -trykt skap. Siden jeg har en 3D -skriver, gikk jeg for tilpasset kabinett. OpenSCAD- og STL -filene er her.

Føttene er designet for å lime (superlim fungerer) til bunnen, og for å ha klissete gummiføtter som sitter fast i dem.

Jeg har også varmlimt noen krokbøyle til både prosjektetuiet og treningsmaskinene.

Trinn 8: Bruk

Bruk
Bruk
Bruk
Bruk
Bruk
Bruk
Bruk
Bruk

De to knappene kan veksle mellom opptil 16 forskjellige emuleringsmoduser (du kan faktisk ha flere, men det er bare fire lysdioder i prosjektet for å vise modusnummeret). Emuleringsmodusene er definert i gamecubecontroller.h i skissen. For de fleste spill kan du bruke modus 1, enhetlig glidebryter med 100% hastighet. Den emulerte joysticken har en glidebryter (faktisk to glidebrytere, men begge gjør det samme) som styres av treningsmaskinens rotasjon. Knappene og joysticken styres av Gamecube -kontrolleren eller Nunchuck. På Windows støtter noen spill en XBox 360 -kontroller, men ikke en USB -joystick. For dem, bruk modus 13 (trykk ned -knappen fra modus 1).

Modus 9 og 10 lar deg tråkke saktere og fortsatt få full glidende depresjon, noe som er fint for barn eller for treningsmaskiner som er satt til høyere motstand. Du kan også justere hastighetene i treningsmaskinen.ino.

Det er mange andre emuleringsmoduser. En utskrivbar referanse er inkludert i modellist.pdf med skissen.

Når du tråkker på treningsmaskinen, bytter lysdiodene på prosjektet fra å vise gjeldende modusnummer til hastigheten. Når alle fire lysene er tent, er hastigheten din maksimal (den emulerte glidebryteren har maksimal forlengelse)-på det tidspunktet får du ingen fordel i spillet av å gå raskere. I tillegg er den blå LED -en på STM32F1 -kortet på når alt fungerer, men blinker når rotasjonssensoren utløses.

For å reversere bevegelsen, vri vippebryteren for retning på adapterboksen.

På Windows, kjør joy.cpl for å kalibrere og se hvordan ting fungerer. Fordi det er en plage å måtte pedalere veldig fort for å kalibrere den emulerte joysticken, er det en måte å jukse for kalibrering. Hvis du holder deg stille i omtrent 10 sekunder på Gamecube -kontrolleren, kan du begynne å bruke skulderknappene for å kontrollere de emulerte joystick -glidebryterne. Med Nunchuck, mens du holder modus-minus-knappen, kan du bruke styrespaken opp/ned for å kontrollere de emulerte glidebryterne i stedet.

Hvis du vil ha en GUI for bytte av emuleringsmoduser, inkluderer skissen på Windows skissen mode.py, et python -skript med en GUI for bytte av moduser. Du kan også påkalle mode.py i en batchfil som starter et spill.

To spill som jeg synes fungerer veldig bra med treningsmaskinen er Toybox Turbos og SuperTuxCart (gratis).

Adapteren inneholder også mange andre emuleringsfunksjoner. For eksempel kan du bruke den som en enkel Nunchuck eller Gamecube Controller -adapter, som emulerer joystick, tastatur (f.eks. Piler/WASD) og/eller mus. Det er mange moduser oppført i gamecubecontroller.h. Du kan også koble til en Dance Dance Revolution Gamecube/Wii-kompatibel pute, og bruke den til å spille spill som ikke er designet for det, som Tetris, for ekstra moro og trening.

Anbefalt: