Arduino
DMX512
DmxSimple

ArduinoによるDMX512制御(DmxSimpleを使う)

概要

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に接続する必要があります。
引用した回路図
fig04.jpg

引用元( https://playground.arduino.cc/DMX/DMXShield )
作成したシールド
100均で買ったプラスチックの箱に、USBとキャノンの穴をあけました。Arduino Unoがぴったり入ります。LTC485はキャノンコネクタに直接ハンダ付して空中配線しています。
fig11.jpg

ソフトウェア

DmxSimpleライブラリのインストール

Arduino用のライブラリに「DmxSimple」というライブラリがあり、それを使うと簡単にプログラムを作ることができます。
1. DmxSimpleをdownloadします
 ここ(http://www.arduinolibraries.info/libraries/dmx-simple )からDmxSimple-3.1.0.zip(39KB)をdownloadし、解凍します。
1. DmxSimpleを解凍します
 ファイルが圧縮されているので右ボタン⇒解凍 で解凍します。
1. 解凍したDmxSimpleをlibrariesフォルダにいれます。
 エクスプロ―ラを起動し、ドキュメント⇒Arduino⇒と順に開いてください。librariesがありますか? もしなければlibrariesというフォルダを作ってください。そのlibrariesフォルダの中に先ほど解凍したDmxSimple-3.1.0のフォルダごと入れてください。
1. Arudinoでライブラリの「DmxSimple」を確認
 ファイル⇒スケッチ例⇒カスタムライブラリのスケッチ例⇒DmxSimple が見えることを確認してください
1. Arudinoでライブラリの「DmxSimple」があるかどうかを確認する
fig01.jpg

ライブラリ内のスケッチ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として出力される。
fig02.JPG