Innehållsförteckning:

Träningsmaskin USB -spelkontroller: 8 steg (med bilder)
Träningsmaskin USB -spelkontroller: 8 steg (med bilder)

Video: Träningsmaskin USB -spelkontroller: 8 steg (med bilder)

Video: Träningsmaskin USB -spelkontroller: 8 steg (med bilder)
Video: 225kg marklyft 2024, November
Anonim
Träningsmaskin USB -spelkontroller
Träningsmaskin USB -spelkontroller
Träningsmaskin USB -spelkontroller
Träningsmaskin USB -spelkontroller
Träningsmaskin USB -spelkontroller
Träningsmaskin USB -spelkontroller
Träningsmaskin USB -spelkontroller
Träningsmaskin USB -spelkontroller

För att uppmuntra till träning i mig själv och i familjen gjorde jag en adapter som emulerar en vanlig USB -spelkontrolladapter men som styr spelets rörelsehastighet genom att trampa på en elliptisk maskin eller motionscykel. Det är särskilt trevligt för racingspel. Det motiverar verkligen en att trampa snabbt när man spelar racingspel.

Den huvudsakliga hårdvaran är ett utvecklingsbräda för STM32F103C8 på $ 2 "svart piller" med stm32duino Arduino -kärnan och ett USB HID -bibliotek som jag utvecklat baserat på libarra111s kärngaffel. STM32F1 är snabb och billig och har fullhastighets USB-stöd, så den är perfekt för projektet.

För att använda måste du trycka på rotationssensorn på den elliptiska eller motionscykeln (om din rotationssensor fungerar annorlunda än den på våra maskiner-cirka 3v, aktiv låg-kan du behöva ändra kretsen och/eller koden).

Den elliptiska/cykelrotationshastigheten styr regulatorns reglage. Dessutom ansluter du en vanlig Wii Nunchuck- eller Gamecube -kontroller till adaptern för joystickrörelser, knappar etc. Det finns många olika kontrolllägen. Till exempel kan mindre barn behöva öka sin hastighet lite, och vissa spel kan använda ett annat kontrollschema. Det finns ett antal inbyggda kontrollscheman i programvaran, och andra kan enkelt läggas till i koden. Enheten kan emulera en USB -spelkontroller, tangentbord, mus, XBox 360 -kontroller eller någon kombination av de tre första.

Rörelseriktning detekteras för närvarande inte: för att växla mellan framåt och bakåt har adaptern en vippströmbrytare. (Alternativt kan man använda en hall-effekt magnetisk sensor som den här enheten och ändra krets och programvara.)

Adaptern fungerar som en vanlig USB -kontroller, så du kan använda den med Windows, Linux, OS X, Android, etc.

Som en bonus har adaptern alla funktioner i detta projekt, som fungerar som en fullfunktions Gamecube-adapter, så att du kan använda Gamecube-styrenheter på en dator, inklusive styrning av spel med Gamecube/Wii-kompatibla Dance Dance Revolution-dansmattor.

Kostnaden är under cirka $ 10, plus fodral (jag har en 3D -utskrivbar design), trådar och löd. Delar:

  • "Black Pill" stm32f103c8 utvecklingskort ($ 2 på Aliexpress)
  • Gamecube -uttag ($ 1,60 på Aliexpress, för en Gamecube -förlängningssladd som kan klippas ner)
  • Nunchuck socket breakout board ($ 0,51 på Aliexpress; sök efter Wiichuck)
  • Liten omkopplare för två lägen (under $ 1 på Aliexpress)
  • Ditt val av tvåledare han- och honkontakter (cirka $ 1 på Aliexpress om du går med 5,5 mm strömkontakter); du behöver en honkontakt per träningsmaskin
  • 2 taktila omkopplare (under $ 0,50 på Aliexpress)
  • 4 röda lysdioder (under $ 0,50 på Aliexpress; du kan också använda en liten Nokia LCD -skärm)
  • kondensatorer: 10uF elektrolytisk och valfri 100nF
  • motstånd: 1 x 100K, 2 x 10K, 1 x 1K, 4 x 220ohm
  • litet prototavla (under $ 1 på Aliexpress).

En Nunchuck är bra för enhandsanvändning med en elliptisk maskin. På en motionscykel kan du använda en tvåhandsadapter som Gamecube. Om du bara vill använda ett av dessa två kontrollalternativ kan du använda färre anslutningar.

