見出し画像

ArduinoでbeatmaniaIIDX DP環境を作るまで

今や音ゲーマーでは知らない人は居ない「beatmaniaIIDX INFINITAS」。月額約1600円でCS既出の旧曲+SIRIUS+RAの曲が遊び放題(誇大広告)+パック追加でLincle以降の曲も遊べる、ビートマニアマニアにとっては夢のようなゲームだ
しかしこれを遊ぶための専用コントローラーは、二次創作ゲーム「BMS」の人気や独特の機構からファンの間では高値で取引され、手を出しづらいものである。家で遊ぶための環境を作るには、ドラムマニアの次に敷居が高いと思われる(ていうかドラムマニアがぶっちぎりで高い)
海外のgamo2オンラインストアなどで売られているDAOコンと呼ばれるものや、インフィニタスのサービス開始に伴い公式から発売されたプロフェッショナルモデルの専コン、お求めやすい価格と相応にチープな作りエントリーモデルの専コンなどが現在発売されているが、一番安いエントリーモデルでも16,000円近くするため、未だに結構な初期投資が必要となる プレミアムモデル?そんなのもあったかもしれない
PS2時代に発売された専コンも一応流用できる。というより公式から上記のインフィニタス用コントローラーが発売されるまでは唯一公式から発売されていたコントローラーであり、一時期は7000~8000円程度で取引されていることもあったが、現在では上記の公式コントローラーが発売されたことにより4000円以下で落ち着いているように見える(駿河屋調べ)

たまに在庫が入る。安価で欲しい人はこまめにチェックするとよい

しかしこのPS2専コン(とエントリーモデル)、鍵盤部分が接地式ボタンを採用しているため、押し心地はACと全く違う。ACと同じ感覚でやりたい人には厳しいものがあり、家庭用だからと割り切れる人とそうでない人が居る。自分は不運にも後者であった。ACがパチパチ、カチカチといった押し心地に対して、こちらは一般的なゲームコントローラーと同じ機構のためモニョモニョといった押し心地だ
エントリーモデルは最近発売されたにも関わらず構造はPS2専コンとほぼ同じとのこと。もちろん改良は加えられているが、PS2専コンを触ったことがあればだいたい察しがつく。プロフェッショナルモデルは完全受注生産であり、2022年4月現在では購入することはできない。今後また受付を再開するかもしれないが、いつになるかは分からない
じゃあACと同じ感覚で遊びたいならフェニワン(DAOコンの看板商品PHOENIXWANのこと)買うしかないのか、物は良くても38,000円はインフィニタスを2年以上遊ぶこともできる安くない買い物だし、DPならばその2倍である
筆者はそんな金は持っていない。こういうときに頼りになるのは己のDo It Yourself精神だけだ。専コンを作る、あわよくばDP環境を作る、「俺ん家でビートマニアのDPできるんだぜ!」と自慢してクラスの人気者になる、密かに心の奥でそんな野望が燃え上がっていた

余談だが実は公式から発売されたプロフェッショナルモデルはもうひとつある
運が良ければ1000円ほどで入手できる場合もある

・専コン製作記 初めての専コン自作編

・ボタンを取り寄せる

上で書いた通り、専コンで最も気になる部分が鍵盤、つまりボタンだった。どうしてもACと同じ感覚で鍵盤をシバきたい、そんな一心でAC筐体でも使われている純正の三和ボタンを取り寄せた→楽天の三和電子マーケット

ランプが付いてるだけで1000円ほど跳ね上がる。ランプ無しで十分

白鍵4個、黒鍵3個が必要になる。合計8000円ほど。一番大事かつ高価な部分なので買ったら引き返せない。自信が無い人はメルカリアカウントの準備を忘れずに

・土台を作る

ボタンをはめ込むための台が必要になる。皿をどうするかと悩んだが、ASCIIの五鍵コンを流用することにした。このときはインフィニタスがプレイできれば十分で、CSでのプレイは考えていなかった
インターネットで寸法を調べ、MDF材にカッターで穴を空ける。最近では100均でMDF材が手に入るから良い時代だ

皿は飾り。手垢まみれのクッソ汚いMDF材を加工していく
ボタンがハマる。上の2つの穴はスタートセレクトのつもりだったが結局使わなかった

・ターンテーブルを作る

