ArduinoでDMXを受信する
前回はDMX Shield for Arduino使ってDMXを受信してみましたが、もっとコンパクトにオリジナルのDMX機器を作れるようにShieldを使わない方法でArduinoでDMXを受信してみたいと思います。
準備物
- Arduino
- LTC485 (LT1785, SN75176等のRS485トランシーバIC)
- ブレッドボード、ワイヤー等
回路図
ArduinoとLTC485を図のように接続します。今回はArduino UNOを使いました。
ライブラリ
DMXを処理するためにDMXSerialというライブラリを使用します。git cloneするかzipダウンロードしてローカルに保存します。保存したライブラリフォルダをArduino IDEのインストールフォルダにある libraries
に配置するとArduino IDEからライブラリを読み込めるようになります。
DMXSerialクラスのリファレンスがあるので詳しく知りたい場合は参照すると良いでしょう。
DMXSerialのメインページはこちら
スケッチの書き込み
下記のスケッチをArduinoに書き込みます。その際、ArduinoのD0ピンに接続したワイヤーを外してください。なぜかというと、Arduino UNOはスケッチの書き込みにハードウェアシリアルのD0/D1ピンを使用するためD0ピンがLTC485と繋がっていると書き込めなくなってしまうからです。
#include "DMXSerial.h" int startCh = 1;//DMX Start Channel void setup() { DMXSerial.init(DMXReceiver); pinMode(13, OUTPUT); } void loop() { unsigned long lastPacket = DMXSerial.noDataSince(); if (lastPacket < 5000) { byte data = DMXSerial.read(startCh); if (data >= 127) { digitalWrite(13, HIGH); } else { digitalWrite(13, LOW); } } }
書き込みが終わったらD0ピンへワイヤーを接続します。 デバッグ等で頻繁に書き込む場合は、スイッチなどを取り付けて簡単に接続を切り離せるようにすると良いかもしれません。
(DMX Shield for Arduinoは実際そうなっています)
動作確認
LTC485の5, 6, 7pinを適当なDMXコントローラーと接続します。スケッチ上でこのDMX機器のスタートチャンネルを1としているので、DMXコントローラーから1chに対して値を127以上にしてLEDが点灯すれば成功です。
おまけ:Arduino Leonardo編
Arduino Leonardo(ATmega32u4系Arduino)はスケッチの書き込みにハードウェアシリアルを使用していないため、書き込みの際にワイヤーを外したりする必要がありません。さらにこれによって、DMX信号の値をシリアルコンソールで出力できるようになるため、DMX信号のモニタリングができるなどArduinoでDMXを扱う場合はArduino Leonardoを使用するのがおすすめです。
写真ではArduino Leonardo互換のA-Star 32U4 Microと接続しています。A-Star 32U4 Microは小型のためブレッドボードとも相性が良くおすすめです。
Arduino Leonardo用スケッチ
以下のスケッチをArduino Leonardoに書き込みます。LTC485との配線はUNOと同じですが書き込み時にワイヤーを外す必要はありません。
#include "DMXSerial.h" int startCh = 1;//DMX Start Channel byte preData = 0; void setup() { DMXSerial.init(DMXReceiver); pinMode(13, OUTPUT); Serial.begin(9600); } void loop() { unsigned long lastPacket = DMXSerial.noDataSince(); if (lastPacket < 5000) { byte data = DMXSerial.read(startCh); if (data == preData) return;// 値の更新判定 if (data >= 127) { digitalWrite(13, HIGH); } else { digitalWrite(13, LOW); } preData = data; Serial.println(data); } }
動作確認
適当なDMXコントローラーから1chの値を127以上にしてLEDが点灯すれば成功です。さらにシリアルモニタを開くとコントローラーからの値の変化を確認することができます。
それでは良いDMXライフを。