Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Untuk mendorong olahraga dalam diri dan keluarga, saya membuat adaptor yang meniru adaptor pengontrol game USB standar tetapi mengontrol kecepatan gerakan game dengan mengayuh pada mesin elips atau sepeda olahraga. Ini sangat bagus untuk game balap. Hal ini tentu memotivasi seseorang untuk mengayuh dengan cepat saat bermain game balap.
Perangkat keras utama adalah papan pengembangan STM32F103C8 "pil hitam" $2 dengan inti Arduino stm32duino dan perpustakaan HID USB yang saya kembangkan berdasarkan garpu inti libarra111. STM32F1 cepat dan murah serta memiliki dukungan USB kecepatan penuh, sehingga sempurna untuk proyek ini.
Untuk menggunakannya, Anda perlu menggunakan sensor rotasi pada sepeda elips atau sepeda olahraga (jika sensor rotasi Anda bekerja secara berbeda dari yang ada di mesin kami--sekitar 3v, aktif rendah--Anda mungkin perlu memodifikasi sirkuit dan/atau kode).
Kecepatan putaran elips/sepeda mengontrol penggeser pengontrol. Selain itu, Anda memasang pengontrol Wii Nunchuck atau Gamecube standar ke adaptor untuk gerakan joystick, tombol, dll. Ada banyak mode kontrol yang berbeda. Misalnya, anak-anak yang lebih kecil mungkin perlu sedikit ditingkatkan kecepatannya, dan beberapa permainan mungkin menggunakan skema kontrol yang berbeda. Ada sejumlah skema kontrol bawaan dalam perangkat lunak, dan yang lainnya dapat dengan mudah ditambahkan ke dalam kode. Perangkat dapat meniru pengontrol permainan USB, keyboard, mouse, pengontrol Xbox 360, atau kombinasi dari tiga yang pertama.
Arah gerakan saat ini tidak terdeteksi: untuk beralih antara gerakan maju dan mundur, adaptor memiliki sakelar sakelar. (Atau, seseorang dapat menggunakan sensor magnetik efek hall seperti perangkat ini, dan mengubah sirkuit dan perangkat lunaknya.)
Adaptor berfungsi sebagai pengontrol USB standar, sehingga Anda dapat menggunakannya dengan Windows, Linux, OS X, Android, dll.
Sebagai bonus, adaptor memiliki semua fungsi proyek ini, bekerja sebagai adaptor Gamecube yang berfungsi penuh, memungkinkan Anda menggunakan pengontrol Gamecube di komputer, termasuk mengontrol game dengan tikar dansa Dance Dance Revolution yang kompatibel dengan Gamecube/Wii.
Biayanya di bawah sekitar $ 10, plus kasing (saya memiliki desain yang dapat dicetak 3D), kabel, dan solder. Bagian:
- Papan pengembangan "Pil Hitam" stm32f103c8 ($2 di Aliexpress)
- Soket Gamecube ($ 1,60 di Aliexpress, untuk kabel ekstensi Gamecube yang dapat dipotong)
- Papan breakout soket Nunchuck ($0,51 di Aliexpress; cari Wiichuck)
- Sakelar sakelar dua posisi kecil (di bawah $1 di Aliexpress)
- Pilihan Anda untuk konektor dua konduktor pria dan wanita (sekitar $1 di Aliexpress jika Anda menggunakan konektor barel daya 5,5 mm); Anda memerlukan satu konektor perempuan per mesin latihan
- 2 sakelar taktil (di bawah $0,50 di Aliexpress)
- 4 LED merah (di bawah $0,50 di Aliexpress; Anda juga dapat menggunakan layar LCD Nokia kecil)
- kapasitor: elektrolit 10uF, dan 100nF. opsional
- resistor: 1 x 100K, 2 x 10K, 1 x 1K, 4 x 220ohm
- papan proto kecil (di bawah $1 di Aliexpress).
Nunchuck baik untuk penggunaan satu tangan dengan mesin elips. Pada sepeda olahraga, Anda dapat menggunakan adaptor dua tangan seperti Gamecube. Jika Anda hanya ingin menggunakan salah satu dari dua opsi kontrol ini, Anda dapat menggunakan lebih sedikit koneksi.
Anda juga memerlukan komputer, besi solder, dan multimeter. Anda juga memerlukan jembatan UART-ke-USB (saya menggunakan Arduino Mega yang saya miliki untuk proyek lain; atau Anda dapat membeli modul CP2102 di Aliexpress seharga satu dolar) untuk memasang bootloader pada pil hitam Anda untuk menggunakannya dengan Lingkungan Arduino, atau Anda dapat menghabiskan beberapa dolar lagi dan mendapatkan papan pengembangan RobotDyn dengan bootloader Arduino yang dimuat sebelumnya.
Izinkan saya menambahkan bahwa saya memasukkan ini ke dalam kontes Roda, karena ini adalah cara menghubungkan roda virtual dalam game balap mobil di komputer dengan roda fisik sepeda olahraga dan elips.
Langkah 1: Ketuk Ke Sensor Rotasi
Kedua mesin latihan yang saya retas memiliki konsol yang menampilkan kecepatan. Ada kabel yang berjalan di antara konsol dan badan mesin. Anda perlu memanfaatkan kabel ini untuk mengakses data. Jika mesin Anda seperti milik saya, konsol dapat dilepas, dan di sana Anda akan menemukan kabel pita (elips) atau dua kabel (sepeda). Saya menyadap ini dengan melepaskan kabel dan menjembataninya dengan jumper pria-ke-wanita individu yang bisa saya gunakan.
Gunakan trial and error dan multimeter untuk mengidentifikasi sepasang kabel yang memiliki pulsa tegangan selama putaran penuh.
Pada dasarnya, latihannya adalah ini: sambungkan multimeter ke sepasang kabel (berhati-hatilah agar tidak menyingkat apa pun) dengan mesin menyala, dan putar pedal dengan sangat perlahan. Di kedua mesin kami, ada sepasang kabel yang di antaranya biasanya tegangannya sekitar +3V, tetapi selama putaran pendek kabel itu jatuh ke ground: ini adalah skema aktif-rendah. Anda mungkin menemukan mesin Anda memiliki skema active-high di mana sebagian besar rotasi adalah ground, dan pulsanya positif, dan kemudian Anda harus mengedit sketsa Arduino.
Jika menurut Anda ada kemungkinan bahwa salah satu kabel ke konsol yang Anda hadapi adalah AC utama, saya sarankan untuk berhenti kecuali Anda benar-benar tahu apa yang Anda lakukan. Untungnya, sepeda latihan kami bertenaga baterai dan colokan elips kami ke kutil dinding sehingga hanya ada sekitar 12V DC di sekitar konsol.
Dalam kasus sepeda latihan, itu sangat mudah. Hanya ada empat kabel. Dua untuk monitor detak jantung dan dua untuk sensor rotasi.
Elips memiliki lebih banyak kabel, sehingga lebih banyak pekerjaan. Metode brute force adalah ini. Pasang multimeter ke sepasang kabel. Perlahan lakukan putaran penuh (atau sedikit lebih untuk berjaga-jaga) pada pedal dan lihat apakah ada penurunan tegangan atau lompatan. Jika ya, Anda sudah mendapatkannya. Jika tidak, ulangi untuk pasangan lain. Itu banyak trial and error: untuk 13 kabel, itu 78 rotasi.
Berikut adalah trik yang mungkin dapat membantu Anda untuk mempercepat pencarian pasangan kabel yang tepat. Anda mungkin berharap bahwa mesin Anda, seperti milik saya, memiliki tegangan detektor yang biasanya tinggi dengan pulsa yang rendah. Jika demikian, maka jika Anda meninggalkan pedal di lokasi acak, Anda memiliki peluang bagus bahwa kedua kabel detektor memiliki sekitar +3V atau +5V di antara keduanya. Jadi hanya lakukan tes putaran pedal untuk pasangan kabel yang memiliki +3V atau +5V di antara mereka.
Trik lain. Anda mungkin dapat mengidentifikasi di mana dalam rotasi pedal sensor rotasi terpicu. Misalnya, mesin Anda mungkin mem-flash sesuatu di layar, atau memperbarui tampilan kecepatan, atau mengaktifkan dari mode tidur, atau berbunyi bip. Jika demikian, pindahkan pedal sekitar 1/3 putaran, lalu cari pasangan kabel yang memiliki 3-5V di antaranya, dan ujilah dengan menggerakkan pedal ke posisi di mana sensor terpicu.
Jika Anda dapat mengidentifikasi kabel ground, Anda dapat mempercepat prosesnya, karena Anda hanya perlu pergi antara ground dan setiap kabel yang tidak diketahui. Anehnya, pada elips kami, ground catu daya tampaknya tidak sama dengan ground detektor rotasi.
Setelah Anda mengidentifikasi kabelnya, catatlah. Pastikan Anda mencatat:
- level tegangan tinggi: jika lebih dari sekitar 3.3V tetapi tidak lebih dari 5V, Anda akan ingin mengubah rangkaian untuk menggunakan pin A9 alih-alih A7 untuk deteksi rotasi karena pin A9 adalah toleransi 5V dan A7 tidak, dan edit satu baris dalam sketsa saya; jika lebih dari 5V, Anda harus menambahkan pembagi tegangan
- apakah pulsa deteksi rotasi rendah atau tinggi: jika pulsa tinggi, Anda harus mengedit garis di sketsa Arduino saya.
Jika Anda memiliki osiloskop, dan mesin latihan bertenaga baterai, Anda juga dapat menggunakan osiloskop sebagai ganti multimeter. (Jika mesin latihan dicolokkan ke AC dan begitu juga osiloskop Anda, Anda perlu tahu tentang loop ground dan cara menghindarinya. Hati-hati!)
Langkah 2: Siapkan Papan Pengembangan
Solder enam pin jumper pusat ke pil hitam Anda.
Jika Anda memiliki papan RobotDyn dengan bootloader Arduino, sambungkan B0- dan B1- ke pin tengah, dan Anda selesai dengan langkahnya.
Jika tidak, Anda sekarang perlu menginstal bootloader. Anda memerlukan UART mandiri ke jembatan USB atau Anda dapat menggunakan Arduino Uno atau Mega untuk tujuan ini. Meskipun pil hitam berjalan pada 3.3V, pin UART toleran 5V, jadi jangan khawatir tentang apakah konektor Anda berjalan pada 3.3V atau 5V.
Jika Anda memiliki Uno atau Mega, letakkan kabel jumper antara RESET dan GROUND. Ini mengubah Arduino menjadi jembatan UART ke USB khusus, kecuali bahwa pin TX/RX adalah kebalikan dari cara biasanya pada konektor.
Unduh biner bootloader. Anda ingin generic_boot20_pb12.bin. Pada Windows, instal ST's Flash Loader Demonstrator. Di Linux (dan mungkin OS X dan bahkan Windows jika Anda lebih suka alat baris perintah), gunakan skrip python ini sebagai gantinya, tetapi instruksi saya adalah untuk Windows.
Buat koneksi berikut:
- PA9 ke UART bridge RX ("TX" jika Anda menggunakan trik Arduino)
- PA10 ke UART bridge TX ("RX" jika Anda menggunakan trik Arduino)
- G ke tanah jembatan UART
Saya suka menggunakan tip probe logika untuk membuat koneksi di sisi STM32, tetapi Anda juga bisa menyolder beberapa kabel yang nantinya dapat Anda potong (atau de-solder jika Anda ingin rapi).
Hubungkan jembatan UART Anda ke komputer Anda. Nyalakan Black Pill melalui port USB-nya (paling baik jika Anda menghubungkannya ke pengisi daya daripada ke komputer, karena komputer kemungkinan akan mengeluh tentang perangkat USB yang tidak dikenali). Mulai Demonstran Pemuat Flash. Pilih port COM untuk jembatan UART Anda. Pilih "Hapus perlindungan" jika tersedia. Pilih versi flash 64kb daripada 128kb. Dan unggah biner bootloader.
Matikan semuanya lalu pindahkan jumper dari B0+/center ke B0-/center. Anda sekarang memiliki bootloader yang dapat Anda gunakan dengan Arduino IDE.
Langkah 3: Siapkan Stm32duino di Arduino IDE
Saya berasumsi Anda telah menginstal Arduino IDE terbaru.
Dalam Alat | Papan | Boards Manager, instal dukungan untuk Arduino Zero (cukup masukkan Zero dalam pencarian, klik entri yang ditemukan, lalu Instal). Ya, Anda tidak bekerja dengan Zero, tetapi ini akan menginstal kompiler gcc yang tepat.
Selanjutnya, unduh inti stm32duino. Di Windows, saya sarankan mengunduh file zip, karena ketika saya memeriksa file (diakui, dengan svn), saya memiliki beberapa masalah izin dengan file di direktori alat Windows yang perlu diperbaiki. Letakkan cabang di Arduino/Hardware/Arduino_STM32 (jadi Anda akan memiliki folder seperti Arduino/Hardware/Arduino_STM32/STM32F1, dll.) Pada Windows, instal driver dengan menjalankan driver\win\install_drivers.bat.
Instal perpustakaan USBHID saya: Buka Sketsa | Sertakan Perpustakaan | Kelola Perpustakaan, dan cari USBHID. Klik di atasnya dan klik Instal.
Instal perpustakaan GameControllersSTM32 saya: Buka Sketsa | Sertakan Perpustakaan | Kelola Perpustakaan, dan cari GameControllers. Klik di atasnya dan klik Instal.
Langkah 4: Sirkuit
Pengaturan saya menggunakan empat LED untuk menunjukkan mode emulasi saat ini dalam biner (ya, seseorang dapat menggunakan layar LCD, tetapi saya memiliki LED yang tergeletak di sekitar ketika saya membangun ini), dua tombol tekan untuk beralih mode ke atas dan ke bawah (dan melakukan beberapa lainnya trik), dan sakelar sakelar untuk mengalihkan arah gerakan.
Selain itu, ada input I2C dari Nunchuck dan konektor ke pengontrol Gamecube. Jika Anda hanya ingin mendukung salah satu dari keduanya, Anda cukup mengedit gamecube.h di sketsa dan menghemat beberapa penyolderan.
Saya menggunakan sedikit protoboard untuk memasang empat LED mode dan dua tombol sakelar mode (atas dan bawah), serta satu resistor pull-up untuk data Gamecube. Saya mengeluarkan 3.3V ke protoboard, tetapi saya tidak perlu mengeluarkan ground untuk itu, meskipun Anda bisa jika Anda mau. Saya menggunakan sedikit protoboard untuk memasang konektor Nunchuck.
Potong kabel Gamecube. Anda ingin bekerja dengan sisi soket, yang akan dicolokkan oleh pengontrol Anda. Kabel strip untuk menghubungkan.
Sekarang buat koneksi ini sesuai diagram sirkuit:
- Kapasitor 10uF antara 3.3v dan ground (dengan sisi minus dari elektrolit apa pun di ground). Ini harus sedekat mungkin dengan chip, jadi saya menyoldernya tepat di papan pengembangan daripada di papan proto. Untuk ukuran yang baik, Anda dapat menambahkan 100nF seperti yang saya lakukan, tetapi saya tidak yakin itu diperlukan.
- Soket Gamecube #2 -- A6 pada papan stm32
- Resistor 1Kohm antara soket Gamecube #2 dan 3.3V pada papan stm32 (atau pada papan proto)
- Soket Gamecube #3 dan #4 -- di-ground di papan stm32
- Soket Gamecube #6 -- 3.3V pada papan stm32 (atau pada papan proto)
- LED seri dengan resistor 220ohm (atau lebih besar) antara A0 pada papan stm32 dan 3.3V (ujung negatif (datar) ke PA0; ujung positif ke 3.3V)
- Ulangi dengan LED+resistor antara A1 dan 3.3V, A2 dan 3.3V, dan A3 dan 3.3V
- Beralih sesaat antara A5 pada papan stm32 (mode kenaikan) dan 3.3V dan lainnya antara A4 dan 3.3V (mode penurunan); sakelar ini menambah nomor mode
- Beralih beralih antara A8 dan 3.3V
- tanah mesin latihan - tanah stm32
- sinyal positif mesin latihan -- papan stm32 A7 (perhatikan bahwa A7 hanya bagus untuk 3.3V; jika mesin latihan Anda 5V, gunakan A9, dan edit gamecube.h)
- Nunchuck ground (berlabel - di papan adaptor saya) -- stm32 ground
- Nunchuck +3.3V (berlabel +) -- stm32 3.3V
- Nunchuck SDA (berlabel D) -- stm32 B7
- Nunchuck SCL (berlabel C) -- stm32 B6
- Resistor 10Kohm antara Nunchuck SDA dan 3.3V pada papan stm32
- Resistor 10Kohm antara Nunchuck SCL dan 3.3V pada papan stm32.
Langkah 5: Instal Sketsa
Unduh sketsa Adaptor USB Gamecube saya dan muat ke Arduino IDE. Ada beberapa opsi untuk mengontrol di gamecubecontroller.h:
- hapus // di depan #define ENABLE_EXERCISE_MACHINE (semua orang perlu melakukan yang ini)
- jika Anda perlu memindahkan koneksi mesin latihan ke A9, ubah PA7 menjadi PA9 di baris const uint32_t rotationDetector = PA7
- jika denyut deteksi putaran mesin latihan Anda tinggi, ubah #define ROTATION_DETECTOR_CHANGE_TO_MONITOR FALLING menjadi #define ROTATION_DETECTOR_CHANGE_TO_MONITOR RISING
- jika Anda tidak ingin menggunakan Nunchuck, letakkan // di depan #define ENABLE_NUNCHUCK
- jika Anda tidak ingin menggunakan pengontrol Gamecube, letakkan // di depan #define ENABLE_GAMECUBE.
Di Arduino IDE, pilih Alat | Papan | Seri STM32F103C generik.
Tekan tombol unggah panah kanan. Perhatikan bahwa Anda mungkin perlu menekan tombol reset (atau cabut/colokkan) papan pada waktu yang tepat jika Anda mendapatkan pesan bahwa papan tidak dikenali.
Langkah 6: Koneksi Mesin Latihan
Sambungkan jack untuk koneksi mesin latihan Anda. Di mesin elips kami, saya menyoldernya, sementara di sepeda latihan, saya bisa menggunakan konektor dupont pria dan wanita. Pada elips, saya membuat lubang di sisi konsol agar sesuai dengan koneksi. Pada mesin latihan, saya hanya memiliki kabel yang mencuat darinya, dan sebuah kotak cetak 3D kecil (file OpenSCAD) di luarnya.
Langkah 7: Kasus Proyek
Seseorang dapat melampirkan proyek dalam kotak kardus kecil, wadah tupperware, atau wadah cetak 3D khusus. Karena saya memiliki printer 3D, saya menggunakan enklosur khusus. File OpenSCAD dan STL ada di sini.
Kaki dirancang untuk merekatkan (lem super berfungsi) ke bagian bawah, dan memiliki kaki karet lengket yang menempel di dalamnya.
Saya juga menempelkan beberapa pengikat hook-and-loop ke kasing proyek dan mesin latihan.
Langkah 8: Gunakan
Kedua tombol dapat beralih di antara hingga 16 mode emulasi yang berbeda (sebenarnya Anda dapat memiliki lebih banyak, tetapi hanya ada empat LED dalam proyek untuk menampilkan nomor mode). Mode emulasi didefinisikan dalam gamecubecontroller.h dalam sketsa. Untuk sebagian besar game, Anda dapat menggunakan mode 1, joystick penggeser terpadu dengan kecepatan 100%. Joystick yang ditiru memiliki penggeser (sebenarnya dua penggeser, tetapi keduanya melakukan hal yang sama) yang dikendalikan oleh rotasi mesin latihan. Tombol dan joystick itu sendiri dikendalikan oleh pengontrol Gamecube atau Nunchuck. Di Windows, beberapa game mendukung pengontrol Xbox 360 tetapi bukan USB Joystick. Untuk itu, gunakan mode 13 (tekan tombol bawah dari mode 1).
Mode 9 dan 10 memungkinkan Anda untuk mengayuh lebih lambat dan masih mendapatkan depresi slider penuh, yang bagus untuk anak-anak, atau untuk mesin latihan yang diatur ke resistensi yang lebih tinggi. Anda juga dapat menyesuaikan kecepatan di exercisemachine.ino.
Ada banyak mode emulasi lainnya. Referensi yang dapat dicetak disertakan dalam modelist.pdf dengan sketsa.
Saat Anda mengayuh pedal pada mesin latihan, LED pada proyek beralih dari menampilkan nomor mode saat ini ke kecepatan. Ketika keempat lampu menyala, kecepatan Anda maksimal (slider yang diemulasi memiliki ekstensi maksimum)--pada saat itu, Anda tidak mendapatkan keuntungan dalam game untuk melaju lebih cepat. Selain itu, LED biru pada papan STM32F1 menyala saat semuanya berfungsi, tetapi berkedip saat sensor rotasi terpicu.
Untuk membalikkan gerakan, balikkan sakelar sakelar arah pada kotak adaptor.
Di Windows, jalankan joy.cpl untuk mengkalibrasi dan melihat cara kerjanya. Karena merepotkan harus mengayuh dengan sangat cepat untuk mengkalibrasi joystick yang ditiru, ada cara curang untuk kalibrasi. Pada pengontrol Gamecube, jika Anda tidak bergerak selama sekitar 10 detik, Anda dapat mulai menggunakan tombol bahu untuk mengontrol penggeser joystick yang ditiru. Dengan Nunchuck, saat Anda menahan tombol mode-minus, Anda dapat menggunakan joystick atas/bawah untuk mengontrol bilah geser yang ditiru.
Jika Anda menginginkan GUI untuk beralih mode emulasi, pada Windows sketsa menyertakan mode.py, skrip python dengan GUI untuk beralih mode. Anda juga dapat memanggil mode.py dalam file batch yang meluncurkan game.
Dua game yang menurut saya bekerja sangat baik dengan mesin latihan adalah Toybox Turbos dan SuperTuxCart (gratis).
Adaptor juga menyertakan banyak fitur emulasi lainnya. Misalnya, Anda dapat menggunakannya sebagai adaptor Nunchuck atau Gamecube Controller langsung, meniru joystick, keyboard (mis., panah/WASD) dan/atau mouse. Ada banyak mode yang terdaftar di gamecubecontroller.h. Anda juga dapat memasang pad Dance Dance Revolution Gamecube/Wii yang kompatibel, dan menggunakannya untuk memainkan game yang tidak dirancang untuk itu, seperti Tetris, untuk kesenangan dan olahraga tambahan.