ボタンは取り寄せればどうにかなるが、ターンテーブルはそうはいかない。そもそも基板も五鍵コンを流用するつもりだったので、じゃあ皿もそっちから流用しちゃえ、と上記のようにレコード盤を取り付けてそれっぽくした。使用感ははっきり言ってゴミ。しかしここまで来たら動かさずには引き返せなかった
スクラッチはフォトインタラプタというセンサーを使用しており、ロータリーエンコーダのように直接回転を検知するわけではなく、光センサーであれこれするのである。詳細は目の前の機械でググってほしい
ボタンはお粗末だがこのターンテーブルは五鍵コンの頃からACと同じものを採用している。まったく同じというわけではないと思うが、AC筐体、CSコン、どちらもフォトインタラプタを使用している。大きさが違うだけなのでここだけは問題なく自作コンに流用できる
当時はこの皿の処理をどうしようか悩んでいたため、まだArduinoなどを使う考えには至らなかった

五鍵コンの基板1~5鍵+スタートセレクトにはんだ付けして作る試み

・みすぼらしいが一応の完成

予備で注文した黒鍵をハメてある

見ての通りデカイのである。しかも皿が浮いている。いくらなんでもまともにプレイできるものではない。しかし一応プレイすることは可能なのだ。ていうか動いてくれないと困る

こうして無事(?)専コン制作は完了、DIY精神が満たされるのであった

・費用(初めての専コン自作編)

  • 三和ボタン×7 約8,000円

  • ASCIIの五鍵コン 500円

  • 電工ペンチ+圧着端子の日曜大工セット 約2,000円

  • 配線 多分300円くらい

  • 土台用MDF材+ワンバイ材 約1,000円

  • はんだセット 家にあったので0円

  • エレコム製PS2→USBコンバーター 家にあったから0円だが多分1,500円くらいで買ったやつ

合計12,000円ほど。あと数千円出せばエントリーモデルが買えちゃう

R.I.P ASCII五鍵コン

・専コン製作記 PS2コン改造編

初めての専コン制作から数ヶ月が経ち、かつて12,000円かけて作ったゴミは全然使っておらず、クラスのみんなに自慢する野望も叶わずにいた。しかし2台目のPS2コンを買ったことで転機が訪れる。2台あるなら1台は好き勝手に改造できるからだ。一見意味不明な理屈に見えるが、予備があるというのはハードウェアを改造する上で非常に重要なことであり、安心感も大きい。聖書(宇宙兄弟)にもそう書いてある

DJTで記念撮影。2台揃っても押し心地は相変わらずモニョモニョ

PS2コンの三和ボタン化は関連記事がたくさん出回っており、それらを参考に作成した。なのでこの記事では何も目新しいことはしていないことを留意されたし

・土台を作る

前回の専コン制作で三和ボタンを買っていたため、ボタンの調達は割愛。PS2コンを切ったり削ったり焼いたり煮たりで土台を作っていく

1個ずつはめ込みながら作っていく
ボタンがハマってる枠の部分の出っ張りを切断していく。握力トレーニングにぴったり

ボタンの寸法は三和ボタンとほぼ一緒。全く同じではないので数ミリ削る必要があるし、出っ張りに添って切断すると穴が大きすぎるので注意。地道に削るしかない

一番疲れる作業
三和ボタンのかがやき

筆者は工数削減&メンテナンス性を重視するため、ボタン部分のケースの天板部分、ターンテーブル部分の天板のみを使用することにした。PS2コンは微妙に皿が低いと言われているため、底版を除いた分鍵盤部分が低くなればちょうどいいとも思ったからだ。皿を上げるのではなく鍵盤を下げるという逆転の発想である

スクラッチ部分の天板。スイッチ用の穴を開けて、鍵盤部分の天板を置く
そのままではグラグラして安定しないので発泡スチロールなどのコリコリ弾力あるものを噛ませる
同時に鍵盤と皿間距離をACに近づける、いわゆる「皿離し」も行う

この「天板部分のみ使う」という方法は、筆者的には意外にもおすすめで、三和ボタン化の過程で工数を減らしつつ皿上げ(鍵盤下げ)と皿離しを同時にできる。これから挑戦する読者は試していてはいかがだろうか

・配線

配線は既に先人たちが説明してくれていたので問題は無かった。最もお世話になった記事を載せておく