Du behöver också en dator, ett lödkolv och en multimeter. Du behöver också en UART-till-USB-brygga (jag använde en Arduino Mega som jag hade för ett annat projekt, eller så kan du köpa en CP2102-modul på Aliexpress för en dollar) för att installera en startladdare på ditt svarta piller för att använda den med Arduino -miljö, annars kan du spendera ett par dollar och få RobotDyns utvecklingsbräda med en Arduino -startladdare förinstallerad.

Låt mig tillägga att jag deltar i detta i Wheels -tävlingen, eftersom det är ett sätt att länka de virtuella hjulen i bilracingspel på en dator med de fysiska hjulen på motionscyklar och elliptiska.

Steg 1: Tryck på Into Rotation Sensor

Tryck på Into Rotation Sensor
Tryck på Into Rotation Sensor
Tryck på Into Rotation Sensor
Tryck på Into Rotation Sensor
Tryck på Into Rotation Sensor
Tryck på Into Rotation Sensor
Tryck på Into Rotation Sensor
Tryck på Into Rotation Sensor

Båda träningsmaskinerna jag hackade har en konsol som visar hastigheten. Det går ledningar mellan konsolen och maskinens kropp. Du måste trycka på dessa trådar för att komma åt data. Om dina maskiner är som mina kan konsolen tas bort och du hittar där antingen en bandkabel (elliptisk) eller två trådar (cykel). Jag knackade på dessa genom att koppla bort trådarna och överbrygga dem med individuella man-till-kvinnliga hoppare som jag kunde slå på.

Använd trial and error och en multimeter för att identifiera ett par ledningar mellan vilka har en spänningspuls under en full rotation.

I grund och botten är borrmaskinen följande: Anslut multimetern till ett par trådar (var försiktig så att du inte kortar något) medan maskinen är igång och rotera pedalerna långsamt. I båda våra maskiner finns det ett par ledningar mellan vilka normalt sett är spänningen runt +3V, men under en kort del av rotationen faller den till marken: detta är ett aktivt-lågt schema. Du kanske upptäcker att din maskin har ett aktivt-högt schema där det mesta av rotationen är slipad, och pulsen är positiv, och sedan måste du redigera Arduino-skissen.

Om du tror att det finns någon chans att någon av kablarna till konsolen du har att göra med är nätström, rekommenderar jag att du slutar om du inte riktigt vet vad du gör. Lyckligtvis är vår motionscykel batteridriven och våra elliptiska ansluts till en väggvarta så det finns bara cirka 12V DC runt konsolen.

När det gäller motionscykeln var det riktigt enkelt. Det fanns bara fyra ledningar. Två var för pulsmätaren och två för rotationssensorn.

Den elliptiska hade mycket fler trådar, och så det var mer arbete. Brute-force-metoden är detta. Fäst en multimeter på ett par ledningar. Gör långsamt en full rotation (eller lite mer för säkerhets skull) på pedalerna och se om det finns ett spänningsdopp eller hopp. Om ja, du har det. Om inte, upprepa för ett annat par. Det är mycket försök och fel: för 13 ledningar är det 78 varv.

Här är ett trick som kan hjälpa dig att påskynda sökningen efter rätt trådpar. Du kanske hoppas att din maskin, precis som min, har detektorspänningen normalt hög med låg puls. Om så är fallet, om du lämnar pedalerna på en slumpmässig plats, har du en god chans att de två detektorkablarna har cirka +3V eller +5V mellan dem. Så gör bara pedalrotationstestet för de par trådar som har +3V eller +5V mellan sig.

Ett annat knep. Du kanske kan identifiera var i pedalrotationen rotationssensorn utlöser. Till exempel kan din maskin blinka något på skärmen då, eller uppdatera hastighetsvisningen, eller aktivera från viloläge eller pipa. Om så är fallet, flytta sedan pedalerna ungefär 1/3 av en rotation bort och leta sedan efter par ledningar som har 3-5V mellan dem och testa dem genom att flytta pedalerna till det läge där sensorn utlöses.

Om du kan identifiera jordkabeln kan du påskynda processen avsevärt, eftersom du då bara behöver gå mellan jord och varje okänd tråd. Märkligt, men på vår elliptiska verkade strömförsörjningens mark inte vara densamma som rotationsdetektorns mark.

