見出し画像

3DプリンターでSOUND VOLTEXコントローラーを作る

IIDXのコントローラーを3Dプリンターで作れたならボルテのコントローラーも作れるんじゃない?となるのはある意味当然と言える。スクラッチの部分にはロータリーエンコーダーを使用したし、ボルテのつまみにもロータリーエンコーダーが使える。ボタンも大きさを変えるだけで対応できる。IIDXコンの3Dモデルを基にボルテコンも作ってみることにした

1,スイッチ、バネ、ロータリーエンコーダーの調達

ボルテのバネ/スイッチは各20g/100gらしい。IIDXより重いものの、ボタン面積が広いので妥当だろう
これに関しては3Dプリンターでは作れないので純正品を使う
各6個+スタートボタンはお好みのもので

ロータリーエンコーダーはIIDXのターンテーブルに使用したものと同じ。左右で2個必要

相変わらずだがボタン信号にはArduino互換機Pro Microを使用する
2022年6月現在、一番安く買えるのはおそらく遊舎工房という自作キーボード用通販サイトと思われる

2,土台を作る

もはや何も言うまい。使用するのは300mm×450mmの板と適当な木材

設計図。伝われ
スケッチ
くり抜き。ヤスリがけで地道に削ったので比較的綺麗
天板を乗せる台。ケーブル通す溝も作る
つまみ部分の2cm四方の穴は後述するつまみ一式のための穴

3,SDVXの3Dモデルを作る(BTボタン)

ほとんどはIIDXのモデルから流用したもので、耐久性の強化などいくつかの改善を加えている。純正のボタンを持っていないため、ネットで調べた寸法から作成している
故に純正ボタンとの互換性も無し。ここで制作するものは完全に3Dプリンター製コントローラー専用のパーツとなる
各部位はIIDX同様にいくつかのパーツから構成されている。IIDXのボタン制作記事を読んだ方なら大まかな流れは分かるだろう
プリント時間、使用フィラメント量はUltimaker Curaの測定値(レイヤー高さ0.12mm、インフィル率20%)
DLはこちら
SDVX用BTボタンSTLファイル

1,ボタン上部

プリント時間:2時間58分
使用フィラメント量:16g

sdvx button 1.stl

実際に押す部分。モデルではバネを入れる細いほうが下になっているが、印刷の安定を重視するなら180度回転させて広いほうを下にしてもいい

2,ボタン下部

プリント時間:4時間32分
使用フィラメント量:22g

sdvx button 2.stl

天板にはめる部分。IIDXボタンと違い、ネジ部分を厚くして耐久性を強化しているため、直径はM28×2になっている

3,固定用フタ

プリント時間:1時間28分
使用フィラメント量:7g

sdvx button 3.stl

下からナットと共にボタン下部を天板に固定するためのフタ

4,スイッチホルダー

プリント時間:50分
使用フィラメント量:3g

sdvx button 4.stl

IIDXボタンからの流用。両側から挟んでスイッチを固定する

5,ボタン上部の足

プリント時間:22分
使用フィラメント量:1g

sdvx button 5.stl

これもIIDXボタンからの流用。足が折れないように分割して印刷する

6,ナット

プリント時間:44分
使用フィラメント量:3g

sdvx button 6.stl

ボタン下部を固定するためのナット。噛み合わせが悪いとなかなか入りづらいので、締める、緩めるを繰り返して慣らしながら使うとよい

上記を組み立てたもの

1、2、4、5を組み立ててボタンの体を成したもの

4,SDVXの3Dモデルを作る(つまみ)

DLはこちら
SDVX用つまみSTLファイル

1,つまみ本体

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

sdvx tsumami 1.stl

肝心要のつまみの部分。ロータリーエンコーダーに刺して使う
ボタンを固定するネジ穴等は無し。ロータリーエンコーダー側の遊びを調整してはめ込む形で固定させる

2,ロータリーエンコーダー固定具

プリント時間:55分
使用フィラメント量:3g

sdvx tsumami 3.stl
上から見た図

ロータリーエンコーダーは少し工夫して固定することにする。つまみと一緒に回ってしまってはプレイにならないからだ
組み立て方は後述する

3,固定用フタ

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

sdvx tsumami 3.stl

ロータリーエンコーダー固定具を天板の固定するためのフタ

4,ナット

プリント時間:25分
使用フィラメント量:2g

sdvx tsumami 4.stl

上記固定用フタと合わせて使う

組み立て方

2にロータリーエンコーダーが入る。はんだ付けしたロータリーエンコーダーを突っ込む

足を少し曲げると入る
ナットとワッシャーで固定

天板に開けた2cm四方の穴にはめ、フタとナットで固定する

これでいくら回しても微動だにしないロータリーエンコーダーとなる

5,SDVXの3Dモデルを作る(FXボタン)

わざわざ別項に分けたが、IIDXのボタンと同じなのでそちらのモデルを使う
詳しくは下記の記事を参照

6,SDVXの3Dモデルを作る(STARTボタン)