この記事の下の方にある配線の図、これを見ながらやれば何も問題は無い

万が一ダメでも電線を繋ぎ直せばどうにかなる

基板から鍵盤部分に繋げるためのコードを切断する。基板に直接はんだ付けする方法もあるが、先述の通りメンテナンス性を重視するためファストン端子を使う

各線がまとまっているため、接触しないようにスリーブ付きの端子を使うこと
図のように一箇所ならスリーブ忘れてもセーフ。基板側をメスにしてある
黒がGND。GNDは基板側に2本あるらしいので無理に全部繋げる必要は無いと思われる
各鍵盤に対応した電線へ繋いでいく。長さの計算が足りず延長してある

・完成

底版を抜いたのでイジェクトボタンでの固定は不可。ガムテ等で固定する
この時点でスタートセレクトボタンは無い。CSやるにはセレクトはともかくスタートは必須なので、別途取り付けよう(下図は分かりづらいが予備の黒鍵をスタートに割り当ててる)

初めての専コン制作で使った台を流用したためサイズが合わない。デカイ
ひっくり返せば即メンテ可能。自分が求めてていたメンテナンス性とはまさにこのこと

PS2コンの基板を使ったためCSもプレイ可能。コンバーターを通せばインフィニタスもプレイ可能。こうして筆者は最強の自作コンを手に入れたのである

・費用(PS2コン改造編)

  • IIDX専コン 駿河屋で3,100円+手数料220円 3,320円

  • 三和ボタン×7 前回購入してたので0円(約8,000円で購入)

  • オムロン製 50gスイッチ D2MV-01-1C3×7 約1500円

  • ファストン端子 約500円

  • OLFA プラスチックカッター 約500円

  • 配線 前回のを流用したので0円(約300円ほど)

  • 発泡スチロール プライスレス

  • その他工具 家にあったのでプライスレス

工程では省いたがちゃっかりオムロンスイッチを買ってます。ボタンに比べたらタダみたいなもんやな
今回だけならおよそ5800円。前回と合わせると約17,800円となった。エントリーモデルが買えます

・専コン製作記 ArduinoでDP編

PS2コンを改造してかなりACに近いものを作ったにも関わらず、これもまぁまぁ使ってなかった。一台だけでは友達を呼んで家で一緒に遊ぶこともできないからである。それに筆者はDPerのため、SPにはいまいち食指が動かないという理由もあった
そんな中、無性にインフィニタスがやりたくなり、三度DIY精神が燃え上がる。今度こそ、クラスのあの子と並んでビートマニアをやるべく、両サイド、つまりDP環境同等のものを作ると決意した

・土台を作る

「こいついつも土台作ってるな」は禁句。初めての専コン制作で作った土台ではサイズが合わないので作り直し。奥と手前を1センチほど上げて前後に揺れないようにする。左右についてはDP用の幅調整もあるので滑り止めシートでどうにかする

端材で予備の黒鍵も申し訳程度に使う。電線通すための溝も作る
DP用に2台作成。PS2コンに合わせて作ってるのでぴったりだし、木の質感も良い
左ディスプレイは筐体の寸法。右台が三和ボタンで左台は無改造台。中央にスタートボタン

そのままではDP用に幅合わせるために中央に何か挟まなくてはならない。そんなちょうどいいものを探すのは面倒なのでやはり作る。ティッシュ箱がちょうどいいという記事も見かけたが、自作コンなのであてにならない
プレイ中にズレるのも嫌なので土台をパッチンで固定することにした。下図では右台だけだが、後々左台もパッチンで止めている

スタートセレクト予定地。インフィニタスのE1、E2に相当

・コンバーターの遅延、そしてArduinoへの配線

