見出し画像

【beatmaniaIIDX用】ハンドメイドコントローラーについて

当noteでも紹介している通り、音ゲーコントローラーの自作に日々励んでいる。そのノウハウを活かし、先日新たにサードパーティ製の自作専コン販売を開始した

反響は概ね上々で、お買い上げいただいたプレイヤーからもポジティブな声が届いている。ありがたいことです
思った以上に需要がありそうなため、この自作専コンに関する情報を当記事にまとめておこうと思う。興味が湧いた人の購買意欲を高めたり、自身で制作を試みたり、作者に身に何かが起きたり作るのに飽きたりしたときに参考にしてもらえると嬉しい


1,各部品の種類、交換方法

鍵盤部分

まず、製品の自作専コンにはAliExpressで購入した非純正のボタンを使用している。ここを純正から非純正に替えることで劇的なコストカットが見込めるからだ
過去の記事で純正三和ボタンとAliExpress製ボタンの比較をしたことがある

筆者の感覚としては、バネとスイッチを純正にすればほとんど押し心地は変わらない印象だった。なのでこれを製品に使用することにした
AliExpress内でもいろいろなIIDX用ボタンが販売されてるが、最もスタンダードなのは白鍵4個+黒鍵3個+正方形2個のこれだろう。送料が無料なので最も無難だ。上記記事でもこれを購入して使用している(販売している商品では別の商品を大量発注している)

スイッチとバネは純正ものを使用している。さすがにここをケチると押し心地がかなり変わってしまう
バネは楽天の三和電子のショップページにて販売されている。お好みの重さのものを買おう。スイッチもここに売っている(製品に使用されているのは20g 現在はバネ抜き+100gスイッチで構成)

先程の専コン制作記事では、スイッチにはD2MVシリーズのスイッチを使っていたが、これらは生産終了が予告されており、現在は公式筐体も互換品のVXシリーズに換装されている
製品で使用されているのはVX-01-1A3。公式と同じく50gのスイッチだ。現在はまだ三和電子のストアでは取り扱っておらず、公式やモノタロウなどのサイトで購入できる
現在は100gスイッチの「V-10-1A4」をバネ抜きして使用している。また、上記「VX-01-1A3」とほぼ同じ規格の「VX-01-1C23」が現在三和電子ストアでも取り扱われている。LM筐体標準品も1C23のようだ

型番違いで「VX-01-1A2」または「D2MV-01-1C2」というのもある。こちらは20g~25g。自作する人は好みに合わせて注文しよう

バネ、ボタンはともかく、スイッチは使用しているうちに劣化していく。つまり消耗品であり、交換が必要な時期が来る。ここではバネ、ボタン、スイッチの換装方法を説明する

配線等は省略する。この端子を引っ張って外す
反時計回りにカチッと音がするまで回す。これで外れるようになる
スイッチを交換する際は、交換した後配線し直してまた同じ工程で戻す
ナットを外してフタも外す
天板から鍵盤が外れるようになる。これで三和ボタン等に換装できる
バネを交換する際は爪を内側に押し込んで外す
これでバネを交換できる。あとは同じ工程で戻す

詳しくは後述するが、製品のArduino基板に対応した鍵盤の各ピンは

  • 1鍵→2

  • 2鍵→3

  • 3鍵→4

  • 4鍵→5

  • 5鍵→6

  • 6鍵→7

  • 7鍵→8

  • E1→9

  • E2→14

  • E3→15

  • E4→A0

となる。基板にプリントされた数字を見ながら配線してください

ターンテーブル部分

ターンテーブルには3Dプリンターで作成した自作のものを使用している。過去の記事で制作したものだ

ここではプリントに必要なSTLファイルも含めて改めて解説する
ターンテーブルのSTLファイル (2024/01/08に少し調整。ターンテーブルが受け皿と擦れて回しづらくなることがあるため、受け皿の直径を拡大)
製品では操作性向上のために表面にPVCレザーを貼り付けている

印刷したものがこちら。受け皿はネジとナットで2点~4点留めする
裏面。ロータリーエンコーダーが固定されている。製品では写真上の基板付きを使用

ロータリーエンコーダーは秋月電子で販売されているアルプス電気のノンクリックタイプ。安価なので壊れたときでもユーザー側で低負担で交換ができる
そのままでは割と重い。4隅の足をマイナスドライバーなどで起こして重さを調整できる

埋め込みがうまくいかないのでスクショで失礼

製品では足の中央がGND、両端が基板の10、16に対応している。各ピンに接続し、下記のスケッチをインストールすればボタン扱いで入力される

基板部分

あまり考えられないが、何らかの原因で基板が故障するかもしれない。基板の交換方法についても説明する
製品の基板にはArduino互換機、Pro Microを使用している。当noteでの専コン制作では非常にお世話になっているものだ
Pro Microの購入方法は多々あるが、どうも値段が安定しない。種類もいくつかあるため、戸惑った場合は筆者が購入している遊舎工房で購入するといいだろう

しかしこのPro Micro、最大の問題点として端子部分が物理的に壊れやすいという欠点がある。使用する前に接着剤等で補強することを推奨。製品のPro Microは補強済み。Type-C基板なら耐久性が上がっているため、そちらの購入も検討すると良い

補強したらピンヘッダをはんだ付けし、製品と同じ位置に差し込む。後述するファームウェアをインストールすれば交換は完了する

2,配線とファームウェア

配線

製品では黒線がGND、それ以外はジャンパーワイヤーを使用している
VX-01-1A3の端子が250型ファストン端子なので正確には187型(4.8mm)でした。失礼。圧着端子には250型187型メスを使用する。VX-01-1C23などを使う場合は対応した端子で配線しよう

