【IIDX】9桁16セグメントLEDの話【旧筐体】
はじめに
beatmania IIDXの旧筐体に付いてる16セグメント表示機のレプリカを作ったので、まとめる。
※レプリカというのは、本来はオリジナルの製作者自身が作ったコピーのこと、らしい。今回の件では模造品というのが正しいのかも。
9桁の、16セグメントLED。(なんで9桁なんでしょうね。)
IIDXで画像検索して一番上に出てきた旧筐体画像がEMPRESS公式サイトだったからリンク貼っておいた。いつ頃だったか、情報がかなり削減されちゃったんだよね…。
経緯
AliExpressを巡回していたときに、たまたま16セグメントLEDの0.8インチ 小型版を見かけたのがキッカケ。
とりあえず面白そうだから注文してみるかと思い、後先考えず10個買ってみたけれど、16セグメント(+ドット)というだけはあって、ピン数も18本あるし、本家は9桁表示だから、すべてをユニバーサル基板上に手で配線するのはかなり労力が掛かることに気づいた(当たり前体操)。ミスしたときのリカバリーも大変そう。
…ということで、KiCadで基板を試作して、発注した。
作ったもの
16セグメントLED レプリカ
初期ロット(v1.1)はこんな感じ。以降のロットの写真は、記事後半参照。
メルカリに出品したら、海外の仲介業者さんが買ってくれた。(説明書は日本語でしか作ってなかったのに、ちゃんと読んでくれてたのかな。)
以降も、ありがたいことに、メルカリとboothに定期的に出品しては買っていただいている。大変ありがたい。
特徴
・マイコンとPC/Androidスマホを接続し、マイコンに文字を送ることで、LEDに文字を表示することが可能。
・PCの場合はArduino(開発環境)が入っていれば、そのまま使用可能。Androidの場合も、汎用のシリアル通信ソフトをGoogle Playからダウンロードすれば、使用可能。
・電源を切っても、制御用マイコンが入力文字を覚えているので、次回起動時には記憶した文字列をそのまま表示可能。スマホで文字を入力して記憶させて、その後はモバブに切り替え、といった運用で、屋外で使用することも可能。
・10文字以上入力した場合は、文字が流れるようになってる。本家と同じくらいのスピードでスクロールする。
たくさんあると嬉しいよね。
取説
例によって当時の記述そのままノーチェックで貼ってるだけ。
技術的な話とか制作小話とか
文字ばっかり色々書いてしまったので、そのうち整理します。画像をパパっと眺めるだけでも面白いと思います(いい加減)
基板構成について
LEDを3個搭載した基板が3枚と、PCとの通信用のArduinoが乗った基板が1枚の4枚構成。
本家サイズの大型基板を除いて、バージョンが変わっても、基板4枚構成は変わらない。
中国の基板メーカーどこにオーダーしても、10cm x 10cmを超えると料金が急に上がってしまうことと、最小の注文ロットが5枚だったから、LED用基板を3分割するのは都合が良かった。初めて注文したときは5枚オーダーして6枚届いたから、更に都合がよかった。
制御用基板(Arduinoが乗ってるだけ)は、当初はユニバーサル基板を使用してたけれど、v2.1の途中から面倒くさくなって基板発注した。下図の右端。
外観について
・LEDの色は、本家にならって赤色を基本とする。(石川県のゲームセンター"ベティ"様では、旧筐体のLEDを色違いのものに換装されてたりする。)
赤色以外にも、青色とか緑色とか黄色とかもある。
・パネル色については、表も裏もスモークグレーのアクリル板を使用するのが基本。ただし、材料手配の都合で両面クリアの場合もあった。
・ネジの色もロットによってバラバラだけど、最近は極力黒で統一するようにしてる(はず)
基板の来歴(搭載部品の話)
・v1.1(2020年8月頃)
制御用マイコンとしてATMega328PのDIPを使用。昔10個くらい買ってそれっきりになっていた在庫があったから、それを消化する意味も込めて選定。あと時流に乗ってArduino使ってたから、その系統のマイコンを使いたかったってのもある。
1個のマイコンで3個のLEDを制御するから、アノードの電流引き込み用にトランジスタが必要ということで、余ってた2SC1815も使用。
1608サイズのチップを使うつもりだったのにフットプリントを間違えて4倍くらいデカいのにしてたから、はんだづけのときに苦労した。
・v2.0B(2020年9月頃)
基板の省スペース化のため、制御用マイコンはATMega328P-PU(SMD版)を使用。1608サイズの抵抗をちゃんと使うようにした。トランジスタはSTT818Bっていう、これもSMDのFETに変更。あと配線をエレガントにしたくて、マイコンは45度回転させるようにした。
・v2.1(2022年5月)
知り合いからATMega328PB(SMD)を譲り受けたので、そっちを使うようにした。あと1608チップ抵抗を17個もはんだ付けするのがしんどかったので、1608x4のアレイ抵抗を使用することにした。上図参照。KiCadでアレイ抵抗のフットプリント選ぶとピン配置がおかしいのが混ざってるから注意が必要。
・実物大バージョン(2023年5月)
調子に乗って秋月電子で2.3インチのLEDを入手したので、実物大のレプリカを作成。この時は基板だけでなく、アクリル板も発注した。ケース代わりにもなる。このときは強度の心配もあったため、基板は分割しなかった。ただ、マイコン3個で9個のLEDを制御する方式自体は変わらず。ファームウェアをビルドしなおして焼くのが面倒だったので、基板上で所定のピンが基板上でGNDに落ちてるかどうかを見て、動作モードを切り替えるようにした。
・v2.2(2023年12月)
これまでずっとアノードコモンのLEDを買っていたけれど、まちがってカソードコモンのLEDを買ってしまい、極性が逆になったのでそのままでは使えなくなってしまった。で、v2.1基板でトランジスタを取っ払ってランドをショートさせ、マイコンで直接電流を引くようにしたけれど特にマイコンが電流不足で音を上げることもなかったので、トランジスタなしの基板を作ることにした。また、はんだ付けのときに所定のランドをGNDに落とすことで、大型基板と同様、LED制御マイコンの動作モードを変えられるようにした。
マイコン書き換え方法について
基板上に書き換え用の6ピンのパターンを引いた。Arduino NANO(のパチモノ)に書き換え器用のファームを焼いて、基板同士繋いで書き換え。v2.0まではピンソケットを付けてたけど、v2.1以降は書き換え器にLED制御基板を置くだけで書き換えできるように調整した。
LED基板側のはんだ付けをミスしてGND-5Vがショートしてて、NANOのレギュレータが煙を上げたことがある。一敗。通電前に、すくなくとも電源とGND間が導通していないことくらいはテスターで確かめた方がいい。みんなも気をつけよう。
LED基板とArduino基板の通信
Arduino基板はPC(Android)と接続されていて、シリアル通信でPC/Androidから文字列を受け取る。Arduino基板は、受け取った文字列をLED基板側に送信する。
通信方法としては、I2Cを使用することにした。Arduino基板とLED制御基板は、電源およびI2Cで4ピンが繋がってる。上の図をよく見ると"5V/GND/SCL/SDA"と4ピンがあるのが分かる。
I2C通信では、同一バス上に複数の機器を接続し、1台の親機から、複数の子機に対して情報を送る用途で使用する。今回でいうと、Arduino側が親機で、LED基板3枚が子機になる。I2C通信では各機がIDを持っており、親機は、IDを指定して、所定の子機に対して情報を送ることが可能。LED基板1枚ごとに1個のIDを設けることで、同一バスに繋がっていても、異なる文字列を表示できるようにした。
I2Cでは、バス上に最大127個まで機器をぶら下げることが可能。理論上は、LED基板をどんどん繋げていけば、基板3枚9桁どころか127枚381桁までは表示できちゃうはず(電源がもたないだろうけど)
あとがき
技術的に面白いと思ったことを掘り下げてモノづくりをしてるけど、16セグメントって単なる旧筐体のレプリカだし、なかなか創作っていう感じじゃないのがちょっと悔しい。オリジナリティのある何かを作れたらいいなぁ、とぼんやり思った。
いまv2.2基板基板が届いてちょっとずつ作ってるところなので、完成したらメルカリかboothに流します。欲しい人いたらTwitterなり本記事のコメント欄なりで連絡ください。優先して対応します。
ENDYMIONから逃げるな