LoginSignup
4
4

More than 5 years have passed since last update.

Arduinoを使った3ch DMXコントローラーの製作

Last updated at Posted at 2017-11-27

概要

ArduinoUnoを使って照明用のDMX512のための3ch DMXコントローラを安価に製作しました。ボリュームで制御します。
ソフトは、先人がすばらしいライブラリ(DmxSimple)を作っているので、これを利用しています。
また、DmxSampleを使わないプログラムも紹介します。
ArduinoUnoの出力をEIA-485(RS485)にするために、シールド(ハードウェア)を作成し、次に動かすためのスケッチ(ソフトウェア)を作成します。

ハードウェア

DMX512を使うためには電気的にEIA-485に合わす必要があり、そのためにLT1785,SN75176,LTC485等のRS485トランシーバICをArduinoに接続する必要があります。
RS485.jpg
引用元( https://playground.arduino.cc/DMX/DMXShield )

電子回路(今回はボリュームを3個使いましたが、ArduinoUnoは全部で6個のアナログ入力ができるので6chに拡張することができます)
arduino2.JPG
作成したシールド
100均で買ったプラスチックの箱に、USBとキャノンの穴をあけました。Arduino Unoがぴったり入ります。LTC485はキャノンコネクタに直接ハンダ付して空中配線しています。ふたの所に3か所穴をあけてボリュームを取り付けました。
photo03.JPG

ソフトウェア1(DmxSimpleを使う)

ArduinoのDmxSimpleライブラリを使って簡単にDMXコントローラーが製作できます。
DmxSimpleライブラリのインストール方法については、「ArduinoによるDMX512制御DMXSimpleを使う」 (https://qiita.com/Ina3/items/9af8e14d991e8b1791d4 )を参照してください。
プログラムは、DmxSimpleをインクルードしてDmxの出力ピンを指定します。今回は、Pin1を出力にしました。
3個のボリュームを使って、その値を読み込みDmx出力します。analogReadでは0Vから5Vまでの電圧を0から1023までの値に変換するので、4で割ってDmxの0から255の値(8ビット)に変換しています。ArduinoのanalogReadは0から5の6chあるので、そのままで最大6chのDMXコントローラが製作できます。
ボリュームをスライド式に変えると本物のDmxコントローラらしくなります。

#include <DmxSimple.h>
int ch1   = 0;
int ch2   = 0;
int ch3   = 0;
void setup() {
  DmxSimple.usePin(1);
  DmxSimple.maxChannel(6);
}
void loop() {
ch1   = analogRead(0)/4;
ch2   = analogRead(1)/4;
ch3   = analogRead(2)/4;
    DmxSimple.write(1, ch1);
    DmxSimple.write(2, ch2);
    DmxSimple.write(3, ch3);
    delay(15);
}

ソフトウェア2(DmxSimpleを使わない)

ArduinoのDmxSimpleライブラリを使わなくても、DMXコントローラーが製作できます。
プログラムの詳細は、ArduinoによるDMX512制御(DmxSimpleを使わない)(https://qiita.com/Ina3/items/4a596d8f0849917c5058 )を参照してください。

int ch1   = 0;
int ch2   = 0;
int ch3   = 0;
int Tx = 1;//DMXoutputPin

void setup() {
}

void loop() {
  ch1   = analogRead(0)/4;
  ch2   = analogRead(1)/4;
  ch3   = analogRead(2)/4;

   pinMode(Tx,OUTPUT);
        digitalWrite(Tx,0);//Send a Low data of Break Signal
        delayMicroseconds(88);
        digitalWrite(Tx,1);//Send a High data of Mark after Break
        delayMicroseconds(8);
        Serial.begin(250000,SERIAL_8N2);//Set a Serial mode
        Serial.write(0x0);//Send a Start Code as 0
        Serial.write(ch1);//Send a Ch1 Data
        Serial.write(ch2);//Send a Ch2 Data
        Serial.write(ch3);//Send a Ch3 Data
        Serial.end( );//Reset a Serial mode
        delay(10);
 }

4
4
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
4
4