Stage Lighting with LEDs, Arduino, & Firefly

We recently built a 1:24 scale model of a studio theater.  The design team did a great job building the model, but it was so seamless (thank you laser-cutter!) that it was very dark inside.  Even after the viewing holes had been cut, it was literally a black-box.  The solution was to rig up a bunch of high-intensity LEDs on the theater catwalk to illuminate the stage in an attempt to create something akin to the dramatic lighting during an actual show.  So we mounted the LEDs in black plastic tubing to get the can- and spot-light effects.  The lights were wired back to an Arduino micro-controller and we used the Firefly components for Grasshopper to control the whole system.

All this had to be done quickly: about two days before an important client meeting.  First, we had to solder together a bunch of LEDs to long wires.  As we only had speaker-wire on hand, so the most challenging part was stringing it along the catwalks with electrical tape.   With our “not so thin” speaker-wire cabling, it created a bit of a mess when the wire bundle exited the model…

Once the hardware was in place, we needed some way to control the lights.  Most modern theaters will have elaborate stage lighting controls – or better – some sort of programmable show control software (like QLab) running behind the scenes.  In our case, we hooked up the LEDs to an Arduino micro-controller board (hence the soldering of individual LED wires to each light), so that we could program the whole system through a USB interface.  The Arduino setup for controlling 10 lights is pretty simple…just 10 wires to 10 resistors on the positive pins, then a ground on all the negatives.

Rather than upload the control sketches to the Arduino board, we thought it would be a good chance to play with Firefly for Grasshopper.  Jason K Johnson and Andy Payne have created a beautifully seamed link between Grasshopper and Arduino.  With Firefly, we could just load the firmata sketch onto the Arduino board and then control all the lights in real-time from a custom Grasshopper definition.

We needed to tweak the Firefly_DEUM_Firmata_1002 Sketch to turn all the 10 pins to digital output, something which the authors have made pretty simple…just move the block comments in setup() that attaches the Servos and then change the pinMode of each of the required pins.  (If we had an Arduino mega board, this would have been an unnecessary step).

Once the firmware sketch was running on the micro-controller, we then created a Grasshopper definition to control the lights…as you can see, the definition was absurdly simple (it’s the “HelloWorld” sketch times ten), but it worked like a charm.  The lights were divided by type: spot-lights and downward can-lights.  If we’d bought variable intensity LEDs, we might have been able to implement dimming controls using analog pins and variable current.  (We did stop short of adding tiny 1:24 scale gels to the lights…but there’s always next time, right?).

The LEDs added a distinctly theatrical feel to the model, especially when viewed from the perspective of the audience.  With brighter lights, thinner wire, and a larger Arduino board we could potentially light a much larger model.   Now we’re left wondering if we can get our hands on LED bulbs that are calibrated to very precise millicandela units, so we could actually predict performance of larger luminaries.  Well, I guess that’s what photometric rendering is for…but this was more fun.

Theater model by tgerard, djarcho, and nlew.


  • Randolph Fritz

    This is very cool.

    I don’t believe that anyone manufactures calibrated LEDs, but it is not so difficult to measure their light output. It would be hard to simulate actual luminaire photometry, though. Ummm….

    • dbelcher

      Thanks Randolph.
      I assume you mean using an illuminance meter? Each of the LEDs used came with a mcd millicandela rating, but I’m not sure I should trust those. But I certainly need brighter bulbs.