SDVXのコントローラーをつくる

前置き

INFINITASでも動くコントローラーの記事の続きを書こうとしたのですが致命的なミスがあることに気づいたので、気づくきっかけになったこっちを先に書きます。
SOUND VOLTEX cloudがいつぞやかに正式稼働していました。
INFINITASよりも影が薄いような?と思いましたがK社のミスなのか正式稼働後しばらくしないとコントローラーを出したくない様子。(なぜなのか、これがわからない)
コントローラーがないのにどうやってプレーするのか(キーボードでもできますが)
せめて同時に発売してほしいものです。
しかしINFINITASとは違い割と低スペックなパソコンでも動いてくれるので自分としてはありがたいです。
ということでコントローラーがないので作ろうと思いました。

準備

f:id:or_blog:20171118151918j:plain

もっと綺麗に移す術はなかったのですかね(自問自答)
今回は素材をケチるつもりがないため高い純正のボタンを使用しました。
部品は以下のようになります。
後で調べる

今回は25000円くらいかかっています。
ちなみにとっくに完成してプレイしてる様子がこちらです。(プレイしているのは大学の友人です)
f:id:or_blog:20171118152201j:plain

ちなみに11月23日現在、SOUND VOLTEX cloudはキーボード入力しか受け付けません。そのためキーボードのキーをコントローラーのそれぞれに割り振っています。そのためツマミを早く回しても遅く回しても外れた時の修正にかかる時間は同じです。
おそらくコントローラーが発売と同時に受け付けるようになるのか、はたまた認証チップのようなものを純正のコントローラーにつけてそれがないと受け付けないようになっているのかもしれませんが、調べた限りでは現状このようにするしかなさそうでした。

先にプレイした結果ですがほぼ問題なくプレーできます(但し高難易度になった時つまみがはずれた!みたいな事故が起きると落ち着いてつまみを戻さないといけないためそこが難点)

制作

まず木材加工から始めました。
図面はGoogle先生に「SDVX コントローラー 寸法」などでしらべるとよいです。穴を開ける工具には自分はドリルとヤスリで行いましたが小さく穴を開けすぎていた為地獄でした。専用工具が欲しいですね。あとボタンの構造をみると分かりますが広く開けすぎてもだめなのでそこを注意して開けましょう。つまみ用の穴は各自買ったエンコーダが入るサイズにしましょう。自分はロータリーエンコーダの付け方をミスしているため(抜けなくなったのでいざ部品交換をすときははエンコーダを壊すしかない)参考にすると危ないかも知れません。自分はロータリーエンコーダのネジみたいな部分と同じくらいのサイズの穴を開けてそこに差し込みました。
f:id:or_blog:20171118153043j:plain

配線とか

f:id:or_blog:20171118153802j:plain
とりあえずボタンをはめ込んでスイッチにあった線を指したときの状態がこれです。スタートボタンの分の線は買い忘れました。
まずは圧着端子をつけてボックスコネクタ(名前あってたっけ?)に付けていきます。

f:id:or_blog:20171118154008j:plain
専用の工具がいるのでない場合は買うなり何なりしないと厳しいかもしれません。最悪被覆をとってそのままブレッドボードにさしてもいい気はしますが。ちなみにユニバーサル基盤をつかわなかったので本当はこの工程いらなかった気もしますがいざ変えたいと思った時にすくなくとも便利だとは思います。(まとめやすいし外れにくい)

f:id:or_blog:20171118154321j:plain
配線をそれっぽくさしました。これでは動かなかったのであとで配線を大きく変えました。なんで動かないのかわからない(まだまだ経験が少ないといえばそれまでですが)のを自力で解決まで持っていけた時はおもしろいので電子工作は面白いですね。(何事にも言えますけど)
配線は下図のように行いました。(なんかまちがってるかも)
f:id:or_blog:20171122202052p:plain
もしよくわからない事があったり、ここ間違ってない?という事が有りましたらコメント等で教えていただけると幸いです。
またロータリーエンコーダは赤が電源、黒がGND、緑がABの位相を出力しているものだったはずです。AB指し間違えると逆に動くのがわかるので間違えてたらABを逆にしましょう。

あと正しく配線をおこなったあとがこれです。汚い…(精進したい)
f:id:or_blog:20171123224101j:plain

コーディング

先にHID-Projectを使えるようにしておきましょう。
zip形式でダウンロードしてから、スケッチ>ライブラリをインクルード>ZIP形式のライブラリのインストールから選択してください。(たぶんできます)
これを使いたいのでArduino leonardoを使用しましたが、これが使えるならほかのものでもいいかもしれないです。

gist.github.com

スイッチ部分
digitalReadでそれぞれのピンから情報をもってきておしまいです。
チャタリング対策をするとなおいいかもしれませんがいまのところ何ともないのでしてないです

ロータリーエンコーダ部分
ここで前回にミスしたことが発覚します。ロータリーエンコーダは二つの位相で現在の状態をあらわして、それの変化でどちらにまわっているかを決めています。変化したらキーを押すとしていました。このゲームは一定間隔未満の連打入力は受け付けないので、この処理ではロータリーエンコーダの入力が短時間に多すぎでした。連続的におすように処理を変えました。(INFINITASコンはコードをまた変えないといけないので後回しになりました)
あとロータリーエンコーダをメインループにおくと読みこぼしが多く発生します。そのため別のマイコンを使いそちらにロータリーエンコーダの部分だけ処理を委ねるかnミリ秒毎にロータリーエンコーダの処理を行う用にするか、読みこぼしはスルーするようにするかの3つの方法が思い浮かびました。今回は手っ取り早く三つ目をつかいましたが本当は良くないので一つ目の案にのちのち書き換えようと思います。

最後に

家でサウンドボルテックスができるのは楽しかったです。初めてじっくりと時間をかけてやった音ゲーだと思います。INFINITEモードでは版権、東方アレンジが収録されていないので少し寂しいですが、権利的に云々がありそうなのでおとなしく我慢することにします。十分遊べる代物だと思います。チケット消費で遊ぶモードもありますがよっぽどのことがない限り(ゲームセンターが遠い、もうやってない時間にプレイしたいなど)ゲームセンターで遊んだほうが充実して同じような金額で遊べるので正直渋めなのが残念で仕方ない…

追記
記事のPV数が伸びてたので追記。
もし作ってるときに「おいここわかんねえぞ!」とか作る前に「これなんだぁ!」って人がいればこちらのTwitterアカウントやリプライやDM質問いただければ記憶にある範囲でお答えします。
twitter.com