以前はブレッドボードで配線していたが、現在は3Dプリンターで作成したProMicro用のケースを用いて直接ケーブルを刺している。STLファイルは以下
ProMicro用ケースSTLファイル

汚いね!
ProMicro用ケース。端子を上にしてピンヘッダをはんだ付けする
こちらはブレッドボードを使用した旧仕様の製品内部

ファームウェア

ファームウェアとはArduino基板に書き込む組み込みプログラムのこと。これをインストールすることで、基板がゲームパッドとして認識される
製品もファームウェア書き換え用のソフトをパソコンにインストールすれば書き換えられる。知識ある人なら好みに合わせて調整もできる。以下では手順を説明する

まず公式サイトからArduino IDEをダウンロード、インストールする

インストールしたら、ファームウェアに使うHIDライブラリなるものもダウンロードする。下記リンクから最新版をどうぞ

ロータリーエンコーダー用のライブラリもダウンロードする

IDEを起動したらメニューの「スケッチ→ライブラリをインクルード→.ZIP形式のライブラリをインストール」で上記HIDライブラリとEncoderライブラリを選択してインストールする
あとはUSB接続で基板をPCに繋ぎ、「ツール→ボード→Arduino AVR Boards→Arduino Leonard」を選択、同メニューのシリアルポート欄で基板が接続されていれば、下記のプログラムをインストールする

#include <Arduino.h>
#include <HID-Project.h>
#include <limits.h>
#include <Encoder.h>

// ピン番号 1~7鍵→E1~E4
int button[13] = {0, 2, 3, 4, 5, 6, 7, 8, 0, 9, 14, 15, A0};
bool button_prev[13];
#define log_timer 50 //スクラッチ入力許容度
#define scratch_timer 30 //スクラッチの入力が残る時間

Encoder Enc(10, 16);
int input_log[log_timer];
int max_value;
int min_value;
int timer;

int i;

void setup() {
  for (i = 1; i < 13; i++) pinMode(button[i], INPUT_PULLUP);

  Gamepad.begin();
}

void loop() {
  int i;
  //delay(1); delayは消してみる
  max_value = INT_MIN;
  min_value = INT_MAX;
  //過去log_timer秒分のロータリーエンコーダーの値を記録し最小値と最大値を調べる
  for (i = 0; i < log_timer; i++) {
    if (i == log_timer - 1) input_log[i] = Enc.read();
    else input_log[i] = input_log[i + 1];
    max_value = max(max_value, input_log[i]);
    min_value = min(min_value, input_log[i]);
  }

  // 鍵盤の処理 皿の入力タイミングと合わせるために1ms遅延させる
  for (i = 1; i < 13; i++) {
    if (button_prev[i] == true) {
      Gamepad.press(i);
    }
    else {
      Gamepad.release(i);
    }
  }
  for (i = 1; i < 13; i++) {
    if (digitalRead(button[i]) == LOW) {
      button_prev[i] = true;
    }
    else {
      button_prev[i] = false;
    }
  }

  //台揺れなどのチャタリング防止のために2以上動いてたらスクラッチ判定
  if (max_value - min_value > 1 || max_value - min_value < -1) {
    if (input_log[log_timer - 1] > input_log[log_timer - 2]) {
      Gamepad.release(20);
      Gamepad.press(21);
      timer = scratch_timer;
    }
    if (input_log[log_timer - 1] < input_log[log_timer - 2]) {
      Gamepad.release(21);
      Gamepad.press(20);
      timer = scratch_timer;
    }
  }

  if (timer < 0) {
    Gamepad.release(20);
    Gamepad.release(21);
  }

  timer--;

  Gamepad.write();
}

これをコピペして左上の「マイコンボードに書き込む」を押せば基板にインストールされ、ゲームパッドとして使用可能になる
選曲画面でカーソルが合わせづらいときは「#define scratch_timer 50」の値を30に変えたり、皿の反応が過剰な場合は「#define log_timer 50」の値を小さくするとよい

3,外箱

製品の仕様は幅約45cm現在は43cm、奥行き約25cm現在は20cm、高さ約10cmである。自作する際は好みに合わせて大きさを変えるとよいが、鍵盤と皿の間を考えると43cmは必要だろうというのが所感だ
天板にはカッターナイフでも加工しやすいMDF材を使用。厚さは2.5ミリ。それ以上厚いと加工がキツイ
以下は製品の天板の寸法。2P側左下は各辺から5cm現在は3cm離れている。そこも好きに調整するといい

拡大推奨。1Pサイドの場合は反転させる

枠組みについては1×4材などホームセンターに売っている適当なものを使う。DIYの経験があれば説明するまでもないだろう。筆者は接着剤ではなくネジで固定する派
底版を使うかはお好みで。製品には見た目重視で底版を付けたが、実のところは底版無い方がメンテしやすいので底版はいらない派

終わりに

以上、販売開始して早々に制作方法を公開したわけだが、これは少し思うところがあったからだ
コナステ版の音ゲーは素晴らしいサービスを提供しているにもかかわらず、専用コントローラーの高価格化及び供給不足という点が足を引っ張っているように感じる。これではコナステ版を遊びたくても、キーボードや形状の違うコントローラーを使用しなくてはならないし、新規参入のハードルも高くなる
この記事と自作専コンの販売で僅かながらも音ゲー専コンの供給不足を解決できると面白いなと思う。もちろん小遣い稼ぎになるのも嬉しいので、BOOTHのほうの在庫も逐一補充していく。興味のある方はぜひご購入ください
在庫は筆者のTwitterアカウント等で随時報告していきますので、「欲しいけど在庫が無い!」という方は確認してみてください
BOOTHの入荷通知登録も参考に在庫を補充するため、購入予定の方は積極的に入荷通知メールの登録をどうぞ
最後にもう一度、商品ページとTwitterアカウントを載せておく