Re: note

技術的な知見やポエムなど役に立たない情報を書き連ねる場所

DMX Shield for Arduinoを使ってDMXを受信する

スイッチサイエンスで取り寄せ販売となっていたDMX Shield for Arduinoが、通常販売となり価格も安くなったようなので試しに買って遊んでみました。

www.switch-science.com

取り付け

今回はArduino UNOに取り付けています。また、このShieldを取り付けるとD13ポートのLEDが見えづらくなってしまうので、動作確認用として写真のようにShield上のソケットにLEDを取り付けました。

f:id:hik0leaf:20190525215520j:plain
Arduino UNOへの取り付け

ジャンパー設定

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 ArduinoDMX通信にArduinoのハードウェアシリアルを使用します。ハードウェアシリアルはスケッチの書き込みにも使用されるため、機能としてバッティングを避けるための処置としてこのようにジャンパーで切り替える仕様になっています。

(TX/RX処理もD4/D3に切り替えられるようになっているのもそのためだと思われます。)

f:id:hik0leaf:20190525220409j:plain
書き込み時のジャンパー設定

ひとまず今回はハードウェアシリアルを使用するため上記の画像の設定で進めます。

ライブラリ

DMX Shield for Arduinoを使うためのライブラリが製造元から提供されています。下記のページから Conceptinetics.zip を選択してダウンロードします。

sourceforge.net

f:id:hik0leaf:20190525225416p:plain
ライブラリのダウンロード

ダウンロードが完了したら展開してできたフォルダをArduino IDEのフォルダにある libraries フォルダ内に配置します。

コード

以下のコードをArduinoに書き込みます。より詳しい解説はライブラリ提供元のwikiが参考になります。

sourceforge.net

#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 ArduinoDMXケーブルを差し込んで、適当なDMXコントローラーから1chの値を127以上にしてLEDが点灯すれば成功です。START_CHANNELの値を変更すれば、始まりのチャンネルを変更することができます。(例: START_CHANNEL=3で3chからスタート)