24mm四方の正方形ボタン。IIDXのE1~E4などにも使える
DLはこちら
汎用24mm正方形ボタンSTLファイル

1,ボタン上部

プリント時間:1時間20分
使用フィラメント量:6g

start button 1.stl

説明がめんどくさくなってきた
各パーツの組み立て方はBTボタンと同じ

2,ボタン下部

プリント時間:2時間30分
使用フィラメント量:11g

start button 2.stl

3,固定用フタ

プリント時間:1時間3分
使用フィラメント量:5g

start button 3.stl

4,スイッチホルダー

プリント時間:50分
使用フィラメント量:3g

start button 4.stl

IIDXボタン、及びBTボタンと同じ

5,ボタン上部の足

プリント時間:22分
使用フィラメント量:1g

start button 5.stl

IIDXボタン、及びBTボタンと同じ

6,ナット

プリント時間:44分
使用フィラメント量:3g

start button 6.stl

BTボタンと同じ

6,配線とスケッチ

これもほぼIIDXと同じ。GNDと各ピンを繋ぐだけ。ロータリーエンコーダーは10kΩの抵抗を挟んで使う。下記記事を参考


スタートボタンだけ省略してるがこんな感じ

Arduinoのスケッチは下記の通り。2~8ピンをボタンに使い、10~16をロータリーエンコーダーに使う

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

#define log_timer 50 //つまみの感度

Encoder EncL(10, 16);
Encoder EncR(14, 15);
//ピン番号 0は欠番 10~16はロータリーエンコーダー用
int button[8] = {0, 2, 3, 4, 5, 6, 7, 8};

int input_logL[50];
int prev_L;
int max_valueL;
int min_valueL;
int input_logR[50];
int prev_R;
int max_valueR;
int min_valueR;
int timer;
int i;

void setup() {
  for (i = 1; i < 8; i++) pinMode(button[i], INPUT_PULLUP);
  Gamepad.begin();
}

void loop() {
  delay(1); //1ミリ秒ごとに処理
  Serial.println(digitalRead(10));
  Serial.println(digitalRead(16));
  max_valueL = INT_MIN;
  min_valueL = INT_MAX;
  //過去50ミリ秒分のロータリーエンコーダーの値を記録し最小値と最大値を調べる
  for (i = 0; i < log_timer; i++) {
    if (i == log_timer - 1) input_logL[i] = EncL.read();
    else input_logL[i] = input_logL[i + 1];
    max_valueL = max(max_valueL, input_logL[i]);
    min_valueL = min(min_valueL, input_logL[i]);
  }

  max_valueR = INT_MIN;
  min_valueR = INT_MAX;
  //過去50ミリ秒分のロータリーエンコーダーの値を記録し最小値と最大値を調べる
  for (i = 0; i < log_timer; i++) {
    if (i == log_timer - 1) input_logR[i] = EncR.read();
    else input_logR[i] = input_logR[i + 1];
    max_valueR = max(max_valueR, input_logR[i]);
    min_valueR = min(min_valueR, input_logR[i]);
  }

  for (i = 1; i < 8; i++) {
    if (digitalRead(button[i]) == LOW) {
      Gamepad.press(i);
    }
    else {
      Gamepad.release(i);
    }
  }

  if (max_valueL != min_valueL) {
    if (input_logL[log_timer - 1] > input_logL[log_timer - 2]) {
      Gamepad.release(20);
      Gamepad.press(21);
    }
    if (input_logL[log_timer - 1] < input_logL[log_timer - 2]) {
      Gamepad.release(21);
      Gamepad.press(20);
    }
  }
  else {
    Gamepad.release(20);
    Gamepad.release(21);
  }

  if (max_valueR != min_valueR) {
    if (input_logR[log_timer - 1] > input_logR[log_timer - 2]) {
      Gamepad.release(23);
      Gamepad.press(22);
    }
    if (input_logR[log_timer - 1] < input_logR[log_timer - 2]) {
      Gamepad.release(22);
      Gamepad.press(23);
    }
  }
  else {
    Gamepad.release(22);
    Gamepad.release(23);
  }

  Gamepad.write();
}

7,完成

とりあえずテストしたい気持ちがあったのでスタートボタンは省略。早速遊んでみることにした
が、筆者はSDVXはほとんどやったことが無いため、下手くそなテストプレイとなっている

つまみも問題なく動く。高難易度はともかく、ある程度は遊べそうだ

スタートボタンもちゃんと作りました。3Dプリンター製SDVXコン製作記おしまい

8,費用

IIDXコントローラーと同じく、フィラメントは1g3円で計算してみる

  • BTボタン:使用フィラメント量52g×4×3円=624円

  • FXボタン:使用フィラメント量25g×2×3円=150円

  • つまみ:使用フィラメント量18g×2×3円=108円

  • STARTボタン:使用フィラメント量23g×3円=69円

  • 20gバネ121円×7=847円

  • スイッチ209円×7=1463円

  • ロータリーエンコーダー90円×2=180円

  • 木材 約1,000円

  • その他電子工作部品等 見積もって約300円

合計4800円ほど(送料別)。多分これが一番安いと思います