DMX Shield for Arduinoを使ってDMXを受信する
スイッチサイエンスで取り寄せ販売となっていたDMX Shield for Arduinoが、通常販売となり価格も安くなったようなので試しに買って遊んでみました。
取り付け
今回はArduino UNOに取り付けています。また、このShieldを取り付けるとD13ポートのLEDが見えづらくなってしまうので、動作確認用として写真のようにShield上のソケットにLEDを取り付けました。
ジャンパー設定
DMX Shield for Arduinoには4箇所のジャンパーが実装されています。それぞれの機能は以下のように割り当てられています。
Shield有効 | EN | ^EN | Shield無効 |
---|---|---|---|
受信専用 | Slave | DE | 送受信 |
TXにD4を使用 | TX-io | TX-uart | TXにUART(D1)を使用 |
RXにD3を使用 | RX-io | RX-uart | RXにUART(D0)を使用 |
今回は受信専用で使用するためSlave側をショートさせます。また、Arduinoにスケッチを書き込む場合は^ENピンをショートさせてShieldを一旦無効にする必要があります。
すでにお気づきかもしれませんが、このDMX Shield for ArduinoはDMX通信にArduinoのハードウェアシリアルを使用します。ハードウェアシリアルはスケッチの書き込みにも使用されるため、機能としてバッティングを避けるための処置としてこのようにジャンパーで切り替える仕様になっています。
(TX/RX処理もD4/D3に切り替えられるようになっているのもそのためだと思われます。)
ひとまず今回はハードウェアシリアルを使用するため上記の画像の設定で進めます。
ライブラリ
DMX Shield for Arduinoを使うためのライブラリが製造元から提供されています。下記のページから Conceptinetics.zip
を選択してダウンロードします。
ダウンロードが完了したら展開してできたフォルダをArduino IDEのフォルダにある libraries
フォルダ内に配置します。
コード
以下のコードをArduinoに書き込みます。より詳しい解説はライブラリ提供元のwikiが参考になります。
#include <Conceptinetics.h> #define START_CHANNEL 1 #define SLAVE_CHANNELS 3 //ReadWriteをする場合は制御PINを指定 //#define RXEN_PIN 4 //DMX_Slave dmx_slave(DMX_SLAVE_CHANNELS, RXEN_PIN); // Read(slave)のみの場合はこちら DMX_Slave dmx_slave(SLAVE_CHANNELS); const int ledPin = 13; void setup() { dmx_slave.enable(); dmx_slave.setStartAddress(START_CHANNEL); pinMode(ledPin, OUTPUT); } void loop() { int data = dmx_slave.getChannelValue(1); if (data > 127) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } }
スケッチの書き込み
ジャンパー設定の項で述べたように、スケッチの書き込み時は^ENピンをショートさせてShieldを一旦無効にする必要があります。書き込みが終わったらENピン側をショートさせてShieldを有効化します。
動作確認
DMX Shield for ArduinoにDMXケーブルを差し込んで、適当なDMXコントローラーから1chの値を127以上にしてLEDが点灯すれば成功です。START_CHANNELの値を変更すれば、始まりのチャンネルを変更することができます。(例: START_CHANNEL=3で3chからスタート)