LoginSignup
8
5

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-16

概要

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

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5