Maker Faire Bay Area 2011
It's been a week since the latest Maker Faire in San Mateo. We're still recovering from the effort of putting together our project, talking to thousands of curious Maker Faire visitors, and meeting all the famous (well, maker-famous) people we usually only see on the internet.
As always, the weeks leading up to Maker Faire were a frenzy of activity. For some reason, at macetech we have an aversion to bringing the same major project twice. We'll re-use some of the smaller ones, if they're still around, but the big project always has to be built from scratch and nothing like last year's project.
InspirationThis year, our project was inspired by Alex Beim at Tangible Interaction, a long-time customer of ours and client for special designs. His project was built for a 2011 New Year's celebration, and was called 100 Lanterns (video). Each lanterns in a 10x10 grid was lit by a Satellite Module 001 RGB LED and controlled by a ShiftBar LED controller. The ShiftBars were all controlled by custom Arduinos, receiving DMX commands from MADRIX audio-reactive pixel control software. The effect was brilliant and mixed the antique shape and texture of the lanterns with modern colorful lighting and computer-generated patterns.
We were already nearing completion of a new version of the Satellite+ShiftBar system, and decided that a similar demo would be appreciated at Maker Faire. Our project was sized for a 10'x20' exhibit space, and would contain 128 paper lanterns in a 16x8 grid.
PlanningThis would be our largest project yet. In 2009, we had an eight-foot wall of 80 MegaBrite LEDs, which were controlled by a Winamp plugin. In 2010, we had a large four-player Simon game. But those projects were relatively easy to build and transport. The LED lantern ceiling would require bulky overhead structures, fill the entire exhibit space, and would have a lot of power and data cabling.
Tangible Interaction used our Satellite and ShiftBar products for the electronic component of their system. We could have done the same thing, but we had some new products on the way. The first new product is the OctoBar, which is essentially eight ShiftBars built into a single PCB. This reduces the complexity of the setup by requiring the mounting and wiring of one PCB for every eight lanterns, instead of a separate controller PCB for every lantern. The OctoBar also has modular jacks that work with either RJ14 (6P4C) or RJ25 (6P6C) telephone (straight through, "reversed") cables. The new Satellite Module S-001 also has the same modular jack. Without the modular jacks, every cable for each lantern would need to be cut to length, four wires stripped on each end, and inserted into screw terminals in the correct order. It's not too inconvenient for a small number of LED modules, but it greatly reduced the amount of work and risk of error for 128 modules.
The overhead structure was probably the biggest challenge to overcome. Originally, we were going to build a 10x20x10 structure from steel tubing, which would involve heavier materials and most likely some welded components. We couldn't afford to make any engineering mistakes, since this would be installed at Maker Faire with tens of thousands of adult and children around and under the structure. This, plus the rapidly approaching deadline, pushed us to another solution.
We would need overhead shading material anyway, since the ambient light in Expo Hall would reduce the contrast of the lanterns too much. A popup canopy with black roof seemed like the perfect solution. Some are pretty flimsy, so we checked around for a while and eventually ended up with a pair of commercial duty 10x10 canopies from HutShop. They arrived quickly (free shipping!) and seemed stable and strong enough to support the additional weight of our lanterns and electronics. After measuring the internal structure, we used Sketchup to create a quick layout of lantern hanging positions and some PVC mounting frames.
The BuildThe buildout actually went pretty smoothly, if tedious. The PVC mounting frames were easily assembled with a combination of gluing, drilling, and zip ties. We marked each lantern location, and used zip ties to mount two lanyard hooks from American Science & Surplus. Each panel held 16 lanterns, so we mounted two OctoBars on each of the PVC frames. Wiring the modular cables from the OctoBars to the Satellite modules was easy; the hardest part was managing the extra cable length since we only had 7' cables.
When checking the paper lanterns, we did run into a problem. Our lanterns were purchased from a local shop, Asian Imports in San Carlos. We had checked the first, open box, but didn't check the second box until much later. Unfortunately, it was a mis-picked box and contained larger, orange lanterns instead of the white ones we needed. And since this was a Maker Faire project, we knew what would happen next...they didn't have any more of the lantern type we needed, and couldn't get them in time for Maker Faire. However, they offered an upgrade to a different, more expensive type of nylon fabric lantern instead of paper ones, no extra charge. We weren't sure how they would look in comparison to the paper lanterns, but overall think the nylon ones were better and brighter than the paper lanterns. So we're very glad that Asian Imports was willing to deal with the problem in the best way possible.
The only other part to build were some lifts to raise the canopy by about a foot, for optimal viewing height and preventing accidental bumping of the lanterns.
Control and SoftwareWe'd originally thought that controlling 128 modules would require at least two Arduinos, and some way to synchronize the output; DMX or some other bus communication system. However, as we began testing the system, we were surprised to discover no performance bottlenecks at 128 modules or beyond. The OctoBar is simply eight controller chips in series, like eight ShiftBars or ShiftBrites in a single chain. We wired the sixteen OctoBars on a single series chain, resulting in 128 shift registers of 32 bits each on the bus. Each write to the chain is done twice; once for the color channels and then for the control registers. So each update is 8192 bits. Our target update rate was 25fps, so there's plenty of CPU overhead, but we also needed to process all the incoming serial bytes and perform some gamma optimization on the input colors.
The serial input protocol is very simple. A packet starts with ASCII 255, followed by a control character. In the current implementation,  starts a pixel color stream, and  triggers a dump of all the LED colors in memory to the OctoBar shift register array. Color values are scaled from 0 to 254, to avoid conflicts with the packet start character of 255. OctoBar and ShiftBrite colors are 10 bits instead of 8 bits, but the extra resolution let us apply a gamma curve to the input colors.
The overall desired result was a large pixel array that would respond to music with shifting colors, patterns, etc. On Tangible Interaction's lantern array, the patterns were generated by MADRIX. However, we didn't have DMX hardware, and didn't have time to learn new software, despite the obvious high quality of the audio detection and available patterns. Instead we used Processing with the Minim audio library to detect levels, frequencies, and beat events. The Processing sketch draws high resolution graphics on a section of the screen, which is captured, downsampled to a 16x8 image, and converted to an array that is sent to the Arduino.
We didn't have much time left to write a lot of visual effects, so we came up with a unique idea: ask Processing experts to send in visual effects. We wrapped up our existing code as a simulator and released it for download; anyone could play with the code, write new effects, and send them in. It worked and we got a good number of effects in addition to our own. It was easy to integrate the extra functions and work out a method of cycling between them.
Here's the raw Processing and Arduino code used in the array. Obviously it's all hacked together, and may not be the most efficient or readable code. However, it works, and we'll definitely be polishing it for future projects. We'd love to see others work on the code too, and perhaps build it into a versatile LED array control program with easy ways to add effect plugins and output methods. We were really surprised it worked as well as it did. The Arduino code requires a 328 due to a horribly inefficient gamma table; we'll be working on a smaller interpolated gamma method soon. Since the lanterns were not arranged in a simple row/column order, we used a lookup table in Processing to map pixels in the 16x8 image to a particular lantern in the chain of 128 modules.
ResultsFinal installation went well. Dragged everything into Expo Hall on Friday, and managed to get most of it set up and tested before closing. We finished the wiring and got the small projects and couches set up Saturday morning.
Maker Faire Bay Area 2011 was the busiest Maker Faire ever. It was difficult to walk around our exhibit due to all the people packed in the surrounding aisles and exhibits. Our couches were almost always full of Maker Faire visitors relaxing, admiring the ceiling, and talking about ideas for their own projects. More than usual, we found it almost impossible to get away from the exhibit to wander the rest of Maker Faire. We were answering questions continuously and hearing a lot of "Wow!" and "I need this!" from people walking by.
Since the concept was originally put together by Tangible Interaction, we aren't going to attempt to build and install systems for anyone...we aren't very good at it anyway! We rely too much on zip ties. Alex does have an installable system built up, so if you'd like to get something similar in your venue, just contact Tangible Interaction.
Here's a video and some photos from the Faire. If you'd like to see more photos, you can find plenty in the Flickr Photo Set.
Here's an interview shot by Colin Watley, I describe the LED system quickly:
Submitted by Garrett on Sat, 05/28/2011 - 17:08.