När du har identifierat trådarna, anteckna dem. Se till att du noterar:

  • högspänningsnivån: om det är mer än ca 3,3V men inte mer än 5V, vill du ändra kretsen för att använda stift A9 istället för A7 för rotationsdetektering eftersom stift A9 är 5V-tolerans och A7 inte, och redigera en rad i min skiss; om det är mer än 5V måste du lägga till en spänningsdelare
  • om rotationsdetekteringspulsen är låg eller hög: om pulsen är hög måste du redigera en rad i min Arduino -skiss.

Om du har ett oscilloskop och träningsmaskinen är batteridriven kan du också använda oscilloskopet istället för multimetern. (Om träningsmaskinen är ansluten till AC och ditt oscilloskop också måste du veta om jordslingor och hur du undviker dem. Var försiktig!)

Steg 2: Förbered utvecklingsnämnden

Förbered utvecklingsnämnden
Förbered utvecklingsnämnden
Förbered utvecklingsnämnden
Förbered utvecklingsnämnden
Förbered utvecklingsnämnden
Förbered utvecklingsnämnden

Löd de sex centrala bygelnålarna på ditt svarta piller.

Om du har ett RobotDyn-kort med Arduino bootloader, anslut B0- och B1- till mittstiftet, och du är klar med steget.

Annars måste du nu installera startladdaren. Du behöver antingen en fristående UART till USB -brygga eller så kan du använda en Arduino Uno eller Mega för detta ändamål. Även om det svarta pillret går på 3,3V, är UART -stiften 5V -toleranta, så oroa dig inte om din kontakt går på 3,3V eller 5V.

Om du har en Uno eller Mega, sätt en bygelkabel mellan RESET och GROUND. Detta gör Arduino till en dedikerad UART till USB -brygga, förutom att TX/RX -stiften är motsatsen till hur de vanligtvis är på en kontakt.

Ladda ner binär bootloader. Du vill ha generic_boot20_pb12.bin. På Windows, installera ST: s Flash Loader Demonstrator. På Linux (och kanske OS X och till och med Windows om du föredrar kommandoradsverktyg), använd det här python -skriptet istället, men mina instruktioner kommer att vara för Windows.

Gör följande anslutningar:

  • PA9 till UART bridge RX ("TX" om du använder Arduino -tricket)
  • PA10 till UART bridge TX ("RX" om du använder Arduino -tricket)
  • G till UART bromark

Jag gillar att använda logiska sondtips för att göra anslutningarna på STM32-sidan, men du kan också bara lödda i några ledningar som du senare kan klippa av (eller avlödda om du vill vara snygg).

Anslut din UART -bro till din dator. Slå på den svarta pillren via USB -porten (bäst om du ansluter den till en laddare snarare än datorn, eftersom datorn troligen kommer att klaga på en okänd USB -enhet). Starta Flash Loader Demonstrator. Välj COM -porten för din UART -bro. Välj "Ta bort skydd" om tillgängligt. Välj en 64kb snarare än 128kb flashversion. Och ladda upp bootloader binär.

Koppla ur allt och flytta sedan bygeln från B0+/center till B0-/center. Du har nu en bootloader som du kan använda med Arduino IDE.

Steg 3: Förbered Stm32duino i Arduino IDE

Förbered Stm32duino i Arduino IDE
Förbered Stm32duino i Arduino IDE
Förbered Stm32duino i Arduino IDE
Förbered Stm32duino i Arduino IDE

Jag antar att du har den senaste Arduino IDE installerad.

I Verktyg | Styrelser | Boards Manager, installera stöd för Arduino Zero (lägg bara in Noll i sökningen, klicka på den hittade posten och sedan Installera). Ja, du arbetar inte med en Zero, men det här kommer att installera rätt gcc -kompilator.

Ladda sedan ner stm32duino -kärnan. I Windows rekommenderar jag att du laddar ner zip -filen, eftersom när jag checkade ut filerna (visserligen med svn) hade jag några behörighetsproblem med filer i Windows -verktygskatalogen som behövde fixas. Sätt grenen i Arduino/Hardware/Arduino_STM32 (så får du mappar som Arduino/Hardware/Arduino_STM32/STM32F1, etc.) På Windows installerar du drivrutiner genom att köra drivers / win / install_drivers.bat.

Installera mitt USBHID -bibliotek: Gå till Sketch | Inkludera bibliotek | Hantera bibliotek och sök efter USBHID. Klicka på den och klicka på Installera.

Installera mitt GameControllersSTM32 -bibliotek: Gå till Sketch | Inkludera bibliotek | Hantera bibliotek och sök efter GameControllers. Klicka på den och klicka på Installera.

Steg 4: Krets

