3DプリンターでSOUND VOLTEXコントローラーを作る
IIDXのコントローラーを3Dプリンターで作れたならボルテのコントローラーも作れるんじゃない?となるのはある意味当然と言える。スクラッチの部分にはロータリーエンコーダーを使用したし、ボルテのつまみにもロータリーエンコーダーが使える。ボタンも大きさを変えるだけで対応できる。IIDXコンの3Dモデルを基にボルテコンも作ってみることにした
1,スイッチ、バネ、ロータリーエンコーダーの調達
ボルテのバネ/スイッチは各20g/100gらしい。IIDXより重いものの、ボタン面積が広いので妥当だろう
これに関しては3Dプリンターでは作れないので純正品を使う
各6個+スタートボタンはお好みのもので
ロータリーエンコーダーはIIDXのターンテーブルに使用したものと同じ。左右で2個必要
相変わらずだがボタン信号にはArduino互換機Pro Microを使用する
2022年6月現在、一番安く買えるのはおそらく遊舎工房という自作キーボード用通販サイトと思われる
2,土台を作る
もはや何も言うまい。使用するのは300mm×450mmの板と適当な木材
3,SDVXの3Dモデルを作る(BTボタン)
ほとんどはIIDXのモデルから流用したもので、耐久性の強化などいくつかの改善を加えている。純正のボタンを持っていないため、ネットで調べた寸法から作成している
故に純正ボタンとの互換性も無し。ここで制作するものは完全に3Dプリンター製コントローラー専用のパーツとなる
各部位はIIDX同様にいくつかのパーツから構成されている。IIDXのボタン制作記事を読んだ方なら大まかな流れは分かるだろう
プリント時間、使用フィラメント量はUltimaker Curaの測定値(レイヤー高さ0.12mm、インフィル率20%)
DLはこちら
SDVX用BTボタンSTLファイル
1,ボタン上部
プリント時間:2時間58分
使用フィラメント量:16g
実際に押す部分。モデルではバネを入れる細いほうが下になっているが、印刷の安定を重視するなら180度回転させて広いほうを下にしてもいい
2,ボタン下部
プリント時間:4時間32分
使用フィラメント量:22g
天板にはめる部分。IIDXボタンと違い、ネジ部分を厚くして耐久性を強化しているため、直径はM28×2になっている
3,固定用フタ
プリント時間:1時間28分
使用フィラメント量:7g
下からナットと共にボタン下部を天板に固定するためのフタ
4,スイッチホルダー
プリント時間:50分
使用フィラメント量:3g
IIDXボタンからの流用。両側から挟んでスイッチを固定する
5,ボタン上部の足
プリント時間:22分
使用フィラメント量:1g
これもIIDXボタンからの流用。足が折れないように分割して印刷する
6,ナット
プリント時間:44分
使用フィラメント量:3g
ボタン下部を固定するためのナット。噛み合わせが悪いとなかなか入りづらいので、締める、緩めるを繰り返して慣らしながら使うとよい
上記を組み立てたもの
1、2、4、5を組み立ててボタンの体を成したもの
4,SDVXの3Dモデルを作る(つまみ)
DLはこちら
SDVX用つまみSTLファイル
1,つまみ本体
プリント時間:2時間28分
使用フィラメント量:10g
肝心要のつまみの部分。ロータリーエンコーダーに刺して使う
ボタンを固定するネジ穴等は無し。ロータリーエンコーダー側の遊びを調整してはめ込む形で固定させる
2,ロータリーエンコーダー固定具
プリント時間:55分
使用フィラメント量:3g
ロータリーエンコーダーは少し工夫して固定することにする。つまみと一緒に回ってしまってはプレイにならないからだ
組み立て方は後述する
3,固定用フタ
プリント時間:35分
使用フィラメント量:3g
ロータリーエンコーダー固定具を天板の固定するためのフタ
4,ナット
プリント時間:25分
使用フィラメント量:2g
上記固定用フタと合わせて使う
組み立て方
2にロータリーエンコーダーが入る。はんだ付けしたロータリーエンコーダーを突っ込む
天板に開けた2cm四方の穴にはめ、フタとナットで固定する
これでいくら回しても微動だにしないロータリーエンコーダーとなる
5,SDVXの3Dモデルを作る(FXボタン)
わざわざ別項に分けたが、IIDXのボタンと同じなのでそちらのモデルを使う
詳しくは下記の記事を参照
6,SDVXの3Dモデルを作る(STARTボタン)
24mm四方の正方形ボタン。IIDXのE1~E4などにも使える
DLはこちら
汎用24mm正方形ボタンSTLファイル
1,ボタン上部
プリント時間:1時間20分
使用フィラメント量:6g
説明がめんどくさくなってきた各パーツの組み立て方はBTボタンと同じ
2,ボタン下部
プリント時間:2時間30分
使用フィラメント量:11g
3,固定用フタ
プリント時間:1時間3分
使用フィラメント量:5g
4,スイッチホルダー
プリント時間:50分
使用フィラメント量:3g
IIDXボタン、及びBTボタンと同じ
5,ボタン上部の足
プリント時間:22分
使用フィラメント量:1g
IIDXボタン、及びBTボタンと同じ
6,ナット
プリント時間:44分
使用フィラメント量:3g
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円ほど(送料別)。多分これが一番安いと思います