Arduino DMX-512 I/O Shield
Breadboard is Great and All, But it’s not going to survive a six week run with actors tripping over it and that kid’s show that runs on Sunday mornings. So here’s a shield that can fit onto your Arduino and securely hold all your connections in place. It is tested and working with the dmx reception software I wrote for the Arduino.
Features:
- Same hardware be used to receive or send DMX, so you only have to build one shield.
- Onboard termination switch.
- Reset switch brought to top of shield for easy access.
- Pin 13 LED brought to shield for status/error messages.
- Two tact switches allow in-the-field addressing, without permanently disabling any pins.
- Header sockets for easy prototyping.
- Solder through-holes for permanent installations.
Note: I changed the pin assignments slightly from early versions of the software to allow easier routing. Pins 3 and 4 in the software are now pins 2 and 3, respectively. As of Rev11 this change has been made, get the latest version here.
Pages: 1 2

May 3rd, 2009 at 12:11 am
I’ve been waiting for something like this for some of my projects! It’s not at the top of my list, but I’ll definitely be putting one of these shields together sometime.
August 14th, 2009 at 6:27 pm
Hi,have just got Rev 13 working on a 328 (Duemilanova) with Arduino 15 with the modified libraries. It works with an Artistic licence Microscope DMX tester and again with Magic Q + Enttec Pro. Will test with some Avolites desks but am sure it will be fine. Fantastic stuff. Thanks Mickey
February 5th, 2010 at 10:59 pm
Hi, Just wondering if you’ve considered supporting RDM? It would allow you to patch intelligent fixtures, change behaviour mode, invert axes, and so on – all from the comfort of your arduino sketch. What d’you think? (Email me)
February 8th, 2010 at 2:44 pm
RDM is something I’m interested in doing, and the hardware has been designed to accommodate this functionality. But it’s not really a priority of mine, given that there isn’t a major console that supports it, and in the long run RDM is an evolutionary dead end anyway. In ten years, as intelligent lighting becomes a standard feature of every show, we won’t still be daisy chaining cable that costs $1.50 a foot everywhere. I hope.
March 21st, 2010 at 12:30 pm
Hi Max – this looks great, nice work. I’m planning on adding DMX input to a device I’ve been working on (for theatre use), have you used your adruino/DMX shield combo to pass DMX through, i.e allow the arduino/shield device to live within a DMX chain?
March 21st, 2010 at 3:30 pm
I actually haven’t used this board in a real-world application at all. I seem to be getting larger shows all of a sudden where I don’t have time to do custom stuff like this, I either have to rent something or do without :( (but if you have a project that requires bespoke technology, drop me a line!)
There’s no real magic to the pass-through, you just connect the five wires on the male and female together 1-to-1. Other people have reported it works for them. Good luck!
June 3rd, 2010 at 1:34 pm
Hi there,
I was recently trying to see if I could use this to receive DMX via the UART (as you have coded it) and then use NewSoftSerial with rx attached to pin 9 and tx attached to pin 10 so that I could send messages to an xbee at 56700 baud rate.
So far this does not seem to be working. From my tests it seems that after the USART and TIMER2 setup the NewSoftSerial library will not work.
Have you peaked at this code before?
http://arduiniana.org/libraries/newsoftserial/
June 10th, 2010 at 12:47 am
Hi,
I build DMX I/O shield. I managed to change dmx address, but I don’t get dmx signal. I am sending with other arduino with DMX shield. It sends fading values for every channel. But I still don’t receive nothing. DMX shield is tested with dmx tester and it is working.
Does DMX-512 I/O Shield works with Duemilanove328?
July 13th, 2010 at 6:56 am
Hey!
Just want to say thanks, i’ve been loosing my patience trying to do it myself :)
Works great for me and my project: http://translate.google.com/translate?hl=sl&sl=sl&tl=en&u=http://www.gzt-project.si/%3Fpage_id%3D148 (a bit clumsy google translation…)
August 20th, 2010 at 3:41 am
Very cool! I like this a lot.
September 6th, 2010 at 7:58 am
Recently buy parts to make DMX shield from CuteDigi, three questions:
I have DMX 3 pin LED bars, its compatible?
How to connect from 3 to 5 pin and viceversa?
Need to make some changes in code?
Thanks.
December 7th, 2010 at 7:40 am
Hey!
Do you have any dmx board to sell? Even without the parts..I’d buy it, please send me an e-mail.
Thanks
December 7th, 2010 at 7:43 am
Nevermind..I found this at cutedigi, this is great.
January 11th, 2011 at 5:33 am
First, my thanks to Mr. Pierson for developing this board and software. I’m really just a carpenter working as a TD for a non-profit theatre in Washington, DC, and I’m just trying to put some simple DMX effects together.
I’ve been successful with sensors, wireless, wav files and motors thanks to shields/tutorials from another site- so I’m not totally helpless (though if this thing were made out of wood I’d be more comfortable!).
I bought 2 PCBs from cutedigi, and the parts from the list, but the cutedigi boards have some extra holes (above and below the Max485 for example, and just above the reset button). Are these holes to be left open, or are they for optional/added components?
If anyone has a picture of a functional, assembled cutedigi board, I guess that’d be enough, too.
For the record, I am using the Arduino Uno.
Thanks!
The cutedigi board, front:
http://www.cutedigi.com/popup_image.php?pID=4292&image=0&osCsid=a98a8fd69930b4004fe03a92fc0f9c40
January 12th, 2011 at 2:58 pm
Hi Jason,
I think the holes would be extra in this case– the board as I laid it out has holes for jumper wires on the top (single sided board), while the cutedigi board is double sided. I’d be interested to know how the build goes with their product, be sure to post back with your experience (I’m not affiliated with them in any way).
Someone mentioned that the code as written does not work with the Uno, I don’t have one to test with myself. But the processor is the same so I would think that adapting the code would be fairly straightforward, if any adaptation was needed at all. Again, I would be interested to know what you experience is.
Best of luck!
March 10th, 2011 at 11:16 am
Hi, very interesting project. I was just wondering whether this could be used so that I could plug in my DMX output from my lighting desk into the input of the shield and the output of the shield to my demultiplexer (My school doesnt own any “DMX” lighting fixtures). This way, I could control many interesting things from one simple input from the desk (Lets say a flash button being pushed) could trigger all manner of interesting chases and scenes, co-ordinated to the second.
Thanks,
Michael.
March 15th, 2011 at 6:27 pm
Hi Max… I’m wondering what changes I would need to make to use timer1 for the dmx receive code ?
I’ve got a LEDStrip demo working, but it uses timer2 for PWM, *adafruit RGB led strip*
Thanks
December 23rd, 2012 at 10:40 am
Thanks for the great resource!
Will this retain the DMX address with a power loss or simple reset? Sorry if this is a simple question :)
December 24th, 2012 at 3:19 pm
Hey Matt,
The latest version of the code does indeed store the address in eeprom, if you go to the main post you can download it there.
April 22nd, 2013 at 11:27 am
It took some doing, but I got this to compile and upload to my Arduino. I’m trying to use the received DMX to output PWM on 9-11 for RGB values. Whatever it’s receiving, it’s just causing my LED’s to flash intermittently. I’m thinking there’s 2 causes: I’m using an UNO and I’m using the latest Arduino software. Any thoughts? Should I try this with an older (pre-1.0) release?
April 22nd, 2013 at 7:37 pm
Hi Matt,
For troubleshooting purposes, I’d start with a simpler circuit, e.g. turn an LED on when a level greater than 128 is received. And, yes, I would start with revision 0023 of the Arduino IDE. I’ve added a note to that effect to the post text, this post is now more than four years old :)