※この記事は方法が古いです。今から試す方は以下のような記事を参照してください。(外部リンク)
※以下は過去の方法のアーカイブとして残します。
演劇や舞台パフォーマンスに電子工作を持ち込む場合、今やArduinoの活用は欠かせません。
インタラクティブ・メディアアートとかに興味が無い方は、Arduinoとサーボモーターでプロジェクターシャッターを簡単に作れるという辺りで、「へえ、役に立つのね」と思っておいてください。
でも、ここで問題になるのはやはり、「DMX信号で操作できないの?」ということ。
舞台照明は、舞台照明でしか使わない DMX512 というプロトコル (信号自体はRS-485の一種) で操作されています。
DMX信号で操作できれば、照明用調光卓からいろいろ操作できるわけで、私もずっとその方法を探していましたが、
普通に誰かがやっていました。私もこの記事と同じことをして成功したので、以下に解説します。
ちなみに、送信する方はDMX Shieldを使えば楽チンです。
必要なもの
- Arduino本体 (今回はArduino UNOを使用。元記事によれば、Atmega168 / Atmega328 搭載のものでしか紹介するソースコードが動かないようです。)
- ブレッドボードとジャンパー線 (最終的には汎用基板にはんだ付けですが、試験段階ではブレッドボードで遊ぶのがお約束)
- MAX485互換IC (SN75176、LTC485など。今回はLTC485で成功)
- DMX調光卓
なんと、これだけ!
ブレッドボードで配線するだけならハンダ付けも要りません。電子工作音痴にもやさしい。
パソコンにインストールするソフト
- Arduino開発環境 最新版 (インストールして簡単なプログラムを動かすとか、日本語化とかはあちこちで解説されているので省略します)
- Arduino開発環境 0023版 (元記事が書かれた2010年頃のバージョン。最新版だと一部ソースコードの互換性の問題が面倒なのでこちらを使う。本家がなぜかリンク切れなのでこちらから)
以上!
結線図
以下はLTC485の例です。互換ICでもピン配置が違う場合があります。
念のため言葉でも説明すると、
- ICの[RO]ピン―Arduinoの「RX←0」端子
- ICの[RE/]ピン―Arduinoの「2」端子
- ICの[DE]ピン―Arduinoの「3」端子
- ICの[DI]ピン―Arduinoの「TX→1」端子
- ICの[GND]ピン―Arduinoの「GND」端子
- ICの[A]ピン―DMX OUTの3番ピン
- ICの[B]ピン―DMX OUTの2番ピン
- ICの[Vcc]ピン―Arduinoの「5V」端子
です。
ICの向きは、半月型の窪みで判断します。図面に書いてある半月型と、IC本体の窪みを同じ方向にして読みます。
もう一度言いますが、この結線は「LTC485」というICの場合です。
回路的には同じでも、ピンの並びが違うICもありますので、その場合はICのデータシートをよく読んで、同じ役割(RO、DE、DI、など)のピンに接続するようにしてください。
Arduino-0023の設定
前述のとおり、今回はArduino開発環境は古めの「0023」版を使うので、そちらの設定をします。
- 元記事のこのへんにあるリンクをクリックして、receiver_rev15.zipをダウンロード。解凍。
- 元記事のこの辺を読む。
要するに、Arduino-0023で使う HardwareSerial.cpp を、俺が作ったやつで置き換えておいてね、という指示。
ディレクトリ指示は若干間違っていて、 /hardware/arduino/cores/arduino/ が正解。
置き換え用の HardwareSerial.cpp はさっきダウンロードしたzipの中にある。 - receiver_rev15から、以下のファイルを別の場所に作った「receicer_rev15」という名前のフォルダへ移す。
HardwareSerial が同じ場所にあるままだと、後でこちらのHardwareSerialを読みに行ってしまうことがある。Arduino-0023フォルダ内のHard(以下略 を読ませたいので、引っ越す。 - Arduino-0023を起動し、receicer_rev15.pde を開く。
- receicer_rev15, ActionLoop, Addressing の3つのタブが開けばOK。(単独ではNG)
- void setup() 内に、pinMode(13, OUTPUT) を追加する。
- ActionLoop タブへ行く。ここには、DMX値が少しでも変化した場合にどのような処理を行うかが記述されている。
画像赤丸の部分を書き換える。 - これで、Arduinoにこのプログラムを書き込む。
- 動作確認。
まず、DMX調光卓で、DMXアドレス1番のフェーダーを操作する。
半分くらいに来たところで、Arduino本体に載っている小さなLEDが点灯すればOK。
先ほど修正した、if(dmxvalue[2] >127) 云々に関係している。 - 次に、Arduino-0023をいったん終了し、Arduino IDE最新版を立ち上げる。
そして、「ツール」→「シリアルモニター」を起動する。
シリアルモニターの右下の速度設定を、「250000 baud」に設定。(新しいバージョンをインストールしたのはこのため。古いバージョンだと 112500baud までしか選べない。DMXは250kbpsで通信しているので、それでは見られない) - DMX調光卓のフェーダーを操作すると、上手く行けば以下の動画のように、DMX値 (0-255) が変化してくれるはず。
- あとは、ActionLoop内を自由に書き換えて、DMX信号を受けたらどうしてほしいか?を記述すればOK。
モーターを回すもよし、音を出すもよし。
以上です。皆さんの健闘を祈ります。
コメント