ここまで出来たあたりから、うずうずしてSPでもやりたい!とインフィニタスを始めた。エレコムのPS2→USBコンバーターを使用
しかし何かがおかしい。とにかく光らない。元々IIDXがそんなに上手くないプレイヤーなので、こんなものかと思った。だが数十分プレイしてやはりこれはおかしいと確信した
IIDXは下手でもDDRではPFC埋めたりしてるのである程度のリズムキープ力はあると思うのだが、不可解にGOODが出たりするのだ。問題はコンバーターだと気づいた
エレコム製のコンバーターは、PS2コンバーターが生産終了した今でも、他ハードのコンバーターで「秒間60回の高レスポンス」と謳っている
お分かりいただけただろうか?秒間60回、つまり約16~17msに1回なのである。音ゲーマーにとってはあまりに致命的な数値。高レスポンスとはなんなのか。以下この誤差を16msとする
IIDXのピカグレ判定は±1/60秒と言われている。その下の通常グレ判定は±2/60秒説が濃厚である。ギタドラのように明確にどれだけズレているという表示はないため、確実な検証は難しいが、パフェ粋が±2/60のギタドラに比べると、この数値は体感的には概ね正しいように思える
これに当てはめて上述のコンバーターの仕様を考えれば、最大約16ms(1/60秒)の遅延、揺らぎにして平均約8ms(1/120)があり得ることになる。ピカグレがグレートになった、グレートがグッドになった、これが頻発するのは仕方ないといえる。しかしプレイする上で許容できる範囲か?と聞かれると疑問が残る。専コン+エレコムコンバーターで発狂BMSをやる人たちは人間じゃないということがよく分かる例だ
ではこの遅延&揺らぎ問題を解決するにはどうしたらいいか?専コンの自作について調べていると、たびたびArduinoなるワードが出てくる。これはUSBでパソコンに繋げるインターフェースのひとつであり、要は自分でキーボードやコントローラーを作りたいという人が使う代物だ。直で接続するので遅延も少なく済む。早速これを試してみることにした
純正Arduinoは値が張るので中国産の互換品を使う。海外から輸入するのもいいが、同じ程度の値段でAmazonで売られてるので、発送や送料の観点からAmazonで購入

2個セットがお得。DPやるならこれ一択
専コン作成当時は検証していなかったが、秒間60回の高レスポンス(笑)のエレコムコンバーターと比べ、Arduinoはどれほどのレスポンスなのかと、この記事を書いてる最中に検証。以下はテスト用のスケッチ(ソースコード)

int ms;//起動からの経過時間(ミリ秒)
int response;//1秒ごとのレスポンス
int second;//経過秒

void setup() {
}

void loop() {
  delay(1);//正確に測るために1msごとに処理
  response++;//レスポンス回数を加算
  ms = millis();//経過ミリ秒を記録
  if (ms/1000 > second){//1秒ごとに結果を返す
    second = ms/1000;//この秒を記録
    Serial.print(second);//処理中の秒
    Serial.print("秒目:");
    Serial.print(response);//この秒のレスポンス回数
    Serial.println("回");
    response = 0;//レスポンス回数を初期化
  }
}

上記のコードはざっくり言えば1秒に何回のレスポンスがあったかを計測するためのコード。結果は以下の通り

秒間976~977回のレスポンスとなっている。秒間60回を鼻で笑い飛ばせるレベルだ。遅延を気にするプレイヤーならArduinoを使用することをおすすめする
PS2コンをArduinoで使用する方法は2つある。PS2→USB用のコンバーターをArduinoで繋ぐ、もしくは鍵盤や皿を直接Arduinoで繋ぐかだ。配線方法はググれば出てくるが、筆者としては前者のコンバーターを作る方法をおすすめしたい。しかし筆者はある理由によりメインの右台を後者、左台を前者にした
IIDXのスクラッチはご存知の通り、同じ方向に連続で入力する際の対策に、スクラッチの入力をある程度残す作りになっている。これのおかげでBSSやMSSに対応できている。しかしPS2コンではこの仕様が悪さをしており、選曲画面等で皿を回したときに、この残った入力のせいで2曲~3曲分カーソルが動く。キーボードを使用しないと選曲ができない
「素直にキーボードを使えばいいんじゃね?」という意見もごもっともだが、どうせなら専コンで操作を完結させたい。ACに慣れきったプレイヤーがキーボードと切り替えながらプレイするのもなかなか慣れない
このスクラッチの入力判定はArduino側のスケッチで処理するため、調整も自在になる。ただ、プレイする分にはコンバーター経由でもまったく問題は無いので、キーボードとの連携に抵抗が無ければ前者のほうが圧倒的に楽、かつUSB←→PS2端子の切り替えが容易なため、CS版のIIDXもプレイできる。用途に合わせて改造するべし

中国で作る

・鍵盤、皿→Arduinoの直繋ぎ

