Embedded DMX Controller For Burning Man


This is the lighting controller [Paul Stoffregen] built for Burning Man. They wanted to go with DMX controlled lighting this year but that most often includes a computer to run the lighting sequences. This board runs the preprogrammed DMX sequence using a hacked lighting design file.

The choreography for the lighting was planned out using a program called Vixen 2. There is one newer version of the software, but [Paul] needed to translate the output file for use with a microcontroller and version 2 makes this a bit easier than version 3. Speaking of conversion, he didn’t want to start from square one and a bit of searching led to a tutorial which [Bill Porter] posted last year on converting Vixen files for use with Arduino. It wasn’t exactly what he had in mind, but most of the ground work was there.

A few code tweaks bent the script to [Paul’s] will. He changed the XML parsing function to ignore all but the main channels in the file. He also had it output a text file which can be stored on the SD card. Because the output is not being flashed to a chip this greatly increases the storage available paving the way for much longer and more complex shows.

Want to learn more about the protocol used by DMX equipment? Check out this primer.

9 thoughts on “Embedded DMX Controller For Burning Man

  1. is there a schematic available ???, i whanted to do something like this, i whant to have a dmx “master” who can send different light effects / animations over a dozen of dmx rgb lights.

  2. I’m a big fan of Vixen and it’s creator, K.C. Oaks. Last year he wrote a raw data export add-in for me that I use with Propeller boards in embedded DMX projects. The export file has a header with channel count, frame timing, and total number of frames. The raw data for the channels follows that. Easy-peasy and very popular with friends and customers that use my code.

    1. I just remembered that I have the raw data export add-in posted on the EFX-TEK site.


      The exported file starts with a 6-byte header that is three, 16-bit values: channel count, frame timing (ms), and number of frames in project. The raw frame data follows. It’s super easy to use and works like a champ. Having the header makes the application code doesn’t have to change project-to-project.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.