見出し画像

3DプリンターでIIDXコントローラーを作る ターンテーブル~組み立て編

前回の記事では3Dプリンターでボタンを作るまでを書いた。この記事ではターンテーブルの作り方と組み立て方を書く
わざわざ2章編成にする必要無かったかもしれない


1,ターンテーブルの3Dモデルを作る&パーツ説明

はっきり言うと、ボタンに比べれば大まかな寸法でも作れるので非常に簡単。しかしEnder3で作れるサイズがおおよそ200mm×200mm×200mmなのでアーケードサイズ(直径250mmほど)は作れない。なのでPS2専コンのサイズ(直径155mm)に合わせることにした
以下実際に作ってみたSTLファイル(MITライセンス)。プリント時間と使用フィラメント量はUltimaker Curaでの測定値(インフィル率20%)
なお構造が構造なので他の専コンとの互換性は無い
IIDX用ターンテーブルの3Dモデル

1,ターンテーブル

プリント時間:10時間35分
使用フィラメント量:57g

iidx turntable 1.stl
印刷したもの

中央の穴は後述のロータリーエンコーダーをはめるための穴。当然だが素材が素材なのでものすごく軽い。重くしたいなら一工夫が必要
前述のプリント時間と使用フィラメント量だが、皿は負荷がかかる部分なのでおそらくインフィル率は高めにしたほうがよい。筆者は60%で制作した
また、そこまでプリント精度もいらないので品質(レイヤー高さ)も下げてプリントしてよい。Ender3の最低設定まで下げて印刷時間は約半分の5時間強まで落ちたが、使用感は問題無い

2,受け皿

プリント時間:12時間14分
使用フィラメント量:64g

iidx turntable 2
印刷したもの

ターンテーブルの自作を試みる多くの人にとって障害になるであろう受け皿の部分。レコードや円盤状のものを流用して自作しても、この受け皿が無いとスムーズに回せないのだ
土台の板などに固定するため4点のネジ穴を開けてある。また底面にも後述のロータリーエンコーダーをはめるための溝が作ってある

赤い部分にいい感じにハマる

こちらもインフィル率は高めに、レイヤー高さは低品質に落として印刷するとよい

2,土台を作る

当noteの専コン製作記事恒例の土台作り。とはいえ、既に土台は作りまくってるため、これらのパーツをはめ込む天板だけで済ませることにした
ダイソーに売ってる300mm×400mmのMDF材を使う。少々根気は要るが、カッターナイフで加工できる

根性が曲がってるから切り口も曲がる。
右はロータリーエンコーダ用の穴。3cm四方で十分

この板を裏返すだけで左台にも対応できる。寸法は調べれば出てくるのでそちらを参照。ちなみに皿の位置は割と適当

この穴に前回制作したボタンをはめ込んでいく。ターンテーブルの受け皿はロータリーエンコーダーと組み合わせる
使用したロータリーエンコーダーは秋月電子で売っている「EC12E2430803」。ノンクリックタイプで、これを使用したSDVXコントローラーの記事もある。これをターンテーブルに使用する

皿上部とエンコーダーの結合部に遊びがあるなら養生テープあたりを1周ほど巻けばちょうどよくハマる
受け皿を板に固定し、皿を乗せれば見た目だけは完成

これは完成品

3,配線とスケッチ

ボタン部分の配線については割愛する。Arduinoなり専コン基板なりにGNDと各線を繋げばよい。ロータリーエンコーダーを専コン基板に繋ぐ方法は知らないのでArduino互換機Pro Microを使用する。当noteのIIDXコントローラー製作記事も参考にするとよい(ステマ)

ロータリーエンコーダーの配線については下記記事を参照

当記事ではこの配線でIIDX用にターンテーブル処理を作ったスケッチを載せる。ボタンの入力処理のスケッチは過去の記事から流用している
なお、下記スケッチを使うにはEncoder.hライブラリの導入が必要になる。スケッチ→ライブラリをインクルード→ライブラリを管理→Encoderで検索→Paul Stoffregen氏制作のライブラリをインストールする

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

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

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 < 8; 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 < 8; 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();
}

E1~E4を使う場合はスケッチに追加する。上記のスケッチは1~7鍵+ターンテーブルのみを前提にしたスケッチとなる
E1~E4対応のスケッチはこちらを参照

ロータリーエンコーダーの配線は10ピンと16ピンを使う。配線に応じて変えてもいい
これでスケッチの書き込みと配線が正しく行われていれば一応の完成となる



4,テストプレイ動画

さて、ここまで作ったが本当に遊べるのか?制作の苦労が水の泡になったりしないか?という不安もあるだろう。そんな不安を払拭するためテストプレイ動画を載せる

さすがに三和ボタンの使用感には敵わないが、これでも十分遊べるものとなった。特に皿に関してはボタンのように単体では手に入らないため、ASCIIコンやPS2専コンの流用が主だった自作勢には選択肢に入るだろう。配線もスマートだし、(3Dプリンターへの初期投資を除けば)費用も安く済む
そんな皿がどこまでプレイに耐えられるかのテスト動画もある。少なくとも赤鮭灰や灼熱灰くらいなら問題無さそうだ

ツイートにも書かれている通り、グリース散布で非常に滑りが良くなる。デフォルト状態で重さを感じたら使ってみるとよい

5,費用

フィラメントはメーカーにもよるが、Amazonでも高く見積もって1kg3000円、つまり1g3円として計算してみる。相変わらず使用フィラメント量はCuraでの測定値を使う

  • ボタン:使用フィラメント量25g×7×3円=525円

  • ターンテーブル:使用フィラメント量121g×3円=363円

  • Arduino互換機Pro Micro 約1000円

  • 土台 MDF材100円+枠組み500円=600円

  • ロータリーエンコーダー 90円

  • 三和バネ1個187円×7=1309円

  • オムロン製D2MV-01-1C3 1個220円×7=1540円

  • 各端子やケーブル等電子工作部品 見積もって約200円

およそ5600円となった。ここにEnder3の2万円を加えるかはあなた次第
自作専コンの選択肢のひとつとしてこの記事が役に立てば幸いだ