さすがに初っ端から貴重なPS2専コンの基板を破壊する気は起きなかったため、余っているASCIIコンのセンサーを流用できないかとテスト。驚くことに、ASCIIコンの皿センサーを少し砕いてやるとPS2コンにハマる。入力も問題無し。基板がもったいない人はASCIIコンの流用もおすすめ

ASCIIコンの皿センサーを、サイズを整形してPS2コンにハメる。問題なく動く

鍵盤部分はスイッチを通してArduinoに繋ぐので基板は必要なし。ボタン、皿センサーのみを入力に使用する

適当に見繕ってポチった電子工作グッズ
最終的に使ったのはブレッドボード、ファストン端子、ジャンパーケーブル、抵抗のみ

Arduino互換品のPro Microをはんだ付けしてブレッドボードにぶっ刺す。GNDと各ピンを通すだけなので簡単

皿の入力処理に関しては「Arduino iidx」でググれば出てくる

以下参考にした記事

・PS2端子→Arduinoのコンバーター制作

コンバーターを作るためには別途PS用の受け側の端子が必要になる。おそらくコントローラーの端子やシールドに直接はんだ付けしても出来るが、CS版で使えなくなるので素直にコンバーターを作る

ハードオフで500円だったブーメラン型マルチタップ。4つコンバーター作れるのでお得

こいつを適当に各ポートごとにぶった切る。見栄えなんか気にしない。プラも基板も金属部分も力でねじ伏せる

出来上がったものがこちらになります。メモリーカードは飾り

こっちのコンバーターを作るのは配線も最小限で済むため非常に簡単。しかも低遅延なのだから、今更高騰しているエレコムコンバーターを買う理由は無いに等しい
以下参考にした記事


・2台目の専コン改造

ここまででスクラッチ入力を処理するために、メインサイドの1台目をArduino直繋ぎ、2台目用のPS2→USBコンバーターを作ったが、肝心の2台目の専コンは無い
もちろんこれから作るのだが、さすがに三和ボタン8000円は高い。スタートセレクト用に正方形ボタンも買えばなおさらだ。貧乏人らしくGoogleのショッピング欄を見ていると、なにやら気になるものがあった

今やGoogleのショッピング欄を席巻しているAliExpressという中国の通販サイトだ。怪しさ満載だが7鍵+正方形ボタン2個でこの価格は魅力的。PayPalも使えるので注文してみた
他の記事でもAliExpressのボタンを使っている記事は多い。しかし使用感について触れている記事は見ないので、三和ボタンとの比較を後述する


送料を抑えるためか小さな箱にぎゅうぎゅう詰めで届けられたボタン

無事に届く。寸法は三和ボタンとほぼ同じだが、穴にはめ込む部分がほんの少しだけ小さい。三和ボタン用に用意した穴には問題なくハマる

正面からの比較。左が三和ボタン、右がチャイナボタン
後ろからの比較。左が三和ボタン、右がチャイナボタン
マイクロスイッチの互換性あり
三和ボタンのホルダーが力付くで引っこ抜くのに対して、こちらは回して外すタイプ
並べてみる。写真では分かりにくいが黒鍵の色味が結構違う
左がチャイナボタンに三和製バネを乗せた図、右が三和ボタンにチャイナバネの図
ぴったりというわけではないがバネも互換性がある

ではみんなが気になっているであろう押し心地はどうなのか。散々言われている通り、チャイナボタンに同梱してきたバネとボタンではあまりにも硬すぎてまともに押せたものではない。バネもボタンもとにかく重い。バネ抜きしても重い。オムロンの
D2MV-01-1C3(50gスイッチ)とバネで組み合わせてもしつこく重い
バネ切り、バネ伸ばしして上記スイッチとの組み合わせを試みるも、やり方が悪かったのが非常に気持ち悪い打鍵感に……
じゃあ三和ボタンと同じ環境ならどうなんだろう、とバネとスイッチをそのまま移植してみるとあらびっくり、三和ボタンとほぼ変わらない打鍵感じゃありませんか!ほぼ変わらないと言ったものの、自分レベルのプレイヤーではまったく変わらないレベル。7鍵盤のうち1個紛れ込んでてもおそらく分からない
三和ボタンと同じものを作るためにバネとスイッチを買うのか……とまた出費の予感に辟易したものの、三和ボタンをオムロンスイッチに換えたときに余った三和ボタン備え付けのスイッチ(100g)があったことを思い出す。これは少々重い上、付属品なので壊れても問題なしと思い、チャイナボタンバネ抜き+三和ボタン付属品ボタンで試したところ、いい感じの押し心地になった。壊れたら素直にバネとスイッチをまともなものにします
気になるチャイナボタンの総評としては
・ボタン→良好
・スイッチ→重すぎ ゴミ
・バネ→重すぎ ゴミ
となった。バネとスイッチを国産品に近づければまったく問題無い品質。おすすめです

