The following settings are configurable via the onboard jumpers:

The shield comes standard in a 5 pin XLR version, 3 pin versions is available as well. PCB is design to fit both of them.

Every board is tested before shipping to provide high quality service.

This DMX Shield is a high quality solution for reasonable costs that allows you to connect your Arduino driven artwork safely into DMX512 networks.



For a simple setup it is possible to connect the Driver chip directly to the Arduino pins but if you need a robust system, especially on a stage environment, you will have to add some more electronics to avoid electrical damage by defect equipment or accidental circumstances.

The electric potential of the DMX side of the implementation have to be isolated from the processor. There are 2 sort of chips that implement all you need:

Arduino Software


The Conceptinectics DMX Library for Arduino can be downloaded from the source forge website. Sample code for this shield is provided below.

In case you have the shield configured to use the RX pin you have to disable the shield before you can upload your new sketch onto the Arduino board. This jumper allows you to disable the shield without disconnecting it from the Arduino board which saves time.

#include <Conceptinetics.h>

#define DMX_SLAVE_ADDRESS    1 //DMX address
#define DMX_SLAVE_CHANNELS   4 //DMX channels

// Configure a DMX slave controller
DMX_Slave dmx_slave ( DMX_SLAVE_CHANNELS );

//PIN configuration
const int StatusLed = 13;
const int PWM_R = 11;
const int PWM_G = 10;
const int PWM_B = 9;

unsigned long       lastFrameReceivedTime;
const unsigned long dmxTimeoutMillis = 10000UL;

// the setup routine runs once when you press reset:
void setup() {             

  // Enable DMX slave interface and start recording
  // DMX data
  dmx_slave.enable ();  

  // Set start address to 1, this is also the default setting
  // You can change this address at any time during the program
  dmx_slave.setStartAddress (DMX_SLAVE_ADDRESS);

  // Register on frame complete event to determine signal timeout
  dmx_slave.onReceiveComplete ( OnFrameReceiveComplete );

  // Set led pin as output pin
  pinMode ( PWM_R, OUTPUT );
  pinMode ( PWM_G, OUTPUT );
  pinMode ( PWM_B, OUTPUT );
  pinMode ( StatusLed, OUTPUT );

// the loop routine runs over and over again forever:
void loop() 

  float M = dmx_slave.getChannelValue (1) / 255.0f;
  int R = dmx_slave.getChannelValue (2) * M;
  int G = dmx_slave.getChannelValue (3) * M;
  int B = dmx_slave.getChannelValue (4) * M;


  if(millis() - lastFrameReceivedTime > 3000)

bool sta = false;
void OnFrameReceiveComplete (unsigned short channelsReceived)
  if ( channelsReceived == DMX_SLAVE_CHANNELS)
    // All slave channels have been received
    // We have received a frame but not all channels we where 
    // waiting for, master might have transmitted less
    // channels

  sta = !sta;
  // Update receive time to determine signal timeout
  lastFrameReceivedTime = millis ();