自作DMXコントローラーの作成ダイジェスト

こんにちは!ヤザキです。

今回は、機材藩技術研究所ネタとして、現在作成中のDMXコントローラーの概要をダイジェスト(とは言ったものの長いですが)で紹介したいと思います。
今後もソフトのバージョンアップを続けますし、自分の中で作り直し案もありますので、どうなるかわかりませんが、簡単に紹介したいと思います。

現在の概要

・ハードウェア

PC DMCコントローラー背面
PC DMCコントローラー

PC DMCコントローラー背面
PC DMCコントローラー背面

■出力:DMX1系統
■寸法:6cm×8cm×5.5cm
■重量:115g
■電源::DC5V USBより給電
■外装:アクリル

・ソフトウェア

DMX制御ソフトウェア
DMX制御ソフトウェア

DMX制御ソフトウェア(マニュアルモード)
DMX制御ソフトウェア(マニュアルモード)

■DMX:256チャンネル
■最大511488チェイス登録可能
■512シーン登録(1シーンあたり999チェイス)
■32プリセット(1プリセットあたり16シーン)
■フェード/スピード・コントロール
■マニュアルモード時:32個別フェーダー,シーンモード時:16個別フェーダ
■ミックス・チェース
■ブラックアウト・FullONボタン付

PC DMXができるまで

ヤザキは、STAGE EVOLUTION ( ステージエボリューション ) / SCENESETTER(24ch)を所有しています。当初、遊べればいいや程度でAMERICAN DJ JELLY PAR PROFILE(以降LEDパー)と、MEGA PIXEL LED(以降LEDバー)を購入しました。

LEDバーは、単体で最大28DMXチャンネルを使用するので現段階でSCENESETTERでは不足ですが、使用チャンネル数は変更できるので、十分制御可能でした。しかし、イベントで照明をやるとなると、24chではまったく足りない。

これではだめだ。

という、短絡的な考えで、より多チャンネルの卓やDMXソフトウェアの導入を検討しました。
しかし、いざ調べてみると高い。ソフトも体験版で触ってみたが、ライブやDJなどリアルタイムで使うにはどうも向かない。これは作るしかないと考えました。

参考までに、先日行われた、育英祭バンド運営支援での照明は、96chまで使用しました。

育英際照明配置&チャンネル割り当て図(メモ)
育英祭照明配置&チャンネル割り当て図(メモ)

手書きのメモですが、このようなレイアウトとチャンネル割り当てで照明を制御しています。
チャンネルを共通にすればよい部分もありますが、極力派手な演出をしたかったため、共通アドレスは使っていません。
画像上部の1~16はシーンとして割り当てた機能です。現状もこのような使い方ができます。

ハードウェアの作成

規格的には、250kbpsのRS485なので、簡単に作れるはずと。
まず、あまり時間もなかったので、前例がないか調べてみましたが、あまりありません。
調べる時間も惜しくなったので、一から作ることにしました。

まず考えたのは、PCからはDMXの更新した箇所のみを出力し、PICやAVRで送信する方法。
だが、この場合、PC通信かDMXどちらかがソフトウェア通信となり、速度面で困難です。
ARM等を使えばできますが、コストと基板の作成時間が膨大になります。

そこで、FT232RLをパラレルポートとして使用し、出力する方法を考えましたが、これもだめ。
不定期に変な待機時間ができてしまい、とてもDMXとしては使えません。
ならば、シリアルを直接出す。と考えたわけですが、DMXには下の表のように、Breakという、やたら長い間信号でいうLo(OFF)を出力する必要があり、シリアル通信(RS-232C)ではこれができません。

No. 名称 データ長
1 Break 88μSec以上、1秒以下
2 Mark After Break 8μSec以上、1秒以下
3 Start Bit 4μSec
4 Data 4μSec×8bit
5 Stop Bit 4μSec×2bit
6 Frame Time 44μSec
7 Time Between Frame 0秒以上、1秒以下

しかし、幸いなことにRS-232CにはDTRという制御信号線があるので、これを使えば、トランジスタ等で強制的に通信ラインの信号レベルはLoにすることができそうだと考え、実験してみました。

DMXトランシーバー実験
DMXトランシーバー実験

トランジスタによる完全自作RS485トランシーバです。
この回路にTxと、DTR制御信号を接続し、簡単なDMX送信プログラムをc#でくみ上げてテストしました。始めはうまく動かなかったのですが、プルアップ、プルダウン抵抗の定数を見直したら動きました。
ただ、Breakを出力するために使っているDTR信号は、相手方の機械(本来はモデム?)に送信準備ができましたと伝える信号ですので、高速でON,OFFされることは想定されていないようです。このON-OFFをDelayなしで行っても88usでいいはずのbrake信号に、69msもかかっています。こればかりは仕方ないです。こんないい加減なタイミング設定でも動くDMXに感謝です。

この遅れ分を考慮しても、手持ちのDMXコントローラーよりは更新レートが何倍も早いので、DMXでON-OFFを繰り返し送るだけでもストロボ効果を表現できました。

さて、PCからシリアル+αでDMXが出せることはわかったので、回路作成です。
本番では専用のIC(LTC1485)を注文しました。

基本部品は、秋月のFS232変換モジュールと、LTC1485だけです。あとはパネル取り付け用のxlrコネクタ(メス)とケースを用意すれば完成です。
モジュールと8ピンICと抵抗2本で完成ですから簡単ですね。しかも抵抗は出力無効時のプルアップとプルダウン用です。

PC DMX内部
PC DMX内部

