Oefenmasjien USB -spelbeheerder: 8 stappe (met foto's)
Oefenmasjien USB -spelbeheerder: 8 stappe (met foto's)
Anonim
Oefenmasjien USB -spelbeheerder
Oefenmasjien USB -spelbeheerder
Oefenmasjien USB -spelbeheerder
Oefenmasjien USB -spelbeheerder
Oefenmasjien USB -spelbeheerder
Oefenmasjien USB -spelbeheerder
Oefenmasjien USB -spelbeheerder
Oefenmasjien USB -spelbeheerder

Om oefening in myself en familie aan te moedig, het ek 'n adapter gemaak wat 'n standaard USB -spelbeheerder -adapter naboots, maar die bewegingsnelheid van die spel beheer deur op 'n elliptiese masjien of oefenfiets te trap. Dit is veral lekker vir wedrenne. Dit motiveer beslis 'n mens om vinnig te trap as jy wedrenne speel.

Die belangrikste hardeware is 'n $ 2 "swart pil" STM32F103C8 -ontwikkelingsbord met die stm32duino Arduino -kern en 'n USB HID -biblioteek wat ek ontwikkel het op grond van die kernvurk van libarra111. Die STM32F1 is vinnig en goedkoop en het volspoed-USB-ondersteuning, so dit is perfek vir die projek.

Om dit te gebruik, moet u die rotasiesensor op die elliptiese of oefenfiets tik (as u rotasiesensor anders werk as dié op ons masjiene-ongeveer 3v, aktief laag-moet u moontlik die kring en/of kode verander).

Die elliptiese/fiets rotasie spoed beheer die kontroleerder. Boonop steek u 'n standaard Wii Nunchuck- of Gamecube -kontroleerder in die adapter vir joystickbeweging, knoppies, ens. Daar is baie verskillende beheermodusse. Byvoorbeeld, kleiner kinders moet moontlik hul spoed effens verhoog, en sommige speletjies kan 'n ander beheerskema gebruik. Daar is 'n aantal ingeboude beheerskemas in die sagteware, en ander kan maklik by die kode gevoeg word. Die toestel kan 'n USB -spelbeheerder, sleutelbord, muis, XBox 360 -kontroleerder of 'n kombinasie van die eerste drie navolg.

Bewegingsrigting word tans nie opgespoor nie: om tussen vooruit- en agteruitbeweging te skakel, het die adapter 'n skakelaar. (Alternatiewelik kan u 'n magnetiese sensor met 'n hall-effek soos hierdie toestel gebruik, en die kring en sagteware verander.)

Die adapter werk as 'n standaard USB -beheerder, sodat u dit kan gebruik met Windows, Linux, OS X, Android, ens.

As 'n bonus het die adapter al die funksies van hierdie projek, wat funksioneer as 'n volledige funksie-gamecube-adapter, waarmee u Gamecube-beheerders op 'n rekenaar kan gebruik, insluitend die bestuur van speletjies met Gamecube/Wii-versoenbare Dance Dance Revolution-dansmatte.

Die koste beloop ongeveer $ 10, plus omhulsel (ek het 'n 3D -drukbare ontwerp), drade en soldeersel. Dele:

  • "Black Pill" stm32f103c8 ontwikkelingsbord ($ 2 op Aliexpress)
  • Gamecube -aansluiting ($ 1,60 op Aliexpress, vir 'n gamecube -verlengsnoer wat afgesny kan word)
  • Nunchuck socket breakout board ($ 0,51 op Aliexpress; soek na Wiichuck)
  • Klein skakelaar met twee posisies (onder $ 1 op Aliexpress)
  • U keuse van tweeledige manlike en vroulike verbindings (ongeveer $ 1 op Aliexpress as u 'n 5,5 mm-kragvatverbinding het); U benodig een vroulike aansluiting per oefenmasjien
  • 2 tasbare skakelaars (minder as $ 0,50 op Aliexpress)
  • 4 rooi LED's (minder as $ 0,50 op Aliexpress; u kan ook 'n klein Nokia LCD -skerm gebruik)
  • kapasitors: 10uF elektrolities en opsioneel 100nF
  • weerstande: 1 x 100K, 2 x 10K, 1 x 1K, 4 x 220ohm
  • klein protobord (minder as $ 1 op Aliexpress).

'N Nunchuck is goed vir eenhandige gebruik met 'n elliptiese masjien. Op 'n oefenfiets kan u 'n tweehandige adapter gebruik, soos die Gamecube. As u slegs een van hierdie twee bedieningsopsies wil gebruik, kan u minder verbindings gebruik.

U benodig ook 'n rekenaar, 'n soldeerbout en 'n multimeter. U benodig ook 'n UART-na-USB-brug (ek het 'n Arduino Mega gebruik wat ek vir 'n ander projek gehad het, of u kan 'n CP2102-module op Aliexpress koop vir 'n dollar) om 'n selflaaiprogram op u swart pil te installeer om dit saam met die Arduino -omgewing, anders kan u nog 'n paar dollar spandeer en die ontwikkelingsbord van RobotDyn kry met 'n Arduino -laaiprogram vooraf gelaai.

Laat ek byvoeg dat ek deelneem aan die Wheels -wedstryd, want dit is 'n manier om die virtuele wiele in motorsportspeletjies op 'n rekenaar aan die fisiese wiele van oefenfietse en elliptiese motors te koppel.

Stap 1: Tik in die rotasiesensor

Tik in die rotasiesensor
Tik in die rotasiesensor
Tik in die rotasiesensor
Tik in die rotasiesensor
Tik in die rotasiesensor
Tik in die rotasiesensor
Tik in die rotasiesensor
Tik in die rotasiesensor

Beide die oefenmasjiene wat ek gekap het, het 'n konsole wat die snelheid aandui. Daar loop drade tussen die konsole en die liggaam van die masjien. U moet by hierdie drade aansluit om toegang tot data te verkry. As u masjiene soos myne is, kan die konsole verwyder word, en daar vind u 'n lintkabel (ellipties) of twee drade (fiets). Ek het hierby ingegaan deur die drade los te maak en dit te oorbrug met individuele springers van man tot vrou wat ek kon aanpak.

Gebruik trial and error en 'n multimeter om 'n paar drade te identifiseer tussen wat 'n spanningspuls het tydens 'n volle rotasie.

Die boor is basies die volgende: koppel die multimeter aan 'n paar drade (wees versigtig om niks te kort nie) terwyl die masjien loop, en draai die pedale stadig. In albei ons masjiene is daar 'n paar drade waartussen die spanning normaalweg ongeveer +3V is, maar tydens 'n kort gedeelte van die rotasie val dit op die grond: dit is 'n aktief-lae skema. U vind moontlik dat u masjien 'n aktiewe hoë skema het, waar die meeste rotasie gemaal word en die pols positief is, en dan moet u die Arduino-skets wysig.

As u dink dat daar 'n kans is dat enige van die drade in die konsole waarmee u te doen het, 'n netstroomnet is, beveel ek aan om te stop tensy u regtig weet wat u doen. Gelukkig is ons oefenfiets battery -aangedrewe en kan ons elliptiese aansluit by 'n muurwrat, sodat daar slegs ongeveer 12V DC rondom die konsole is.

In die geval van die oefenfiets was dit regtig maklik. Daar was net vier drade. Twee was vir die hartklopmeter en twee vir die rotasiesensor.

Die elliptiese het baie meer drade, en dit was dus meer werk. Die brute-force metode is dit. Heg 'n multimeter aan 'n paar drade. Draai stadig op die pedale (of net 'n bietjie meer), en kyk of daar 'n spanningsdaling of sprong is. Indien wel, het u dit. Indien nie, herhaal vir nog 'n paar. Dit is baie probeer en fout: vir 13 drade is dit 78 rotasies.

Hier is 'n truuk wat u kan help om die soektog na die regte draadpaar te bespoedig. U hoop miskien dat u masjien, net soos myne, die detektorspanning normaalweg hoog het met 'n lae polsslag. As dit die geval is, dan het u 'n goeie kans dat die twee detektordrade ongeveer +3V of +5V tussen hulle het as u die pedale op 'n ewekansige plek laat. Doen dus slegs die pedaalrotasietoets vir die drade wat +3V of +5V tussen hulle het.

Nog 'n truuk. U kan moontlik identifiseer waar die rotasiesensor in die pedaalrotasie begin. U masjien kan byvoorbeeld iets op die skerm flits, of die spoedweergawe opdateer, of aktiveer vanuit die slaapmodus, of 'n piep. As dit die geval is, skuif die pedale ongeveer 1/3 van die rotasie weg en soek dan pare drade wat 3-5V tussen hulle het, en toets die deur die pedale te skuif na die posisie waar die sensor geaktiveer word.

As u die aarddraad kan identifiseer, kan u die proses aansienlik bespoedig, aangesien u slegs tussen die grond en elke onbekende draad hoef te gaan. Vreemd genoeg was die grond van die kragtoevoer op ons elliptiese kant nie dieselfde as die grond van die rotasiedetektor nie.

Sodra u die drade geïdentifiseer het, teken dit aan. Maak seker dat u let op:

  • die hoogspanningsvlak: as dit meer as ongeveer 3.3V maar nie meer as 5V is nie, wil u die kring verander om pen A9 in plaas van A7 te gebruik vir rotasie-opsporing, aangesien pen A9 5V-toleransie is en A7 nie, en wysig een reël in my skets; As dit meer as 5V is, moet u 'n spanningsverdeler byvoeg
  • of die rotasie -opsporingspuls laag of hoog is: as die pols hoog is, moet u 'n reël in my Arduino -skets wysig.

As u 'n ossilloskoop het en die oefenmasjien op batterye werk, kan u ook die ossilloskoop in plaas van die multimeter gebruik. (As die oefenmasjien by die AC ingeskakel is en u ossilloskoop ook, moet u weet van grondlusse en hoe u dit kan vermy. Wees versigtig!)

Stap 2: Berei die ontwikkelingsraad voor

Berei die ontwikkelingsraad voor
Berei die ontwikkelingsraad voor
Berei die ontwikkelingsraad voor
Berei die ontwikkelingsraad voor
Berei die ontwikkelingsraad voor
Berei die ontwikkelingsraad voor

Soldeer die ses sentrale springpenne op u swart pil.

As u 'n RobotDyn-bord met die Arduino-laaier het, verbind B0- en B1- met die middelste penne, en u is klaar met die stap.

Andersins moet u die selflaaiprogram nou installeer. U benodig óf 'n selfstandige UART -na -USB -brug, óf u kan 'n Arduino Uno of Mega hiervoor gebruik. Alhoewel die swart pil op 3.3V werk, is die UART -penne 5V -verdraagsaam, dus moenie bekommerd wees of u aansluiting op 3.3V of 5V werk nie.

As u 'n Uno of Mega het, plaas 'n springkabel tussen RESET en GROUND. Dit maak van die Arduino 'n toegewyde UART -na -USB -brug, behalwe dat die TX/RX -penne die omgekeerde is van hoe dit gewoonlik op 'n aansluiting is.

Laai die bootloader binêre af. U wil generic_boot20_pb12.bin hê. Installeer ST's Flash Loader Demonstrator op Windows. Gebruik Linux in plaas daarvan (en miskien OS X en selfs Windows as u opdraggereedskap verkies), maar my instruksies is vir Windows.

Maak die volgende verbindings:

  • PA9 na UART brug RX ("TX" as u die Arduino -truuk gebruik)
  • PA10 na UART brug TX ("RX" as u die Arduino -truuk gebruik)
  • G na UART -bruggrond

Ek hou daarvan om wenke vir logika te gebruik om die verbindings aan die STM32-kant te maak, maar u kan ook net 'n paar drade soldeer wat u later kan afsny (of die soldeer as u netjies wil wees).

Koppel u UART -brug aan u rekenaar. Skakel die Black Pill aan via die USB -poort (dit is die beste as u dit aan 'n laaier koppel eerder as aan die rekenaar, aangesien die rekenaar waarskynlik sal kla oor 'n onbekende USB -toestel). Begin die Flash Loader Demonstrator. Kies die COM -poort vir u UART -brug. Kies "Verwyder beskerming" indien beskikbaar. Kies 'n 64 kb eerder as 128 kb flits weergawe. En laai die bootloader binêre op.

Ontkoppel alles en skuif dan die trui van B0+/middel na B0-/middel. U het nou 'n selflaaiprogram wat u met die Arduino IDE kan gebruik.

Stap 3: Berei Stm32duino voor in Arduino IDE

Berei Stm32duino voor in Arduino IDE
Berei Stm32duino voor in Arduino IDE
Berei Stm32duino voor in Arduino IDE
Berei Stm32duino voor in Arduino IDE

Ek neem aan dat u die nuutste Arduino IDE geïnstalleer het.

In gereedskap | Rade | Boards Manager, installeer ondersteuning vir die Arduino Zero (plaas net 'n nul in die soektog, klik op die inskrywing wat gevind is en dan installeer). Ja, u werk nie met 'n nul nie, maar dit sal die regte gcc -samesteller installeer.

Laai dan die stm32duino -kern af. Op Windows raai ek aan om die zip -lêer af te laai, want toe ek die lêers nagegaan het (weliswaar met svn), het ek probleme met die toestemming gehad met lêers in die Windows -gereedskapgids wat herstel moes word. Plaas die tak in Arduino/Hardware/Arduino_STM32 (sodat u dopgehou soos Arduino/Hardware/Arduino_STM32/STM32F1, ens.) In Windows kan u bestuurders installeer deur bestuurders / win / install_drivers.bat te bestuur.

Installeer my USBHID -biblioteek: Gaan na Skets | Sluit biblioteek in | Bestuur biblioteke en soek USBHID. Klik daarop en klik op Installeer.

Installeer my GameControllersSTM32 -biblioteek: Gaan na Skets | Sluit biblioteek in | Bestuur biblioteke en soek na GameControllers. Klik daarop en klik op Installeer.

Stap 4: Skakel

Kring
Kring
Kring
Kring
Kring
Kring
Kring
Kring

My opstelling gebruik vier LED's om die huidige emulasiemodus in binêre aan te dui (ja, 'n mens kan 'n LCD-skerm gebruik, maar ek het LED's laat lê toe ek dit gebou het), twee drukknoppies om die modus op en af te skakel (en ander truuks) en 'n skakelaar om die bewegingsrigting te verander.

Boonop is daar 'n I2C -invoer van die Nunchuck en 'n aansluiting vir die Gamecube -beheerder. As u slegs een van hierdie twee wil ondersteun, kan u net gamecube.h in die skets wysig en soldeer.

Ek het 'n klein bietjie protobord gebruik om die vier-modus LED's en twee modus-skakelaarknoppies (op en af) te monteer, sowel as die een optrekweerstand vir Gamecube-data. Ek het 3.3V na die protobord gebring, maar ek het nie nodig gehad om die grond daaruit te haal nie, alhoewel u kan as u wil. Ek het nog 'n klein bietjie protobord gebruik om die Nunchuck -aansluiting te monteer.

Sny die Gamecube -kabel. U wil werk met die aansluitkant, die een waarmee u beheerder sal aansluit. Strook kabels vir aansluiting.

Maak nou hierdie verbindings volgens die kringdiagram:

  • 10uF kondensator tussen 3.3v en grond (met die min kant van enige elektrolytika op die grond). Dit moet so na as moontlik aan die chip wees, so ek het dit regs op die ontwikkelbord gesoldeer eerder as op die protobord. Vir 'n goeie maat kan u 'n 100nF byvoeg soos ek, maar ek is nie seker of dit nodig is nie.
  • Gamecube -aansluiting #2 - A6 op stm32 -bord
  • 1Kohm -weerstand tussen Gamecube -aansluiting #2 en 3.3V op stm32 -bord (of op protobord)
  • Gamecube -aansluiting #3 en #4 - gemaal op stm32 -bord
  • Gamecube -aansluiting #6 - 3.3V op stm32 -bord (of op protobord)
  • LED in serie met 220ohm (of groter) weerstand tussen A0 op stm32 -bord en 3.3V (negatiewe einde (plat) na PA0; positiewe einde tot 3.3V)
  • Herhaal met LED+weerstand tussen A1 en 3.3V, A2 en 3.3V, en A3 en 3.3V
  • Skakel kortliks tussen A5 op stm32 -bord (inkrement -modus) en 3.3V en 'n ander tussen A4 en 3.3V (afnemingsmodus); hierdie skakelaar verhoog die modusnommer
  • Skakelaar tussen A8 en 3.3V
  • oefenmasjien grond - stm32 grond
  • oefenmasjien positiewe sein - stm32 bord A7 (let op dat A7 slegs goed is vir 3.3V; as u oefenmasjien 5V is, gebruik A9 en wysig gamecube.h)
  • Nunchuck -grond (gemerk - op my adapterbord) - stm32 -grond
  • Nunchuck +3.3V (gemerk +) - stm32 3.3V
  • Nunchuck SDA (gemerk D) - stm32 B7
  • Nunchuck SCL (gemerk C) - stm32 B6
  • 10Kohm -weerstand tussen Nunchuck SDA en 3.3V op stm32 -bord
  • 10Kohm -weerstand tussen Nunchuck SCL en 3.3V op stm32 -bord.

Stap 5: Installeer Sketch

Installeer Sketch
Installeer Sketch
Installeer Sketch
Installeer Sketch

Laai my skets van die Gamecube USB -adapter af en laai dit in die Arduino IDE. Daar is 'n paar opsies om in gamecubecontroller.h te beheer:

  • verwyder // voor #define ENABLE_EXERCISE_MACHINE (almal moet hierdie een doen)
  • as u die oefenmasjienverbinding na A9 moes skuif, verander PA7 na PA9 in die const uint32_t rotationDetector = PA7 -lyn
  • as u oefenmasjien -rotasie -opsporingspuls hoog is, verander #define ROTATION_DETECTOR_CHANGE_TO_MONITOR FALLING na #defineer ROTATION_DETECTOR_CHANGE_TO_MONITOR RISING
  • as u nie 'n Nunchuck wil gebruik nie, sit // voor #define ENABLE_NUNCHUCK
  • as u nie 'n Gamecube -beheerder wil gebruik nie, sit // voor #define ENABLE_GAMECUBE.

Kies Tools |. In die Arduino IDE Raad | Generiese STM32F103C -reeks.

Druk die oplaai-knoppie regs-pyltjie. Let daarop dat u moontlik op die reset -knoppie moet druk (of die bord moet ontkoppel/inprop) as u 'n boodskap kry dat die bord nie herken word nie.

Stap 6: Oefen masjienaansluiting

Oefening met masjien
Oefening met masjien
Oefening met masjien
Oefening met masjien
Oefening met masjien
Oefening met masjien
Oefening met masjien
Oefening met masjien

Verbind in 'n domkrag vir u oefenmasjienaansluiting. Op ons elliptiese masjien het ek dit gesoldeer, terwyl ek op die oefenfiets manlike en vroulike dupont -verbindings kon gebruik. Op die elliptiese gat het ek 'n gat in die kant van die konsole gemaak om by die aansluiting te pas. Op die oefenmasjien steek daar net drade uit, en 'n klein 3D -gedrukte boks (OpenSCAD -lêer) aan die buitekant.

Stap 7: Projekkas

Projek saak
Projek saak
Projek saak
Projek saak
Projek saak
Projek saak
Projek saak
Projek saak

U kan die projek in 'n klein kartondoos, 'n tupperware -houer of 'n 3D -gedrukte omhulsel omhul. Aangesien ek 'n 3D -drukker het, het ek na die aangepaste omhulsel gegaan. Die OpenSCAD- en STL -lêers is hier.

Die voete is ontwerp om gom (supergomwerk) aan die onderkant vas te plak en klewerige rubbervoete vas te steek.

Ek het ook 'n haak-en-lus-bevestiging aan die projekkas en die oefenmasjiene vasgeplak.

Stap 8: Gebruik

Gebruik
Gebruik
Gebruik
Gebruik
Gebruik
Gebruik
Gebruik
Gebruik

Die twee knoppies kan wissel tussen tot 16 verskillende emulasiemodusse (u kan eintlik meer hê, maar daar is slegs vier LED's in die projek om die modusnommer te wys). Die emulasiemetodes word gedefinieer in gamecubecontroller.h in die skets. Vir die meeste speletjies kan u modus 1, verenigde joystick teen 100% spoed gebruik. Die geëmuleerde joystick het 'n skuifbalk (eintlik twee skuifbalkies, maar albei doen dieselfde) wat deur die oefenmasjienrotasie beheer word. Die knoppies en die joystick self word beheer deur die Gamecube -beheerder of Nunchuck. Op Windows ondersteun sommige speletjies 'n XBox 360 -beheerder, maar nie 'n USB -joystick nie. Gebruik modus 13 (druk op die afknoppie in modus 1).

Met die modusse 9 en 10 kan u stadiger trap en steeds 'n volle skuif kry, wat goed is vir kinders of vir oefenmasjiene wat 'n hoër weerstand het. U kan ook die snelhede in oefenmasjien.ino aanpas.

Daar is baie ander emuleringsmetodes. 'N Drukbare verwysing is ingesluit in modelist.pdf by die skets.

As u op die oefenmasjien trap, skakel die LED's op die projek van die huidige modusnommer na die spoed. As al vier ligte brand, is u spoed maksimum (die geëmuleerde skuifbalk het maksimum uitbreiding)-op daardie stadium kry u geen voordeel in die spel as u vinniger gaan nie. Boonop is die blou LED op die STM32F1 -bord aan wanneer alles werk, maar dit knipper as die rotasiesensor geaktiveer word.

Om die beweging om te keer, draai die rigting -skakelaar op die adapterkas.

Begin op joy.cpl op Windows om te kalibreer en te sien hoe dinge werk. Omdat dit 'n oorlas is om baie vinnig te moet trap om die geëmuleerde joystick te kalibreer, is daar 'n manier om te kul vir kalibrasie. As u ongeveer 10 sekondes stil bly op die Gamecube -beheerder, kan u die skouerknoppies begin gebruik om die geëmuleerde joystick -skuifknoppies te beheer. Terwyl u met die Nunchuck die modus-minus-knoppie ingedruk hou, kan u die joystick op/af gebruik om die geëmuleerde skuifknoppies in plaas daarvan te beheer.

As u 'n GUI wil hê om emulasiemodusse oor te skakel, bevat die skets op Windows mode.py, 'n python -script met 'n GUI om van modus te skakel. U kan ook mode.py aanroep in 'n bondel lêer wat 'n speletjie begin.

Twee speletjies wat ek gevind het dat hulle baie goed met die oefenmasjien werk, is Toybox Turbos en SuperTuxCart (gratis).

Die adapter bevat ook baie ander emulasie -funksies. U kan dit byvoorbeeld gebruik as 'n eenvoudige Nunchuck- of Gamecube Controller -adapter, wat die joystick, die sleutelbord (bv. Pyle/WASD) en/of die muis naboots. In gamecubecontroller.h is daar baie modusse. U kan ook 'n Dance Dance Revolution Gamecube/Wii-versoenbare pad aansluit, en dit gebruik om speletjies te speel wat nie daarvoor ontwerp is nie, soos Tetris, vir ekstra pret en oefening.