概要
ArduinoUnoを使って照明用のDMX512を制御します。
先人がすばらしいライブラリ(DmxSimple)を作っているので、これを利用します。
ArduinoUnoの出力をEIA-485(RS485)にするために、シールド(ハードウェア)を作成し、次に動かすためのスケッチ(ソフトウェア)を作成します。
DmxSimpleを使っている事例
【Arduino】ArduinoでDMX信号を出して照明を制御しちゃう【DMX】(http://moonwalkers.blog20.fc2.com/blog-entry-157.html )
[Arduino]:DmxSimpleで電球を光らせる(https://sites.google.com/site/mathrax2010/arduino/-processing-arduinoto-no-tsuushin )
DMX512について
参考資料
DMX512 ウィキペディア (https://ja.wikipedia.org/wiki/DMX512-A )
ハードウェア(シールド)
DMX512を使うためには電気的にEIA-485に合わす必要があり、そのためにLT1785,SN75176,LTC485等のRS485トランシーバICをArduinoに接続する必要があります。
引用した回路図
引用元( https://playground.arduino.cc/DMX/DMXShield )
作成したシールド
100均で買ったプラスチックの箱に、USBとキャノンの穴をあけました。Arduino Unoがぴったり入ります。LTC485はキャノンコネクタに直接ハンダ付して空中配線しています。
ソフトウェア
DmxSimpleライブラリのインストール
Arduino用のライブラリに「DmxSimple」というライブラリがあり、それを使うと簡単にプログラムを作ることができます。
- DmxSimpleをdownloadします
ここ(http://www.arduinolibraries.info/libraries/dmx-simple )からDmxSimple-3.1.0.zip(39KB)をdownloadし、解凍します。 - DmxSimpleを解凍します
ファイルが圧縮されているので右ボタン⇒解凍 で解凍します。 - 解凍したDmxSimpleをlibrariesフォルダにいれます。
エクスプロ―ラを起動し、ドキュメント⇒Arduino⇒と順に開いてください。librariesがありますか? もしなければlibrariesというフォルダを作ってください。そのlibrariesフォルダの中に先ほど解凍したDmxSimple-3.1.0のフォルダごと入れてください。 - Arudinoでライブラリの「DmxSimple」を確認
ファイル⇒スケッチ例⇒カスタムライブラリのスケッチ例⇒DmxSimple が見えることを確認してください - Arudinoでライブラリの「DmxSimple」があるかどうかを確認する
ライブラリ内のスケッチFadeUpの解説
プログラムのみを抜き出すと、
#include <DmxSimple.h>
void setup() {
DmxSimple.usePin(3);
DmxSimle.maxChannnel(4);
}
void loop() {
int brightness;
for (brightness = 0; brightness <= 255; brightness++) {
DmxSimple.write(1, brightness);
delay(10);
}
}
となるので、「DmxSimple」というライブラリをインクルードし、Pin3をDMX512出力に設定して、brightnessを0から255まで10ミリ秒ごとにデータ出力し、それを繰り返すプログラムだとわかる。
DimmerにDMXのアドレス1を設定し、接続してソフトを動かすと、明るさが徐々に増加していく。
またRGBライトを接続していると赤の明るさが徐々に増加していく。
ライブラリ内のスケッチFadeUpDownの解説
プログラムのみを抜き出すと、
#include <DmxSimple.h>
int brightness = 0;
void setup() {
DmxSimple.usePin(1);
DmxSimle.maxChannnel(4);
}
void loop() {
for (brightness = 0; brightness <= 255; brightness++) {
DmxSimple.write(1, brightness);
delay(15);
}
for (brightness = 0; brightness <= 255; brightness++) {
DmxSimple.write(1,255- brightness);
delay(15);
}
delay(400);
}
となるので、「DmxSimple」というライブラリをインクルードし、Pin1をDMX512出力に設定して、チャンネル1で0から255まで15ミリ秒ごとにデータ出力し、さらに255から0まで15ミリ秒ごとに順に変化させデータ出力し、400ミリ秒待って、繰り返すプログラムだとわかる。
DimmerにDMXのアドレス1を設定し、接続してソフトを動かすと、明るさが徐々に増加し、最大になったら逆に明るさが減少していく。
またRGBライトを接続していると赤の明るさが徐々に増加し、最大になったら逆に明るさが減少していく。
ライブラリ内のスケッチSerialToDmxの解説
プログラムのみを抜き出すと、
#include <DmxSimple.h>
void setup() {
Serial.begin(9600);
}
int value = 0;
int channel;
void loop() {
int c;
while(!Serial.available());
c = Serial.read();
if ((c>='0') && (c<='9')) {
value = 10*value + c - '0';
} else {
if (c=='c') channel = value;
else if (c=='w') {
DmxSimple.write(channel, value);
Serial.println();
}
value = 0;
}
}
となるので、「DmxSimple」というライブラリをインクルードし、シリアル通信を9600bpsで使っている。シリアル通信はPin0とPin1を使っており、プログラムの中でDmxSimple.usePinが設定されていないので、DmxSimpleのdefaultの3番pinがDMX512の出力になる。PCからのシリアルデータ(ASCIIコード)を1文字ずつArduinoが受け取り、文字'c'が来るまでの数値を変数'channel'に入れて、その後の数値を変数'value'に入れて文字’w’が来たらDMXとして出力するようになっている。
実際の動作は、プログラムをArduinoに書き込み、ツール⇒シリアルモニタ⇒速度を9600bpsに設定すると、パソコン画面に次のように表示される。一番上の欄に灯体のチャンネルと数字を1c128wのようにキーボードから入力すると、1チャンネルに128というデータがDMX512として出力される。