2017/08/13 (2017年08月 のアーカイブ)
MIDI=>DMX変換:Webアプリから照明を制御する
ステージ用の照明機材はDMXという規格に対応したものが多く、専用の制御卓からコントロールできたりするのですが、これをWebアプリからやりたいな、と言う事でちょっと試してみました。なお同様の試みは@toyoshimさんなんかも既にがっつりと基板から作っているので特に目新しいというものでもないのですが、工作が面倒だったので、ありものの組み合わせでなんとかしようという戦略です。
参考 : とよしま語録:照明機材を身近に
DMX?
DMXというのは電気的にはただのEIA485のシリアル通信で、これを使って512チャンネルに対して8ビット、0-255の値を順次送信するという非常に単純なプロトコルです。各照明機材にはINとOUTの2つのDMXコネクタがありますので、制御卓等のマスターから順次デイジーチェーン接続してゆきます。各照明機材は例えば色の制御や光の方向の制御等、自分が使いたいだけの複数のチャンネルを使用して制御信号を受け取りますが、1本のケーブル上の機材がそれぞれどのチャンネルを使うかはユーザーの責任で各照明を設定する事になります。
MIDI=>DMX
PCをマスターにするためのDMXのインターフェイスですが、単なるUSBシリアル=>DMXへのインターフェース製品ならかなり出回っているようで、ネイティブアプリから使うならこれでも良いのですが、Webアプリから簡単に動かすには Web MIDI APIが使える MIDI => DMX の変換が欲しい所です。という事で今回は Arduino で一度USB-MIDIを受けてDMXに変換するという方法で行きます。MIDI側は@morecat_labさんのmocoLUFAを入れてArduinoをUSB-MIDIデバイス化し、DMX側はTinkerKitからArduino用のDMXマスターシールドというのが販売されていますのでそのまま使用します。
MIDIからDMXに変換するには、MIDIのどのメッセージに対応させるかを決める必要があります。制御を自分で書くならどういう割り当てでも構わないのですが、今回は単純にコントロールチェンジのコントロール番号と値をDMXのチャンネルと値に割り当て、MIDIのコントロールチェンジの値は7ビットなので1ビットシフトして8ビットの値として使用します。これだと制御が微妙に粗くなるしコントロール番号の範囲も0~119でDMXの512チャンネル全てを制御できませんので、もう少し細工をしても良いのですが、まあ取りあえず単純に。
必要なもの(ハードウェア):
Arduino UNO R3 | これで MIDI メッセージから DMX への変換処理を行います。 |
DMX Master Shield | TinkerKit の DMXインターフェイスシールドです |
DMX対応照明機器 | Amazon等で探すと数千円の非常に安価なものからあります。 ただし安いものはトラブルも多いようですのでそこは自己責任で |
DMXケーブル | DMX機器を接続するケーブルは規格上ではXLR 5ピンコネクタを使う事になっているのですが、どういうわけか現在出回っているDMX機器にはXLR 3ピンコネクタを使ったものが多くあります。 DMX Master Shieldは5ピンですので必要に応じて 5ピン-3ピン変換等が必要になります |
MIDIコントローラ | 今回はスライダータイプのコントローラでDMXの各チャンネルを設定する感じにしましたが、これはWebApp次第です。 |
必要なもの(ソフトウェア):
Arduino IDE | Arduinoの開発環境です https://www.arduino.cc/en/main/software |
DMXMaster Library | DMX Master用ライブラリです https://github.com/TinkerKit/DmxMaster |
mocoLUFA | ArduinoをUSB-MIDIデバイス化するライブラリです。これはArduinoのメインCPUではなくUSBシリアル部のコントローラの16u2に書き込む手順が必要でちょっと面倒ですが、ここのdualMOCOを使えば、Arduino本体のプログラムとUSB-MIDIでのテストを適宜切り替えながら進められます。 https://github.com/kuwatay/mocolufa mocoLUFAの書き込みについてはこの辺りが参考になると思います。http://qiita.com/tadfmac/items/9136f47ae1eea99a4ef7 また、mocoLUFAの書き込みに際しては、https://dfu-programmer.github.io/やWindowsならhttp://www.atmel.com/ja/jp/tools/FLIP.aspxが必要になります |
Arduino MIDI Library | ArduinoのメインCPU側の標準的なMIDIライブラリで、mocoLUFAでもこれを使用します http://playground.arduino.cc/Main/MIDILibrary |
という事で全景はこんな感じになります。
構成を図にするとこうです。
Arduinoのスケッチはシンプルに、MIDIから受け取ったControlChangeの値を2倍してそのままDMXライブラリに渡すだけ。
#include <MIDI.h>
#include <DmxMaster.h>
MIDI_CREATE_DEFAULT_INSTANCE();
void setup() {
MIDI.begin();
MIDI.turnThruOff();
}
void loop() {
if(MIDI.read()){
int type = MIDI.getType();
int d1=MIDI.getData1();
int d2=MIDI.getData2()*2;
if(type==midi::ControlChange && d1<120){
DmxMaster.write(d1,d2);
}
}
}
また今回使ったWebAppはここにあります。 http://www.g200kg.com/demo/dmx/
できました
動作テスト中です今回はWebAppで中継してMIDIコントローラから制御しましたが、Arduinoは普通にMIDIデバイスとして見えているので、例えばDAWでコントロールチェンジを送るようなシーケンスを組んでおけば、曲と連動して照明を動かすなんて事もできますね。
Posted by g200kg : 2017/08/13 03:04:52