Krets
Krets
Krets
Krets
Krets
Krets
Krets
Krets

Min inställning använder fyra lysdioder för att indikera det aktuella emuleringsläget i binär (ja, man kan använda en LCD-skärm, men jag hade lysdioder liggande när jag byggde detta), två tryckknappar för att växla läge upp och ner (och göra några andra tricks), och en omkopplare för att byta rörelseriktning.

Dessutom finns det en I2C -ingång från Nunchuck och en kontakt till Gamecube -kontrollen. Om du bara vill stödja en av dessa två kan du bara redigera gamecube.h i skissen och spara lite lödning.

Jag använde en liten bit av protoboard för att montera de fyra läges-lysdioderna och två lägesomkopplare (upp och ner), samt det ena uppdragningsmotståndet för Gamecube-data. Jag tog fram 3.3V till protoboardet, men jag behövde inte ta fram marken till det, men du kan om du vill. Jag använde ytterligare en liten protoboard för att montera Nunchuck -kontakten.

Klipp Gamecube -kabeln. Du vill arbeta med uttagssidan, den som din handkontroll ansluter till. Stripkablar för anslutning.

Gör nu dessa anslutningar enligt kretsschemat:

  • 10uF kondensator mellan 3,3v och jord (med minussidan av eventuell elektrolyt i marken). Detta bör vara så nära chipet som möjligt, så jag lödde det direkt på utvecklingsbrädan snarare än protoboardet. För bra ordning kan du lägga till en 100nF som jag gjorde, men jag är inte säker på att det behövs.
  • Gamecube -uttag #2 - A6 på stm32 -kortet
  • 1Kohm -motstånd mellan Gamecube -uttag #2 och 3.3V på stm32 -kortet (eller på protoboard)
  • Gamecube -uttag #3 och #4 - slipat på stm32 -kortet
  • Gamecube -uttag #6 - 3.3V på stm32 -kortet (eller på protoboardet)
  • LED i serie med 220ohm (eller större) motstånd mellan A0 på stm32 -kortet och 3,3V (negativ ände (platt) till PA0; positiv ände till 3,3V)
  • Upprepa med LED+motstånd mellan A1 och 3.3V, A2 och 3.3V och A3 och 3.3V
  • Momentan växling mellan A5 på stm32 -kortet (inkrementläge) och 3.3V och en annan mellan A4 och 3.3V (minskningsläge); denna omkopplare ökar lägesnumret
  • Växla mellan A8 och 3.3V
  • träningsmaskin mark - stm32 mark
  • träningsmaskinens positiva signal - stm32 -kort A7 (notera att A7 bara är bra för 3,3V; om din träningsmaskin är 5V, använd A9 och redigera gamecube.h)
  • Nunchuck -mark (märkt - på mitt adapterkort) - stm32 -jord
  • Nunchuck +3.3V (märkt +) - stm32 3.3V
  • Nunchuck SDA (märkt D) - stm32 B7
  • Nunchuck SCL (märkt C) - stm32 B6
  • 10Kohm -motstånd mellan Nunchuck SDA och 3.3V på stm32 -kortet
  • 10Kohm -motstånd mellan Nunchuck SCL och 3.3V på stm32 -kortet.

Steg 5: Installera Sketch

Installera Sketch
Installera Sketch
Installera Sketch
Installera Sketch

Ladda ner min Gamecube USB Adapter -skiss och ladda den i Arduino IDE. Det finns några alternativ att styra i gamecubecontroller.h:

  • ta bort // framför #define ENABLE_EXERCISE_MACHINE (alla måste göra det här)
  • om du behövde flytta träningsmaskinanslutningen till A9, ändra PA7 till PA9 i linjen const uint32_t rotationDetector = PA7
  • om din träningsmaskin rotationsdetekteringspuls är hög, ändra #define ROTATION_DETECTOR_CHANGE_TO_MONITOR FALLING till #define ROTATION_DETECTOR_CHANGE_TO_MONITOR RISING
  • om du inte vill använda en Nunchuck, lägg // framför #define ENABLE_NUNCHUCK
  • om du inte vill använda en Gamecube -kontroller, lägg // framför #define ENABLE_GAMECUBE.

Välj Verktyg | i Arduino IDE Styrelse | Generisk STM32F103C -serie.

Tryck på högerpilen för uppladdning. Observera att du kan behöva trycka på återställningsknappen (eller koppla ur/ansluta) kortet vid rätt tidpunkt om du får ett meddelande om att kortet inte känns igen.

