creation/cr_dmx

DMXの使用


DMXに付いて

 DMXとは、主に映像機器を扱うための通信プロトコルで、MIDIのようにチャンネルを使用してシリアル通信を行います。
 MIDIの場合にはバイト単位で細かく取り決めがされていますが、DMXの場合にはBreak時間から来る相性問題を除けば、チャンネルの指定と、それに続くデータのみで、複雑な要素はありません。
 コンピュータと照明器具、コンピュータから照明器具をコントロールするためのDMXインターフェイスがあれば、比較的簡単に実現する事が出来ます。

 チャンネルの指定は9ビットとスタートビット・ストップビットの11ビットで表し、512チャンネルが使えます。バイトをベースにしているMIDIと若干異なる部分ですが、実際にMaxMSP等から使う場合には、こうした事に煩わされること無く使えます。

 我々のように照明を専門としていない者にとって、ホール等で使用されているような高価な機材を所有する事は、使用頻度から鑑みても避けた方が良いと思われます。
 ホールでの上演の場合には、会場に備えられた機器を利用したり、照明専門のオペレータにお願いする方法が良い結果が得られるのではないでしょうか・・・

 ここでは、インスタレーションや照明設備が備わっていない空間で、DMXを利用する方法に付いて紹介しています。

DMX規格の機器

 インスタレーション等で使用するDMX規格の機材を紹介しています。

DMXインターフェイス
dmx03.jpg dmx04.jpg
 コンピュータからDMXにより機器をコントロールするためのインターフェイスです。 ここで取り上げている、ENTTECのDMX USB PROと言う製品が一般的に使用されているもので、MaxMSP用のオブジェクトもあります。

ディマー
dmx02.jpg
 DMXからの信号を受けて、交流電源のオンオフやレベル調整をします。写真の物は、4チャンネルで使用出来る廉価な製品で、チャンネルはディップスイッチで行います。

変換プラグ
dmx05.jpg dmx06.jpg
 DMXインターフェイス側のコネクタが5pinのため、3pinに変換するためのプラグです。オーディオ用のキャノンケーブルと同じく3pinのケーブルですが、双方のインピーダンスが異なり、DMXではデジタル情報を送りますのでDMX用のケーブルを使います。デジタル・オーディオ用のケーブルであれば良いようです。

ライト(LED パー ライト)
dmx08.jpg
 DMXでコントロール出来るライトは、RGBの情報を各チャンネルに分けて送るため、1台でも、3チャンネルを使用します。従来のDMXでコントロール出来ないライトの場合には、ディマーを使ってコントロールします。

ArduinoとDMXシールド
dmx07.jpg
 Arduinoのピンにはめ込んで使えるDMXシールドと言う製品が市販されています。写真は、Arduino UNOに取り付けた状態の物で、DMXインターフェイスとして使います。MaxMSP等からはシリアルで通信しますが、Arduino側に簡単なプログラムを書いてあげる必要があります。(MaxMSPを使っていて、Arduino側での操作が煩雑と感じる場合には、Maxuinoを使う事で、Arduinoをコントロールする事も出来ます。)

DMXスプリッター
dmx01.jpg
 複数のDMX機器を使用する場合には、A機器のOUTからB機器のINへ、更に、B機器のOUTからC機器のINへと言う具合にデイジーチェーン(カスケード接続)をしますが、DMXスプリッターは、1本の入力をパラレル接続の様に複数のOUTへ分けて送ってくれます。なお、デイジーチェーンの最後の機器のOUT端子には、ターミネーターを差します。

DMXによる接続

 DMXによる機器のコントロールは、一般的に次の様に接続して行います。
DMXcableset.jpg

MaxMSPからDMXを使う

 DMX用インターフェイスであるDMX USB PROを使う場合には、簡単なPatchでDMX機器をコントロールする事が出来ます。
 [dmxusbpro]と言うオブジェクトに、チャンネルとデータをペアにしたリストを送るだけです。下記のPatchは、左側のメッセージボックスでは、1チャンネルに255を送って最大値に、右側のメッセージボックスは、1チャンネルに0を送って最小値に設定しています。
 [dmxusbpro]と言うオブジェクトは10ユーロで手に入れる事が出来たと思います。