2台目を1台目と同じ工程で作っていく
握力トレーニング
DP用の幅調整モジュール。少し広くなったけど気にしない
正方形スイッチをスタートセレクトに割り当てて総仕上げ
所詮はスタートセレクトなのでバネ抜きしたチャイナスイッチを使用。これでもマジ重い
左台。PS2基板→Arduinoコンバーター
右台。各鍵盤+スクラッチ→Arduino

・そしてついにDP環境完成

弟から借りた安物の43インチテレビで立ち環境完成

無事にDP環境が完成したわけである。しかし問題が無いわけでもない。左台は問題無く動くが、右台の皿のチャタリングがとにかくひどい。敏感なセンサーなのでこれくらいは仕方のないことだ
チャタリング自体はハードウェア上仕方のないことなので、ソフトウェアの方で対策をする。以下、上述のやまけんさんのブログで紹介されてるスケッチをベースに対策をしたものを置いておく

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

#define THRESHOLD 850  // フォトインタラプタのON/OFFの閾値
//ここは元のスケッチでは100 好みに応じて
#define MAX_TIMER 50  // スクラッチの入力が残る時間
#define SCR_SENSE 300  // スクラッチの感度 低いほど高い
#define SCR_ALLOW 10   // スクラッチ動作の許容度
int input_log[SCR_ALLOW];
int max_A_value;
int min_A_value = 2000;

// ボタンとArduinoのピン番号の対応
//以下は配線に応じて変えてください
#define KEY_1 2
#define KEY_2 3
#define KEY_3 4
#define KEY_4 5
#define KEY_5 6
#define KEY_6 7
#define KEY_7 8
#define START 15
#define SELECT 11
#define PHOTO_A A0
#define PHOTO_B A1

uint8_t photoA, photoB;
uint8_t before = 0;
int A, B;
static const int encoder[] = { 0, 1, -1, 0, -1, 0, 0, 1, 1, 0, 0, -1, 0, -1, 1, 0}; // 回転方向をエンコードするための配列
int scratch, timer = 0;

// スクラッチの回転方向の検出
int scratch_read() {

  // 戻り値: 回転方向(1, -1), 0なら動作なし
  int max_value;
  int min_value = 2000;
  int i;
  int through;
  int A_value;
  int B_value;
  int thres;
  A_value = analogRead(PHOTO_A);
  B_value = analogRead(PHOTO_B);
  photoA = A_value > THRESHOLD ? 1 : 0;
  photoB = B_value > THRESHOLD ? 1 : 0;

  //SCR_ALLOWms(デフォ10ms)分のA_valueを記録し最大値と最小値を出す
  //コメントアウト部分はスクラッチの出力を見るためのもの
  for (i = 0; i < SCR_ALLOW; i++) {
    max_value = max(max_value, input_log[i]);
    //max_A_value = max(max_A_value, input_log[i]);
    min_value = min(min_value, input_log[i]);
    //min_A_value = min(min_A_value, input_log[i]);
    //if (min_A_value == 0) min_A_value = input_log[i];
  }
  thres = A_value > 850 ? 750 : 950;
  through = 0;
  for (i = 1; i < SCR_ALLOW; i++) {
    //thres間を何回往復してるかを見る
    if (input_log[i] > thres && input_log[i - 1] < thres) through++;
    input_log[i - 1] = input_log[i];
    if (i == SCR_ALLOW - 1) input_log[i] = A_value;
  }
  /**
  Serial.print("PHOTO_A:");
  Serial.print(A_value);
  Serial.print(" PHOTO_B:");
  Serial.print(B_value);
  for (i = 0; i < SCR_ALLOW; i++) {
    Serial.print(" ");
    Serial.print(input_log[i]);
  }
  Serial.print(" ");
  Serial.print(max_A_value);
  Serial.print(" ");
  Serial.print(min_A_value);
  Serial.println();
  **/
  uint8_t ab = (photoA << 1) | photoB;
  uint8_t abcd = (ab << 2) | before;
  int encodeNum = encoder[abcd & 0x0f];
  before = ab;
  //SCR_ALLOWmsの間にSCR_SENSEほど動いていないか、thresを1回以上通過してないとスクラッチ判定しない
  if (max_value - min_value < SCR_SENSE || through < 1) return 0;
  return encodeNum;
}