今回、トランシーバICを数種類購入したので、念のためソケットで実装しています。こうすることで、さまざまな互換デバイスを試すことができ、万が一故障した場合でもパーツさえあれば迅速に修理できます。
組み立て後は、手持ち機材をすべて繋げて全チャンネルを出力してテストです。
実際に使う環境を想定して最悪な状態でテストしました。
構成は、自作USB-DMX→80mLANケーブル→5mマイクケーブル→10mDMXケーブル→DMX機器→2mマイクケーブル→DMX機器→5mDMXケーブル→DMX機器→5mDMXケーブル→DMX機器。
合計約100m。運用当日、LANで延長することも検討したので、実際にLANを使ってます。

終端抵抗なし波形
終端抵抗なし波形

CH1: FT232RL出力波形 CH2:DMX最終機器出力波形

まずは、終端抵抗なしでのDMX波形。この段階でも動いているようですが、これは反射が激しくちょっと怪しいです。

終端抵抗ありDMX波形
終端抵抗ありDMX波形

続いて、終端抵抗を挿入した波形です。かなりきれいになりました。100mという距離と整合の取れていないケーブルの組み合わせでは、せめて終端抵抗は入れたほうがいいようです。

ここまでくれば、あとは使いやすくするだけです。基板むき出しでは使いにくいので、ケースを作ります。ケースは、CNCフライスで自作しています。

ケースのフライス加工。組み立て前
ケースのフライス加工。組み立て前

ケースのフライス加工。組み立て中
ケースのフライス加工。組み立て中

ソフトウェアの作成

ますは、UIの作成です。
コントローラーとなると、フェーダーは絶対必要ですが、PCのUIでフェーダーとして使えそうなのはスクロールバーぐらいです。この状態ではPCでリアルタイム制御するのは無理があります。加えて、Windowsの標準コントロールのスクロールバーだとフェーダーとしては非常に使い勝手が悪い。一瞬で最大とかにしたいとき、その辺をクリックしてもページ移動程度しか動かないからです。

そこで、ユーザーコントロールを作ってみました。

フェーダーコントロール
フェーダーコントロール

ちなみに、いちばん右はWindows標準のスクロールバーを太くしたものです。正直使いにくい。
自作コントロールの主なプロパティは、
max(フェーダー最大時の値),min(フェーダー最小値の値),value(現在の値または設定値),sh(つまみの高さ),ID(動作には影響しない任意の数値 イベント処理等で便利です)
イベントは、とりあえずValueChange(フェーダーを動かした時、動かしているとき発生)です。

動作は、マウスボタンを押すと、通常のスクロールバーとは異なり、フェーダーはただちにクリックされた地点まで移動。もちろんそのままドラッグすれば追従します。
つまみのサイズは、コントロールサイズに依存せず、shプロパティーで自由に変更できますので、小さいつまみ、大きなメインフェーダー等再現できます。
幅は、コントロールの幅で設定されます。

そこそこ使えるUIができたところで、本体の作成。

まずは、DMXの出力部をプログラムします。
今回は、FT232RLというUSB-シリアル変換ICを利用しているので、ちょっと面白い使い方で、専用ドライバを利用することができます。
通常、PCからRS-232を出力する場合、COMという機能を利用するのですが、COMにはポート番号がほぼ連番で割り振られるのでUSB等の変換の場合、毎回デバイスマネージャー等で何番のCOMに割り当てられているかを確認する必要があります。
しかし、FT232RLの専用ドライバを使うことで、PCに接続済みの物理COMポートの数に関係なく、ICに直接アクセスして通信の制御や、COMの操作では不可能な設定等を指定することができます。

これにより、セットアップの手間を最小限におさえ、現場ではUSBを接続すればすぐにオペレートできるようになっています。ソフトウェアにもCOMの設定画面はありません。今後、あえてつけるとしたらIndexIDでしょうか。おなじデバイスIDを持ったFT232RLを複数代繋げた場合に必要です。

DMX出力部が完成したら、CHごとのSINGLEモードの動作を仕込みます。
操作面ではプリセットとレイヤー選択機能を構築していきます。
さらに、DMX出力モニタも作らないとデバッグが大変なので早い段階で実装しました。

一通りできてきたら、マスターフェーダーの処理と、フラッシュボタンの処理、チャンネルごとの現在の数値表示を書きました。

ここまででやっと、便利機能搭載開始。
とりあえず、プリセット1が動くようにします。1ができればあとはループでまわすだけだから、一瞬です。
ここらで、総合的にテストしてバグを取りますが、時間がなかったので、最低限のチェックしかできてません。

DMXとしての基本動作を確認したら、データのセーブ・ロード処理を実装して完成です。データ保存はバイナリなので、機能追加時は互換性に注意する必要があります。

今後の展望

  1. まず、バグ取り。突貫工事のソフトなので、バグが多いです。
  2. 1の理由から、落ち着いて作り直すという方法も検討中です。
  3. シーンとは別にタイムラインベースのシーケンス機能を搭載
  4. 512チャンネル対応
  5. DMX入力対応(市販コントローラーを外部コントローラーとして使えるようにするため)
  6. MIDIコントロール対応(市販midiキーボードやDJがよく使用するmidiパッドでのコントロール)
  7. チャンネルアサイン対応
  8. HOG 4のような柔軟なシーン、エフェクト作成機能搭載。
  9. ソフトウェアでタブレット端末等からの無線コントロール対応
  10. サウンドアクティブ対応
  11. ムービングに特化したUI開発

さて、現状はここまでです。
今後、どのような開発方針になるかわかりませんが、今後の進化にご期待ください!

機材藩技術研究所 | ヤザキ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

日本語が含まれない投稿は無視されますのでご注意ください。