dmxdata.png
 DMX USB PROでは無く、Arduinoを使う場合には、[serial]オブジェクトを使って通信しますが、Arduinoのコードを書いてあげる必要があります。

DMXを使ったPatch例

 DMX USB PROを使った、MaxMSPによる簡単なPatchの例です。
 この例では、1から16までの乱数を使って、16個のアクチュエータを動かすサンプル・パッチです。

 最初に[open]メッセージを送ってから使います。
 幸い、MaxMSPには、[makenote]と言う優秀なオブジェクトがありますので、それを利用して、乱数で出たDMXチャンネルがオンになった20ms後にオフを送ると言う単純なものです。ソレノイド等のアクチュエータは、オンにした後で、確実にオフにする必要がありますので、[makenote]は大変重宝します。

 但し、DMXは、MIDIやudp等のように一方通行の通信ですから、少しでも危険な機器を使う場合には、DMXでは無く、Ethernet上で、全2重(双方向通信)であるtcp-ip等を使う方法が安全です。
  dmxexsample.png

シーケンスの使用例

 DMXを使って音楽を演奏する方法として、MIDIのシーケンスを利用する方法もあります。
 予め、Cubase等のDAWソフトを使って、MIDIの音高をDMXチャンネルと見立てたシーケンスを打ち込んでおき、それを再生する際、各音のノートオンやノートアウトをDMXのチャンネルとして変換する方法です。

 MIDIのシーケンスを使用する場合には、ノートオフもシーケンスに記録されていますので、キーナンバーをそのままDMXチャンネルに変換していきます。MIDIの場合、ベロシティは127が最高ですから、DMXの最高値である255に対する変換も必要になります。次の例は、単純に機材のオンオフで使用した例です。
 核になるのは、[seq]オブジェクトで、MIDIファイルを読み込んでMIDIによる演奏を行います。

 この例では、[midiparse]オブジェクトで、ノートオンとオフのみを取り出しています。[unpack]の次にある[-47]と言うオブジェクトですが、MIDIのC音(MIDIのKey number = 48)が、DMXの1チャンネルになるように、47を引いています。

 なお、MIDIにおけるノートオフの場合、9nH、40H、00Hのように、ノートオンを使って表現する方法が一般的ですが、MIDIのシーケンスファイルでは、8nH、40H、40Hのように記述される事も多いのです。
 そうした場合、ここで使用している[midiparse]オブジェクトの右インレットから出力される値が0にならないのではないかと言う疑問が出るかと思いますが、幸い、[midiparse]オブジェクトは、ノートオフを8nHを使って送った場合には、ベロシティを0として出力するようです。 midi2dmx.png

Arduinoを使う場合

 Arduinoを使う際、多くのデータを送信するとエラーが出て困る事があります。
 Arduinoがコンピュータとシリアル通信を行う時に使うバッファ(メモリー)のサイズが小さいため、やり取りする時に欠損が起きてしまい、照明が消えなかったり、DMXで動かしているアクチュエータが止まらなくなったりします。

 そこで、バッファサイズを大きくして、スムーズにデータのやり取りをしてくれるようにしてあげます。
 コンパイル時にバッファのサイズが決められるので、ヘッダファイルで設定されているバッファサイズを書き換えてコンパイルします。

 実際には、Windowsの場合には、Program Files/Arduino/hardware/arduino/avr/coresフォルダにある、HardwareSerial.hファイルの中にある、次の行を変更する事になります。
#define SERIAL_TX_BUFFER_SIZE 128
#define SERIAL_RX_BUFFER_SIZE 256
 この行で上限のバイト数を変更出来ますが、変更前にバックアップを取るなど、細心の注意を払った上で行って下さい。
 若干のリスクも無くは無いですが、それ程大変な作業ではありませんし、ググればこれに付いて扱っているサイトも幾つかあります。

Return to top of this page.