Hi Instructable..ers,

I've settled on the lighting industry standard of DMX as my overall control protocol as I explore the world of blinky lights.  This universal control method is electrically robust, radio transmissible, and flexible enough for my needs (not to mention the needs of major concert, theatrical, and entertainment venues.)  There are a variety of DMX sequence controllers from free to thousands of dollars.

To that end, I designed a single-board DMX receiver that serves a Solarbotics Ardweeny daughter-board.  It features;

o an on-board 5V power regulator - 1AMP capacity
o 5V header for powering other devices (or it can serve to power this board from another regulated supply.)
o opto-isolation to protect the Ardweeny from spikes on the DMX lines
o Arduino analog and digital pin-outs for controlling other gear with your Arduino sketches
o RJ45 jacks for DMX connections (using low-cost Ethernet cables popular amongst lighting hobbyists)
o no DMX termination on board (be sure to place a 120ohm resistor across the last jack in a series)
o on-board PROGRAM/RUN slide switch that disconnects the DMX line from the Ardweeny so you can program it via the ICSP header.

Just rewrite the Arduino code to control any device with DMX. 

design references:

DIYLightAnimation.com - The excellent kits designed by Robert Jordon and other amazing contributors.  I currently own the EtherDongle, Rx/Tx transmitter/receivers, and Lynx Express 16-channel dimming system.

Arduino.cc (of course)

Matthias Hertel, http://www.mathertel.de - who has written the most effective DMX sender/receiver library I've found to-date.

major design decisions included;

o feed DMX to the flexible Arduino platform
o build cost less than any similar offering (this comes in at $33 with my volume purchased parts from ebay/China)
o through-hole design for easy assembly
o RJ45 jacks rather than XLR to take advantage of lower-cost Ethernet cables
o can provide power on the board for low-amperage projects or can be powered by larger supplies
o DMX isolation to protect the Ardweeny from transients (I also have a version with power isolation)
o Ardweeny can be easily replaced if damaged

very basic design steps:

o settled on design parameters (above)
o designed schematic and PCB in SparkfunPCB - a free PCB design tool
o checked fit of all components by printing the PCB to paper and punching parts through the printout
o considered burning the PCB at home but backed off due to the tight double-sided tolerances of some of the small vias
o submitted the Gerber design output files to BatchPCB.com (a service of SparkFun Electronics)
o received the PCB boards and populated one

Here's a very simple Arduino sketch that controls the 8-channel relay board in the photo.  (You'll need to install the DMXSerial library written by Matthias Hertel at http://www.mathertel.de.)


// DMX_Relay_8ch_v01 - September 15, 2012
// receives DMX data and operates an 8-channnel relay board via digital outs
// DMX routines Copyright (c) 2011 by Matthias Hertel, http://www.mathertel.de


//this device's DMX start address
// number of DMX channels to reserve for this device

//output pin setup
byte relay_pin[8] = {2,3,4,5,6,7,8,9};

void setup()
  //initialize DMX receiver

  //initialize pin outputs
  for (int p=0; p<8; p++){
    pinMode(relay_pin[p], OUTPUT);
    digitalWrite(relay_pin[p], LOW);

void loop()
  for (int p=0; p<8; p++){

    if (DMXSerial.read(DMX_START_ADDRESS+p) < 128)
      digitalWrite(relay_pin[p], LOW);
      digitalWrite(relay_pin[p], HIGH);


If you want to try this project:

I have some spare PCB's or you can order one at BatchPCB.com: https://batchpcb.com/pcbs/97418

I might sell a complete PCB/parts kit.  Ask me.

Bill of Materials
1x PCB via BatchPCB.com
1x Solarbotics part # KARDW
1x GN137 Opto Coupler DIP-8
1x MAX485EPA RS485 DIP-8
1x L7805ABV Voltage Regulator 5V 1A TO220
1x 1Kohm Resistor
2x 470ohm Resistor
1x 0.1uF ceramic capacitor
1x 0.33uF ceramic capacitor
1x IN4001 diode
1x 5mm red LED
1x Header 2-pin 0.1 spacing
1x Header 6-pin 0.1 spacing
1x Header 13-pin 0.1 spacing
1x 5.5mm barrel jack - Spark Fun Electronics SKU : PRT-00119
2x RJ45 PCB jack, right-angle, no shield
1x SPDT slide switch or 2-pos header with jumper


<p>how does this work, in practice? How does your DMX controller actually control the relays? The code would make it look like all eight are activated, once the address is over 128?<br>How could you set an address for each relay?</p>
<p>Hi Joe,</p><p>The if statement &quot;if (DMXSerial.read(DMX_START_ADDRESS+p) &lt; 128)&quot; is querying the DMX address for its VALUE - 0-255. If that value is below 128, set the pin to LOW, if 128 or higher, set the pin to HIGH.</p><p>So, if the DMX starting address is 1 (as it is in the sketch) the FOR loop runs from 0-7, checking the values of DMX addresses 1-8.</p><p>This is a very simple sketch. You could, of course, write a more complex one that checks any combination of DMX addresses and operates attached peripherals through the Arduino pins - dimming, blinking, activating, etc.</p><p>Best,</p><p>Michael</p>
do you know of any good resources for learning more about dmx?
Sure! Here are some useful links:<br> <br> DMX:<br> <a href="http://www.elationlighting.com/pdffiles/dmx-101-handbook.pdf" rel="nofollow">http://www.elationlighting.com/pdffiles/dmx-101-handbook.pdf</a><br> <a href="http://www.lvr.com/rs-485_circuits.htm" rel="nofollow">http://www.lvr.com/rs-485_circuits.htm</a><br> <br> Some expanded standards including ArtNet:<br> <a href="http://www.artisticlicence.com/WebSiteMaster/Newsletters/focus1.pdf" rel="nofollow">http://www.artisticlicence.com/WebSiteMaster/Newsletters/focus1.pdf</a><br> <a href="http://www.artisticlicence.com/WebSiteMaster/Newsletters/focus2.pdf" rel="nofollow">http://www.artisticlicence.com/WebSiteMaster/Newsletters/focus2.pdf</a><br> <br> Best,<br> <br> Michael

About This Instructable




Bio: I'm a professional cinematographer with a geeky electronics fascination. I've loved all things blinky since I was a wee tot. From the lights ... More »
More by mmorlan62:DMX Ardweeny Node 
Add instructable to: