Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Norėdami paskatinti mankštintis savarankiškai ir šeimoje, sukūriau adapterį, kuris imituoja standartinį USB žaidimų valdiklio adapterį, tačiau valdo žaidimo judėjimo greitį pedalais ant elipsės aparato ar treniruoklio. Tai ypač malonu lenktynių žaidimams. Tai tikrai motyvuoja žaidžiant lenktynių žaidimus greitai spausti pedalus.
Pagrindinė aparatinė įranga yra 2 USD kainuojanti „juodoji piliulė“STM32F103C8 kūrimo plokštė su „stm32duino Arduino“branduoliu ir USB HID biblioteka, sukurta remiantis „libarra111“pagrindine šakute. „STM32F1“yra greitas ir pigus, turi USB spartą, todėl puikiai tinka projektui.
Jei norite naudoti, turite prisiliesti prie elipsinio ar treniruoklio sukimosi jutiklio (jei jūsų sukimosi jutiklis veikia kitaip nei mūsų mašinose-apie 3 V, aktyvus žemas-gali tekti pakeisti grandinę ir (arba) kodą).
Elipsinis/dviračio sukimosi greitis valdo valdiklio slankiklį. Be to, prie adapterio prijungiate standartinį „Wii Nunchuck“arba „Gamecube“valdiklį, kad galėtumėte judinti vairasvirtę, mygtukus ir pan. Yra daug įvairių valdymo režimų. Pavyzdžiui, mažesniems vaikams gali tekti šiek tiek padidinti greitį, o kai kuriuose žaidimuose gali būti naudojama kita valdymo schema. Programinėje įrangoje yra daugybė integruotų valdymo schemų, o kitas galima lengvai pridėti prie kodo. Įrenginys gali imituoti USB žaidimų valdiklį, klaviatūrą, pelę, „XBox 360“valdiklį arba tam tikrą pirmųjų trijų derinį.
Judėjimo kryptis šiuo metu neaptinkama: norint perjungti judėjimą pirmyn ir atgal, adapteris turi perjungimo jungiklį. (Arba galite naudoti salės efekto magnetinį jutiklį, tokį kaip šis prietaisas, ir pakeisti grandinę bei programinę įrangą.)
Adapteris veikia kaip standartinis USB valdiklis, todėl galite jį naudoti su „Windows“, „Linux“, „OS X“, „Android“ir kt.
Kaip priedas, adapteris turi visas šio projekto funkcijas, veikia kaip visapusiškas „Gamecube“adapteris, leidžiantis naudoti „Gamecube“valdiklius kompiuteryje, įskaitant žaidimų valdymą su „Gamecube“/„Wii“suderinamais „Dance Dance Revolution“šokių kilimėliais.
Kaina yra mažesnė nei 10 USD, plius dėklas (turiu 3D spausdinamą dizainą), laidai ir lydmetalis. Dalys:
- „Juodosios tabletės“stm32f103c8 kūrimo lenta (2 USD „Aliexpress“)
- „Gamecube“lizdas (1,60 USD „Aliexpress“už „Gamecube“ilginamąjį laidą, kurį galima nukirpti)
- „Nunchuck“lizdo pertraukimo lenta (0,51 USD „Aliexpress“; ieškokite „Wiichuck“)
- Mažas dviejų padėčių perjungimo jungiklis („Aliexpress“kainuoja mažiau nei 1 USD)
- Jūsų pasirinkimas dviejų laidų vyrų ir moterų jungtys (apie 1 USD „Aliexpress“, jei naudojate 5,5 mm galios statinės jungtis); kiekvienam treniruokliui reikia vienos moteriškos jungties
- 2 lytėjimo jungikliai (mažiau nei 0,50 USD „Aliexpress“)
- 4 raudoni šviesos diodai („Aliexpress“kainuoja mažiau nei 0,50 USD; taip pat galite naudoti mažą „Nokia“LCD ekraną)
- kondensatoriai: 10uF elektrolitiniai ir pasirenkami 100nF
- rezistoriai: 1 x 100K, 2 x 10K, 1 x 1K, 4 x 220ohm
- maža protinė lenta („Aliexpress“kainuoja mažiau nei 1 USD).
„Nunchuck“tinka naudoti viena ranka su elipsine mašina. Naudodami treniruoklį, galite naudoti dviejų rankų adapterį, pvz., „Gamecube“. Jei norite naudoti tik vieną iš šių dviejų valdymo parinkčių, galite naudoti mažiau jungčių.
Jums taip pat reikia kompiuterio, lituoklio ir multimetro. Jums taip pat reikės UART-USB tiltelio (aš naudoju „Arduino Mega“, kurį turėjau kitam projektui; arba galite nusipirkti CP2102 modulį „Aliexpress“už dolerį), kad įdiegtumėte įkrovos įkėlimo programą savo juodoje tabletėje, kad galėtumėte ją naudoti su „Arduino“aplinkoje, kitaip galite išleisti dar porą dolerių ir gauti „RobotDyn“kūrimo lentą su „Arduino“įkrovos įkrovikliu.
Leiskite pridurti, kad aš dalyvauju konkurse „Ratai“, nes tai yra būdas susieti virtualius ratus automobilių lenktynių žaidimuose kompiuteriu su fiziniais dviračių ir elipsės ratais.
1 žingsnis: bakstelėkite į sukimosi jutiklį
Abu treniruokliai, kuriuos nulaužiau, turi konsolę, rodančią greitį. Tarp konsolės ir mašinos korpuso eina laidai. Norėdami pasiekti duomenis, turite prisijungti prie šių laidų. Jei jūsų mašinos yra tokios kaip mano, konsolę galima nuimti ir ten rasite juostinį kabelį (elipsinį) arba du laidus (dviratis). Aš tai padariau, atjungdamas laidus ir sujungdamas juos su atskirais megztiniais nuo vyrų iki moterų, kuriuos galėčiau panaudoti.
Naudokite bandymus ir klaidas ir multimetrą, kad nustatytumėte porą laidų, tarp kurių yra įtampos impulsas viso sukimosi metu.
Iš esmės gręžtuvas yra toks: prijunkite multimetrą prie poros laidų (būkite atsargūs, kad nieko netrumpintumėte), kai mašina veikia, ir labai lėtai pasukite pedalus. Abiejose mūsų mašinose yra pora laidų, tarp kurių paprastai įtampa yra apie +3 V, tačiau per trumpą sukimosi dalį ji patenka į žemę: tai yra aktyvios ir mažos schemos. Galite pastebėti, kad jūsų mašina turi aktyvios ir didelės schemos schemą, kai didžioji sukimosi dalis yra sumalta, o pulsas yra teigiamas, tada turėsite redaguoti „Arduino“eskizą.
Jei manote, kad yra kokia nors tikimybė, kad bet kuris laidas į konsolę, su kuria susiduriate, yra kintamosios srovės maitinimo šaltinis, rekomenduoju sustoti, nebent tikrai žinote, ką darote. Laimei, mūsų treniruokliai maitinami baterijomis, o elipsiniai kištukai įkišami į sieninę karpą, todėl aplink konsolę yra tik apie 12 V nuolatinės srovės.
Treniruoklio atveju tai buvo tikrai lengva. Buvo tik keturi laidai. Du buvo skirti širdies ritmo monitoriui, o du-sukimosi jutikliui.
Elipsėje buvo daug daugiau laidų, taigi daugiau darbo. Žiaurios jėgos metodas yra toks. Prie laidų poros pritvirtinkite multimetrą. Lėtai atlikite pedalų sukimąsi (arba šiek tiek daugiau) ir pažiūrėkite, ar nėra įtampos kritimo ar šuolio. Jei taip, jūs turite. Jei ne, pakartokite tai kitai porai. Tai daug bandymų ir klaidų: 13 laidų - 78 apsisukimai.
Štai triukas, kuris gali padėti paspartinti tinkamos laidų poros paiešką. Galite tikėtis, kad jūsų mašinos, kaip ir mano, detektoriaus įtampa paprastai yra aukšta, o impulsas mažas. Jei taip, tada, jei paliksite pedalus atsitiktinėje vietoje, yra didelė tikimybė, kad tarp dviejų detektoriaus laidų yra maždaug +3 V arba +5 V. Taigi atlikite pedalų sukimosi testą tik toms laidų poroms, tarp kurių yra +3V arba +5V.
Kitas triukas. Galbūt galėsite nustatyti, kur sukant pedalą sukasi sukimosi jutiklis. Pvz., Jūsų aparatas ekrane gali kai ką mirksėti, atnaujinti greičio rodinį arba suaktyvinti iš miego režimo arba pyptelėti. Jei taip, tada pastumkite pedalus maždaug 1/3 apsisukimo atstumu, tada ieškokite laidų porų, tarp kurių yra 3-5 V.
Jei galite atpažinti įžeminimo laidą, galite žymiai pagreitinti procesą, nes tada reikia pereiti tik tarp įžeminimo ir kiekvieno nežinomo laido. Kaip bebūtų keista, mūsų elipsėje maitinimo šaltinio žemė neatrodė tokia pati kaip sukimosi detektoriaus žemė.
Kai nustatysite laidus, užsirašykite juos. Būtinai atkreipkite dėmesį:
- aukštos įtampos lygis: jei jis yra daugiau nei apie 3,3 V, bet ne didesnis kaip 5 V, norėsite pakeisti grandinę, kad sukimosi aptikimui būtų naudojamas A9 kaištis, o ne A7, nes A9 kaištis yra 5 V tolerancijos, o A7-ne, ir redaguoti viena eskizo eilutė; jei jis yra didesnis nei 5 V, turėsite pridėti įtampos daliklį
- ar sukimosi aptikimo impulsas yra mažas ar didelis: jei pulsas yra didelis, turėsite redaguoti eilutę mano „Arduino“eskize.
Jei turite osciloskopą ir treniruoklis maitinamas baterijomis, vietoj multimetro taip pat galite naudoti osciloskopą. (Jei treniruoklis yra prijungtas prie kintamosios srovės, taip pat ir jūsų osciloskopas, turite žinoti apie įžeminimo kilpas ir kaip jų išvengti. Būkite atsargūs!)
2 žingsnis: Paruoškite plėtros valdybą
Lituokite šešis centrinius trumpiklius ant juodos piliulės.
Jei turite „RobotDyn“plokštę su „Arduino“įkrovos įkrovikliu, prijunkite B0 ir B1- prie centrinių kaiščių ir baigsite šį veiksmą.
Priešingu atveju dabar turite įdiegti įkrovos tvarkyklę. Jums reikės arba atskiro UART prie USB tilto, arba šiam tikslui galite naudoti „Arduino Uno“arba „Mega“. Nors juoda piliulė veikia esant 3,3 V įtampai, UART kaiščiai toleruoja 5 V įtampą, todėl nesijaudinkite, ar jungtis veikia esant 3,3 V ar 5 V įtampai.
Jei turite „Uno“arba „Mega“, tarp RESET ir GROUND uždėkite trumpiklį. Tai paverčia „Arduino“į specialų UART – USB tiltą, išskyrus tai, kad TX/RX kaiščiai yra atvirkščiai, nei paprastai yra jungtyje.
Atsisiųskite dvejetainį įkrovos įkėlimo programą. Norite generic_boot20_pb12.bin. „Windows“sistemoje įdiekite ST „Flash Loader Demonstrator“. „Linux“(o galbūt OS X ir net „Windows“, jei norite komandinės eilutės įrankių), naudokite šį „python“scenarijų, tačiau mano nurodymai bus skirti „Windows“.
Užmegzkite šiuos ryšius:
- PA9 į UART tiltą RX („TX“, jei naudojate „Arduino“triuką)
- PA10 į UART tiltą TX („RX“, jei naudojate „Arduino“triuką)
- G iki UART tilto žemės
Man patinka naudoti loginių zondų patarimus, kad sujungtumėte STM32 pusę, tačiau taip pat galite tiesiog lituoti kai kuriuos laidus, kuriuos vėliau galite nutraukti (arba išlydyti, jei norite būti tvarkingi).
Prijunkite UART tiltą prie kompiuterio. Įjunkite „Black Pill“per USB prievadą (geriausia, jei prijungsite jį prie įkroviklio, o ne prie kompiuterio, nes kompiuteris greičiausiai skųsis dėl neatpažinto USB įrenginio). Paleiskite „Flash Loader Demonstrator“. Pasirinkite UART tilto COM prievadą. Pasirinkite „Pašalinti apsaugą“, jei yra. Pasirinkite 64, o ne 128 KB „flash“versiją. Ir įkelti įkrovos dvejetainį failą.
Išjunkite viską ir tada perkelkite trumpiklį iš B0+/centre į B0-/centre. Dabar turite įkrovos tvarkyklę, kurią galite naudoti su „Arduino IDE“.
3 žingsnis: Paruoškite „Stm32duino“„Arduino IDE“
Manau, kad turite įdiegtą naujausią „Arduino IDE“.
Įrankiuose | Lentos | Lentų tvarkytuvė, įdiekite „Arduino Zero“palaikymą (tiesiog įveskite „Zero“į paiešką, spustelėkite rastą įrašą, tada - Įdiegti). Taip, jūs nedirbate su „Zero“, tačiau tai įdiegs tinkamą „gcc“kompiliatorių.
Tada atsisiųskite „stm32duino“branduolį. „Windows“sistemoje rekomenduoju atsisiųsti ZIP failą, nes kai peržiūrėjau failus (tiesa, su svn), turėjau tam tikrų leidimų problemų, susijusių su failais, esančiais „Windows“įrankių kataloge, kuriuos reikėjo pataisyti. Įdėkite filialą į „Arduino“/„Hardware“/„Arduino_STM32“(kad turėsite tokius aplankus kaip „Arduino“/„Hardware“/„Arduino_STM32/STM32F1“ir kt.) „Windows“sistemoje įdiekite tvarkykles paleisdami tvarkykles / win / install_drivers.bat.
Įdiekite mano USBHID biblioteką: eikite į eskizą | Įtraukti biblioteką | Tvarkykite bibliotekas ir ieškokite USBHID. Spustelėkite jį ir spustelėkite Įdiegti.
Įdiekite „GameControllersSTM32“biblioteką: eikite į eskizą | Įtraukti biblioteką | Tvarkykite bibliotekas ir ieškokite „GameControllers“. Spustelėkite jį ir spustelėkite Įdiegti.
4 žingsnis: grandinė
Mano sąrankoje naudojami keturi šviesos diodai, rodantys dabartinį emuliacijos režimą dvejetainiu būdu (taip, galima naudoti skystųjų kristalų ekraną, bet kai tai sukūriau, šviesos diodai gulėjo aplink), du mygtukai, skirti perjungti ir sumažinti režimą (ir padaryti kai kuriuos kitus gudrybės) ir perjungimo jungiklis, skirtas judėjimo krypčiai perjungti.
Be to, yra „Nunchuck“įvestis I2C ir jungtis prie „Gamecube“valdiklio. Jei norite palaikyti tik vieną iš šių dviejų, galite tiesiog redaguoti gamecube.h eskizą ir sutaupyti šiek tiek litavimo.
Keturių režimų šviesos diodus ir du režimo perjungimo mygtukus (aukštyn ir žemyn), taip pat vieną traukimo rezistorių, skirtą „Gamecube“duomenims, pritvirtinau šiek tiek protoboard. Aš išvedžiau 3,3 V į protoboardą, bet man nereikėjo įvesti žemės, nors galite, jei norite. „Nunchuck“jungčiai pritvirtinti panaudojau dar vieną nedidelę protoboard dalį.
Iškirpkite „Gamecube“kabelį. Norite dirbti su lizdo puse, prie kurios prijungs jūsų valdiklis. Juostos kabeliai prijungimui.
Dabar atlikite šiuos sujungimus pagal schemą:
- 10uF kondensatorius tarp 3.3v ir žemės (su minusine visų elektrolitų puse žemėje). Tai turėtų būti kuo arčiau lusto, todėl lituodavau tiesiai ant kūrimo plokštės, o ne protobooto. Gerai, galite pridėti 100nF, kaip aš, bet nesu tikras, kad to reikia.
- „Gamecube“lizdas Nr. 2 - A6 ant stm32 plokštės
- 1Kohm rezistorius tarp „Gamecube“lizdo Nr. 2 ir 3.3 V ant STM32 plokštės (arba ant protoboard)
- „Gamecube“lizdas Nr. 3 ir Nr. 4 - ant stm32 plokštės
- „Gamecube“lizdas Nr. 6 - 3.3V ant STM32 plokštės (arba protoboard)
- LED serijinis su 220 omų (arba didesnis) rezistoriumi tarp A0 ant STM32 plokštės ir 3.3 V (neigiamas galas (plokščias) iki PA0; teigiamas galas iki 3.3 V)
- Pakartokite su LED+rezistoriumi tarp A1 ir 3.3V, A2 ir 3.3V ir A3 ir 3.3V
- Momentinis perjungimas tarp A5 ant stm32 plokštės (didinimo režimas) ir 3,3 V, o kitas tarp A4 ir 3,3 V (mažinimo režimas); šis jungiklis padidina režimo numerį
- Perjungti jungiklį tarp A8 ir 3.3V
- treniruoklių žemė - stm32 gruntas
- treniruoklių teigiamas signalas - stm32 lenta A7 (atkreipkite dėmesį, kad A7 tinka tik 3,3 V įtampai; jei jūsų treniruoklis yra 5 V, naudokite A9 ir redaguokite gamecube.h)
- „Nunchuck“žemė (pažymėta - ant mano adapterio plokštės) - „stm32“žemė
- Nunchuck +3.3V (pažymėtas +) - stm32 3.3V
- Nunchuck SDA (pažymėta D) - stm32 B7
- Nunchuck SCL (pažymėtas C) - stm32 B6
- 10Kohm rezistorius tarp Nunchuck SDA ir 3.3V ant stm32 plokštės
- 10Kohm rezistorius tarp Nunchuck SCL ir 3.3V ant stm32 plokštės.
5 veiksmas: įdiekite eskizą
Atsisiųskite mano „Gamecube“USB adapterio eskizą ir įkelkite jį į „Arduino IDE“. „Gamecubecontroller.h“yra keletas valdymo galimybių:
- pašalinti // prieš #define ENABLE_EXERCISE_MACHINE (visi turi tai padaryti)
- jei jums reikėjo perkelti treniruoklių jungtį į A9, pakeiskite PA7 į PA9, esantį konst uint32_t rotationDetector = PA7 eilutėje
- jei jūsų treniruoklių sukimosi aptikimo pulsas yra didelis, pakeiskite #define ROTATION_DETECTOR_CHANGE_TO_MONITOR FALLING į #define ROTATION_DETECTOR_CHANGE_TO_MONITOR RISING
- jei nenorite naudoti „Nunchuck“, padėkite // prieš #define ENABLE_NUNCHUCK
- jei nenorite naudoti „Gamecube“valdiklio, padėkite // prieš #define ENABLE_GAMECUBE.
„Arduino IDE“pasirinkite Įrankiai | Lenta | Bendra STM32F103C serija.
Paspauskite rodyklės į dešinę įkėlimo mygtuką. Atminkite, kad jums gali tekti paspausti iš naujo nustatymo mygtuką (arba atjungti/prijungti) plokštę tinkamu laiku, jei gausite pranešimą, kad plokštė neatpažįstama.
6 veiksmas: treniruoklių prijungimas
Sujunkite lizdą, kad galėtumėte prijungti treniruoklį. Mūsų elipsinėje mašinoje aš ją litavau, o ant treniruoklio galėjau naudoti vyriškas ir moteriškas „dupont“jungtis. Ant elipsės aš padariau skylę konsolės šone, kad tilptų jungtis. Treniruoklyje tiesiog išlindo laidai, o išorėje - maža 3D spausdinta dėžutė („OpenSCAD“failas).
7 žingsnis: projekto atvejis
Projektą galima įdėti į mažą kartoninę dėžę, „tupperware“konteinerį arba pasirinktinį 3D spausdintą korpusą. Kadangi turiu 3D spausdintuvą, pasirinkau pasirinktinį korpusą. „OpenSCAD“ir „STL“failai yra čia.
Kojos skirtos klijuoti (superklijai) prie dugno ir į jas įklijuoti lipnias gumines kojas.
Taip pat prie projekto dėklo ir treniruoklių karštai priklijavau kablį ir kilpą.
8 žingsnis: naudokite
Du mygtukai gali perjungti iki 16 skirtingų emuliacijos režimų (iš tikrųjų galite turėti daugiau, tačiau projekte yra tik keturi šviesos diodai, rodantys režimo numerį). Emuliacijos režimai yra apibrėžti eskizo „gamecubecontroller.h“. Daugeliui žaidimų galite naudoti 1 režimą, vieningą slankiklio vairasvirtę 100% greičiu. Emuliuota vairasvirtė turi slankiklį (iš tikrųjų du slankiklius, bet abu daro tą patį), kurį valdo treniruoklio sukimasis. Mygtukus ir vairasvirtę valdo „Gamecube“valdiklis arba „Nunchuck“. „Windows“sistemoje kai kurie žaidimai palaiko „XBox 360“valdiklį, bet ne USB kreiptuką. Tiems naudokite 13 režimą (paspauskite žemyn esantį mygtuką iš 1 režimo).
9 ir 10 režimai leidžia lėčiau važiuoti pedalu ir vis tiek patraukti slankiklį, o tai yra malonu vaikams arba didesnio pasipriešinimo treniruokliams. Greitį taip pat galite koreguoti naudodamiesi „pratimachine.ino“.
Yra daug kitų emuliacijos režimų. Spausdinama nuoroda įtraukta į modelist.pdf su eskizu.
Kai važiuojate treniruokliu, projekto šviesos diodai pereina nuo esamo režimo numerio rodymo prie greičio. Kai užsidega visos keturios lemputės, jūsų greitis yra maksimalus (emuliuotas slankiklis turi maksimalų prailginimą)-tuo metu jūs negausite pranašumo žaidime, kai eisite greičiau. Be to, mėlynas šviesos diodas STM32F1 plokštėje dega, kai viskas veikia, bet mirksi, kai sukasi sukimosi jutiklis.
Norėdami pakeisti judesį, apverskite adapterio dėžutės krypties perjungimo jungiklį.
„Windows“sistemoje paleiskite joy.cpl, kad sukalibruotumėte ir pamatytumėte, kaip viskas veikia. Kadangi nemalonu, kad reikia labai greitai spausti pedalus, kad sukalibruotumėte emuliuotą vairasvirtę, yra būdas apgauti kalibravimą. Jei „Gamecube“valdiklyje nejudate apie 10 sekundžių, galite pradėti naudoti peties mygtukus, kad valdytumėte imituojamus vairasvirtės slankiklius. Naudodami „Nunchuck“, laikydami nuspaudę režimo minuso mygtuką, galite valdyti vairasvirtę aukštyn/žemyn, kad valdytumėte emuliuotus slankiklius.
Jei norite emuliacijos režimų perjungimo GUI, sistemoje „Windows“eskizas apima „mode.py“, „python“scenarijų su režimų perjungimo GUI. Taip pat galite iškviesti režimą.py paketiniame faile, kuris paleidžia žaidimą.
Du žaidimai, kurie, mano manymu, puikiai veikia su treniruokliu, yra „Toybox Turbos“ir „SuperTuxCart“(nemokami).
Adapteryje taip pat yra daug kitų emuliacijos funkcijų. Pavyzdžiui, galite jį naudoti kaip paprastą „Nunchuck“arba „Gamecube Controller“adapterį, imituojantį vairasvirtę, klaviatūrą (pvz., Rodykles/WASD) ir (arba) pelę. „Gamecubecontroller.h“yra daugybė režimų. Taip pat galite prijungti „Dance Dance Revolution Gamecube“/„Wii“suderinamą trinkelę ir naudoti ją žaidimams, kurie nėra skirti jam, pvz., „Tetris“, kad galėtumėte linksmintis ir sportuoti.