メリークリスマス! にわかゲーマーみずけけです。
レバーレスコントローラ作ってみました。
レバーレスコントローラってなんやねん。
という人の為に説明すると一部の格ゲー用コントローラの総称。
8方向入力のレバー+ボタンが通常の格ゲー(アーケードゲーム)の配置ですが、レバーを取っ払って変わりにボタンを付けたその名の通りレバーが無いコントローラというわけ。
そんなんで操作出来るんかいと思いきやかなり普及している模様。
私が最初にレバーレスを認識したのは何年も前、ヒットボックスなるもの。
またキワモノコントローラが出て来たなと一瞬思ったものの、よくよく考えればパソコンのキーボードで操作する感覚に近いのか?といった印象。
その頃はまだ色々なコントローラを収集する気がなかったのでスルーしたが、今ではプロゲーマーもVチューバーもみんな使っているのだった。
そろそろ興味が出て来たので使ってみたいが、普通の格ゲー用コントローラに比べてレバーレスはどれもこれも高い。
普通に1万からの物ばかり、もちろんもっと高いものも。
というわけなので自作してしまおうという人が多い模様。(個人の感想です)
という事で材料揃えて見たぞ。
・銀軸のキースイッチ。
キーボード用のやつ、気になってたので買って使ってみよう。
キーボード用とはいえ構造はただのスイッチなので使えると思うよ。
上に付けるキーキャップは3Dプリンターで作る。
・Arduino Leonardo(の互換機)
比較的安価に手に入る小さなコンピュータ的な物。
最近はこういう便利な物があるので自作コントローラや変換器は作りやすいのではなかろうか。
・100円ショップで買って来たクリアケース。
いい感じのサイズ感で加工もしやすそう。
これに穴開けてボタンを取り付けよう。
ドライバーとカッターナイフでどうにかケースに穴を開けてキースイッチを取り付け。
……後から思ったがはんだごてで穴開けた方が早かったかもしれない。
3Dプリンターで円盤型のキーキャップを作って付けてみた。
ウチの3Dプリンターはノズルが0.4ミリなので他のキースイッチと互換性を持たせようとするとかなり耐久性に難のある仕上がりになるが、まあ今回買ったやつはそういうの気にしなくて良いタイプなのでちゃちゃっと設計して印刷。
市販のレバーレスに比べるとボタンがかなり出っ張る形になるが押した感じは良好。
と同時にこれでコマンド入力出来るのか?という操作難度の高さを痛感。
ジャンプボタンが下にあるって頭おかしなるで。
ひとまず試しにarduinoの動作確認もしておこう。
……書き込めないのだが?
とりあえずLEDをチカチカさせてみようとしたら書き込み時にエラーが出る。
arduino自体は認識されてるのになんでよ。
Arduino linuxで書き込みエラー error opening serial port
UbuntuでArduinoを動かすとき~Lチカまで~
どうやら端末で権限を付与しないといけないんだと。
Windowsだとそのまま直で出来ることがlinuxだと一手間かかるの辛ぇわ。
セキュリティと利便性は表裏一体というアレ。
arduinoのプログラムは全く分からないのでネットの海からいい感じのライブラリを検索。
Switch Control Library
ひとまずこれでやってみよう。
ニンテンドースイッチでコントローラとして扱える様になるライブラリ。
当たり前といえば当たり前だがPC上でもコントローラとして認識されるのでPCのゲームにも使えるよ。
早速ライブラリを導入!
しかし何もプログラムを組んでない状態なのにコンパイルが出来ない。
ネットの海を駆け回り情報を集め、Arduino IDEのバージョンを1.8のやつにしてArduino AVR Boardsのバージョンを1.8.2に。
更にArduino STLを1.1.0にする事でようやくコンパイルが通るように。
VIDとPIDも書き換えて取り敢えずLボタンとRボタンを押すだけのプログラムを書き込みニンテンドースイッチに接続。
こんな感じのやつ。
void loop() {
SwitchControlLibrary().pressButton(Button::L);
SwitchControlLibrary().pressButton(Button::R);
SwitchControlLibrary().sendReport();
delay(500);
SwitchControlLibrary().releaseButton(Button::L);
SwitchControlLibrary().releaseButton(Button::R);
SwitchControlLibrary().sendReport();
delay(500);
}
しかし反応無し。
PC上ではコントローラとして認識されていてボタンを押された反応があるのだがなぜ?
arduino本体をよく見るとボタンを押す処理中はLEDがピカピカしているがニンテンドースイッチに接続したらLEDが光らない。
これはボタンを押す処理自体が止まってるっぽい?
ライブラリの初期化してなかった。
void setup内に「SwitchControlLibrary()」とだけ記入して初期化
改めてニンテンドースイッチに接続、無事に認識されました。
取り敢えずスタートラインに立てた感。
ちなみに別件でもう1つarduinoを購入していて、最初はそっちで色々やっていた。
購入後に改めてarduino関連のブログやらなんやらをちゃんと読みまくるとある事に気が付いてしまう……
どうやらニンテンドースイッチ用のコントローラーにするにはatmega32u4というのが搭載された機種じゃないといけないらしい。
先に買った物はarduinoUNOの互換品で搭載されているのがatmega328P……えっ違うやつなの?
32u4はUSB用の機能が付いていて328Pは付いていないらしい。
え?マジ?意味わからん。
それとは別にCH340というのが搭載された機種もあるが、それはダメだという事が分かっていたので避けていたのだがもう1個罠があったとは。
いやまあちゃんと色々なところ読んで仕様を理解すれば回避出来た事なのだが、難しすぎる。
そんな感じの失敗をしたので今回ちゃんと32u4が搭載されたarduinoを買ってレバーレス作りにチャレンジしているのでした。
閑話休題、arduino本体の準備は出来たので早速キースイッチの配線やらなんやらをしていく。
キーボード用キースイッチはハンダ付けする部分が小さいので苦労した。
あと線を短くし過ぎたので若干ギチギチ。
配線と平行してキースイッチが押されたらボタンを押す処理をする感じのプログラムをひたすら書いていく。
JavaScriptを少し嗜んでいたので楽勝!
……あかん、1年近くやってなかったせいで何も覚えてない。
どうやってたんだっけ?
ネット上のサンプルプログラムのvar宣言も何故か通らないしヤンナルネ。
あとネットの何処にも書いてないけどSwitchControlLibraryのReadMeに書いてある記述と実際に定義されてる名前が違くてIDEからエラー返されたりしたけど私は元気です。
大会に出るわけではないが一応上下の同時押しや左右の同時押しをしたらニュートラル判定になるようにした。
if(digitalRead(2) == 0 && digitalRead(4) == 0){
SwitchControlLibrary().releaseHatButton(HatButton::LEFT);
SwitchControlLibrary().releaseHatButton(HatButton::RIGHT);
}
みたいな感じ。
しかし音ゲーをやる時に同時押し出来なくなるので若干不便。
いちいちarduinoを書き換える訳にもいかないのでそのうち格ゲーモードと音ゲーモードを切り替えられるようにしようかな。
テストプレイとしてとりあえずアケアカネオジオの餓狼伝説スペシャル辺りで。
……レバーレスコントローラーで遊べそうなゲームが我がニンテンドースイッチの中に殆ど入っていないのだが。
最近の格ゲー持ってないし、クソ回線だから対戦出来ないし買う意味もあんまりないし……
何とか動くし技も出るし問題無しという事にしよう、PCのヴァンガードプリンセスでも動いてるので十分だろう。
どうにかこうにか蓋を閉める為のネジ受け柱も作り+-ボタン用の土台も取り付けなんとか完成。
完璧な中空構造なので音はかなり響いてしまうがしょうがないね。
microusbのコネクタがもげやすいという情報を得ていたので結束バンド+グルーガン+延長ケーブルの3重対策を施しました。
これで壊れる事はないだろう。
という事でレバーレスコントローラーを作って遊んでいたのでした。
ぶっちゃけ格ゲーよりもダンマクカグラで使ってる時間の方が長い気がする。
ガロスペむず過ぎ。
みんなもレバーレス作ってみよう。
その他参考にさせていただいたサイト。
Nintendo Switch自動化 【2021年9月最新】
【Arduino自動化01】Arduino開発環境の導入
Arduino(アルディーノ)電子工作の基本⑥ スイッチの状態を読み取る
感謝。
さよなら。
テーマ:ゲーム | 投稿日時:2024/12/24 13:40 | |
TCGカテゴリ: | ||
表示範囲:全体 | ||
前のブログへ | 2024年12月のブログ一覧へ ブログ一覧へ |