void setup() {
  pinMode(KEY_1, INPUT_PULLUP);
  pinMode(KEY_2, INPUT_PULLUP);
  pinMode(KEY_3, INPUT_PULLUP);
  pinMode(KEY_4, INPUT_PULLUP);
  pinMode(KEY_5, INPUT_PULLUP);
  pinMode(KEY_6, INPUT_PULLUP);
  pinMode(KEY_7, INPUT_PULLUP);
  pinMode(START, INPUT_PULLUP);
  pinMode(SELECT, INPUT_PULLUP);
  pinMode(PHOTO_A, INPUT);
  pinMode(PHOTO_B, INPUT);

  Gamepad.begin();
}

void loop() {
  // 鍵盤の処理
  if (digitalRead(KEY_1) == LOW) Gamepad.press(1); else Gamepad.release(1);
  if (digitalRead(KEY_2) == LOW) Gamepad.press(2); else Gamepad.release(2);
  if (digitalRead(KEY_3) == LOW) Gamepad.press(3); else Gamepad.release(3);
  if (digitalRead(KEY_4) == LOW) Gamepad.press(4); else Gamepad.release(4);
  if (digitalRead(KEY_5) == LOW) Gamepad.press(5); else Gamepad.release(5);
  if (digitalRead(KEY_6) == LOW) Gamepad.press(6); else Gamepad.release(6);
  if (digitalRead(KEY_7) == LOW) Gamepad.press(7); else Gamepad.release(7);
  if (digitalRead(START) == LOW) Gamepad.press(8); else Gamepad.release(8);
  if (digitalRead(SELECT) == LOW) Gamepad.press(9); else Gamepad.release(9);

  // スクラッチの処理
  scratch = scratch_read();
  //if (scratch != 0)
  //  Serial.println(scratch);
  if (scratch == 1) {
    Gamepad.release(21);
    Gamepad.press(20);
    timer = MAX_TIMER;
  }
  if (scratch == -1) {
    Gamepad.release(20);
    Gamepad.press(21);
    timer = MAX_TIMER;
  }

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

  Gamepad.write();
}

これで台揺れ等でのチャタリングも防止できる

CSでも遊べるのになけなしのBITを払ってDarling my LUVを解禁する異常者の動画。本当に良い曲

・費用(ArduinoでDP編)

  • 大昔に入手したPS2用IIDX専コン 多分5,000円くらい??

  • Arduino互換機Pro Micro×2 2,000円

  • 土台用の1*4材 600円(片方は作成済み)

  • DP用に土台を止めるパッチン×4 1,500円くらい

  • 電子工作部品で使った部分だけの費用総額 多分1,000円くらい

  • AliExpressのチャイナボタンセット 2,500円

  • PS用マルチタップ 500円

ここで使ったのは約13,100円。今までの工程と合わせるとおよそ30,900円。できるだけACに近い環境で作ってフェニワン1台に及ばない価格。とても満足のいく結果だった

・総評

ツイートの日時を見れば分かる通り、最初に専コンを自作してから1年半を要している。その間にモチベがなんやかんやあったり、費用的に厳しいなーこりゃとか思ったり、紆余曲折ありつつもだらだら作った結果、大満足の環境が出来たのだから、世の中何が起こるか分からない
専コンの作成方法をまとめた記事としては、ロータリーエンコーダーを用いた方法以外は全部紹介できたと思う。9鍵盤化したらまた一から作ってみたい
インフィニタスは金無いしBIT集めも苦行なので1ヶ月で解約。気が向いたらまた加入するとして、しばらくは右台もPS2基板に換装してCS版をエンジョイしていく
相変わらず専コンを自慢してクラスの人気者にはなれないし、一緒にやる友達も居ないが、そこはDIY精神。次は友達を自作しようと思う

元々一ヶ月だけのつもりだったし十分元は取れた あばよインフィニタス