SDVXのコンパネをコナステ版に流用する
3DプリンターでSDVXのコントローラーを作ったわけだが、SDVXコントローラーの現物が欲しくなった。というのも、IIDXコントローラーはボタンを買ったり既存の専コンを流用したりである程度実寸を測れたものの、SDVXコントローラーの寸法はインターネットで調べた情報だったからだ
1,コンパネの調達
ヤフオクで、予算は1万円で落札を狙うことにした。純正の三和ボタン、スイッチ、バネ、つまみ一式等を買うよりは遥かに安い
そして落札したものがこちら
落札価格は10,500円+送料2,000円-クーポン使用1000円=合計11,500円。少しオーバーしたが問題無い
2,コネクタの作成
今回も接続にはArduinoを用いる。各ボタンとエンコーダーに繋がってるコードを切断して繋ぐ手もあるが、あまりにもったいないので非破壊で使うことにする
コンパネ側に34ピンオス端子が付いてるので、ピンヘッダを使って34ピンメス端子を作った。ピンヘッダが余っていたので専用のコネクタは買わなかった
ちなみに使用されているスイッチは三和製のランプホルダー一体型「OBSA-LHS1F-LN」。ランプは12vなので、USB給電で光らせるには5vLEDに換装する必要がある
専用のハーネスも売っているので、XADコネクタを経由せずともハーネスの作成が可能
つまみは可変抵抗器(ボリューム)を使用している。型番は「ELV-24X35B-K」。詳しくは後述のスケッチの通りで、0~1024のアナログ値をそれぞれXY軸循環に割り当てることで使用可能になる。仕組はIIDXのターンテーブルと同じ
こちらの接続用端子はZHR-3
中にはロータリーエンコーダーに換装して動かした猛者もいる
つまみはVCCを5V端子orVCC端子に、INをA0、A1に繋ぐ(スケッチは後述)。GNDは名前通りGNDに繋ぐ
今回は(主に配線がめんどくさいので)LEDは光らせない方向で。そのうち気が向いたら光らせるかもしれない
しかし上記の方法では接触が安定せず、プレイするたびに入念に端子を調整する必要がある。見た目もスマートじゃないし面倒なので、正規のコネクタに換装しようと「何を使えばいいんやろな~」とぼやいていた。そしてある日
技術系の情報が的確に飛んでくるのがインターネットのすごいところ。たーん氏の助言通り、モノタロウに在庫があったので注文してみた
筆者は間抜けなのでコネクタだけ買って接続用のソケットを買ってなかった。そちらも忘れずにお買い求めください
正規品と同じコネクタなのでガッチリハマった。これで接触不良に悩まされることはないだろう。ハーネス作成初めてにしては上出来
IIDXのコンパネとは違いスイッチやエンコーダーが剥き出しなので土台も適当に用意する。今回使用したのはダイソーのビッグブロック。両端に下駄を履かせる
3,スケッチを書く
ライブラリが用意されていたロータリーエンコーダーと違って可変抵抗器なので回転方向に検出に少々苦戦した。以下はそのスケッチ
各ボタンは2~8ピンを使用する
2022/09/19にスケッチを改善。
ジョイスティックライブラリを使用することでつまみの入力をアナログにした
2023/09/15にまたスケッチを改訂。
PID/VIDを書き換えて公式コンと同じ挙動にするため
#include <Joystick.h>
#include <Arduino.h>
//#include "HID-Project.h"
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_GAMEPAD,
7, 0, // Button Count, Hat Switch Count
true, true, false, // X, Y, Z
false, false, false, // Rx, Ry, Rz
false, false, // Rudder, Throttle
false, false, false); // Accelerator, Brake, Steering
//ピン番号 0は欠番
int button[7] = {2, 3, 4, 5, 6, 7, 8};
//つまみのピン番号 A0とA1を使う
int L_pin = A0;
int R_pin = A1;
int L_val;
int R_val;
int i;
void setup() {
for (i = 0; i < 7; i++) pinMode(button[i], INPUT_PULLUP);
Joystick.begin(true);
Joystick.setXAxisRange(0,1024);
Joystick.setYAxisRange(0,1024);
for (i = 0; i < 7; i++) Joystick.setButton(i, button[i]);
}
void loop() {
L_val = analogRead(L_pin);
R_val = analogRead(R_pin);
Joystick.setXAxis(L_val);
Joystick.setYAxis(R_val);
for (i = 0; i < 7; i++) {
if (digitalRead(button[i]) == LOW) {
Joystick.pressButton(i);
}
else {
Joystick.releaseButton(i);
}
}
}
ピンとボタンの対応はそれぞれ
・2ピン→STARTボタン
・3~6ピン→BT-A~BT-D
・7、8ピン→FX-L、FX-R
となる
そして次はPID/VIDの変更
Pro MicroはArduino Leonardoとして使用できるため、
C:\Users\username\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6
内にある「board.txt」ファイルの、「leonardo.build.vid=」「leonardo.build.pid=」の以後の数字を編集して書き込む
それぞれのIDはここに書くとコ○ミに消されそうなので、それが載っているGitHub上のソースコードのリンクだけ載せておく
PocketVoltex/Firmware/PocketVoltex/Descriptors.c
書き換えた後にArduino IDEを再起動しないと反映されない点に注意
なお、この情報は公式のコントローラーを確認したわけではなく、あくまでもPocketVoltexという製品のオープンソースコードを参考にしたという点を留意してください
つまみのXY循環に対応した上でチャタリングもソフトウェア側で処理するため、ほとんど筐体上でプレイするのと同じ感覚になる。選曲画面のカーソルも爆速
4,完成
やはり筐体のものをそのまま使っているため3Dプリンター製とは使用感が段違い。しかし重い。その点だけは自作コンに軍配が上がる
費用はコンパネ以外は2000円もあれば間に合う。むしろコンパネの調達価格に大きく左右されるため、あえて計算はしない