Steg 6: Träna maskinanslutning

Träningsmaskinanslutning
Träningsmaskinanslutning
Träningsmaskinanslutning
Träningsmaskinanslutning
Träningsmaskinanslutning
Träningsmaskinanslutning
Träningsmaskinanslutning
Träningsmaskinanslutning

Splice i en jack för din träningsmaskinanslutning. På vår elliptiska maskin lödde jag in den, medan jag på träningscykeln kunde använda manliga och kvinnliga dupontkontakter. På elliptiken gjorde jag ett hål i sidan av konsolen för att passa anslutningen. På träningsmaskinen har jag bara trådar som sticker ut ur den och en liten 3D -tryckt låda (OpenSCAD -fil) på utsidan.

Steg 7: Projektfall

Projektfall
Projektfall
Projektfall
Projektfall
Projektfall
Projektfall
Projektfall
Projektfall

Man kan omsluta projektet i en liten kartong, en behållare för tupperware eller ett anpassat 3D -tryckt hölje. Eftersom jag har en 3D -skrivare gick jag för det anpassade höljet. OpenSCAD- och STL -filerna finns här.

Fötterna är utformade för att limma (superlim) på botten och ha klibbiga gummifötter fast i dem.

Jag varmlimmade också lite krokfäste på både projektfodralet och träningsmaskinerna.

Steg 8: Använd

Använda sig av
Använda sig av
Använda sig av
Använda sig av
Använda sig av
Använda sig av
Använda sig av
Använda sig av

De två knapparna kan växla mellan upp till 16 olika emuleringslägen (du kan faktiskt ha fler, men det finns bara fyra lysdioder i projektet för att visa lägesnumret). Emuleringslägena definieras i gamecubecontroller.h i skissen. För de flesta spel kan du använda läge 1, enhetlig reglage joystick med 100% hastighet. Den emulerade joysticken har en reglage (faktiskt två reglage, men båda gör samma sak) som styrs av träningsmaskinens rotation. Knapparna och joysticken i sig styrs av Gamecube -kontrollen eller Nunchuck. I Windows stöder vissa spel en XBox 360 -kontroller men inte en USB -joystick. För dem, använd läge 13 (tryck på nedåtknappen från läge 1).

Lägen 9 och 10 gör att du kan trampa långsammare och fortfarande få full skjutreglering, vilket är bra för barn eller för träningsmaskiner med högre motstånd. Du kan också justera hastigheterna i motionemachine.ino.

Det finns många andra emuleringslägen. En utskrivbar referens ingår i modellist.pdf med skissen.

När du trampar på träningsmaskinen växlar lysdioderna på projektet från att visa aktuellt lägesnummer till hastigheten. När alla fyra lamporna tänds är din hastighet högst (den emulerade reglaget har maximal förlängning)-då får du ingen fördel i spelet av att gå snabbare. Dessutom lyser den blå lysdioden på STM32F1 -kortet när allt fungerar, men blinkar när rotationssensorn utlöses.

För att vända rörelsen, vrid riktningsomkopplaren på adapterboxen.

I Windows, kör joy.cpl för att kalibrera och se hur saker fungerar. Eftersom det är besvärligt att behöva trampa riktigt snabbt för att kalibrera den emulerade joysticken, finns det ett sätt att fuska för kalibrering. Om du håller dig still i cirka 10 sekunder på Gamecube -kontrollen kan du börja använda axelknapparna för att styra de emulerade joystickreglagen. Med Nunchuck, medan du håller läge-minus-knappen, kan du använda joysticken upp/ner för att styra de emulerade reglagen istället.

Om du vill ha ett GUI för att byta emuleringslägen, innehåller skissen i Windows skissen mode.py, ett python -skript med ett GUI för byte av lägen. Du kan också åberopa mode.py i en batchfil som startar ett spel.

Två spel som jag har tyckt fungerar riktigt bra med träningsmaskinen är Toybox Turbos och SuperTuxCart (gratis).

Adaptern innehåller också många andra emuleringsfunktioner. Till exempel kan du använda den som en enkel Nunchuck eller Gamecube Controller -adapter, emulerande joystick, tangentbord (t.ex. pilar/WASD) och/eller mus. Det finns många lägen listade i gamecubecontroller.h. Du kan också ansluta en Dance Dance Revolution Gamecube/Wii-kompatibel pad, och använda den för att spela spel som inte är avsedda för den, som Tetris, för ytterligare nöje och träning.

Rekommenderad: