ArduinoでDMX制御する(チップ内蔵型LEDとの連動版 ~ WS2801 ~)


WS2801のチップを使ったLED( http://bit.ly/1JwJEn4 )とDMX to SPI( http://bit.ly/1OpeipK )を使うと、
LED一粒ずつの制御が可能になる。


チャンネルの概念としては、一粒ごとのRGBおのおのにチャンネルが割り当てられる様子。
つまり、チャネル1は1粒目のR、チャネル2は1粒目のG、チャネル3は1粒目のB、チャネル4は2粒目のR,,,,のようになります。

機材構成

1. Arduino UNO x 1
http://www.amazon.co.jp/dp/B00E5WJSHK/

2. DMX Shield for Arduino x 1
https://www.tindie.com/products/Conceptinetics/dmx-shield-for-arduino-remote-device-management-capable/

3. DMX512 Decoder(DMX to SPI)
http://bit.ly/1OpeipK

4. WS2811チップを使ったLEDテープ(NeoPixelなど)
http://bit.ly/1JwJEn4

5. ACアダプタ(5V / 2A)
http://akizukidenshi.com/catalog/g/gM-01801/

6. DMXケーブル(3ピン)
http://www.soundhouse.co.jp/products/detail/item/184705/

7. USBケーブル(B-Type)
http://akizukidenshi.com/catalog/g/gC-07605/


①以下のソースコードをUPする
※ Uploadする際にDMX ShieldのENピンは(not)ENピンをショートさせておく。

// ENピンを有効に
// DEピンを有効に
// TX / RX - uartピンを有効に
#include <Conceptinetics.h>

// The master will control 100 Channels (1-100)
//
// depending on the ammount of memory you have free you can choose
// to enlarge or schrink the ammount of channels (minimum is 1)
#define DMX_MASTER_CHANNELS 100

// Pin number to change read or write mode on the shield
#define RXEN_PIN 2

// Configure a DMX master controller, the master controller
// will use the RXEN_PIN to control its write operation
// on the bus
DMX_Master dmx_master ( DMX_MASTER_CHANNELS, RXEN_PIN );

int dimmer_col_idx = 10; // 10 ~ 12
int dimmer_val = 0; //

void setup() {
  dmx_master.enable ();

  // Set channel 1 - 50 @ 50%
  //dmx_master.setChannelRange ( 2, 25, 127 /* i.e. 256 * 0.5 */ );

  dmx_master.setChannelRange ( 1, 144, 127 );

  for (int i = 1; i < 144; i++) {
    dmx_master.setChannelValue ( i, 0 );
  }
}

void loop() {
  // Keep fading channel 1 in from 0 to 100%
  dmx_master.setChannelValue ( 1, dimmer_val++ );
  dmx_master.setChannelValue ( 5, dimmer_val++ );
  dmx_master.setChannelValue ( 10, dimmer_val++ );

  if (dimmer_val > 127) {
    delay(1000);

    dimmer_val = 0;
    dmx_master.setChannelValue ( dimmer_col_idx, dimmer_val++ );

    delay(1000);

    dimmer_col_idx++;
    if (dimmer_col_idx > 12) {
      dimmer_col_idx = 10;
    }
  }

  delay ( 10 );
}


DMX Shield for Arduinoのジャンパーのアサインを下記に変更
ENピン側をショート。
DEピン側をショート。
TX-uart側をショート。
RX-uart側をショート。


③LEDがつく