By Scott Torborg and Grant Elliott
Update!
Detailed documentation and software is now available for download! See the downloads section.
Prologue
What follows is a lengthy, although far from complete, personal account of the construction of the First East Disco Dance Floor. Its purpose is not to offer a complete description of the procedure for constructing your own dance floor. Rather, we intend it to offer a perspective as to why we built a disco floor and what it took to do it. So get comfortable.
The Story
It all started in August 2004 when the new First East frosh showed up and we had dinner at Bertucci's to welcome them. Talk turned to the Bad Ideas Competition, hosted by the East Campus dorm every January. First East traditionally holds the Bad Ideas Ball, a foolishly inclined party concluding the competition. Schuyler suggested that we turn this year's Bad Ideas Ball into a Disco Ball (pun intended), including a lighted disco dance floor.
Schuyler's initial concept was a floor with 2' x 2' tiles with light bulbs and gels underneath. In hindsight, that would have been a great idea. It would have taken a few hundred bucks and could have been built in a day. Sure it would have destroyed itself by the end of the party and someone would have surely ended up with glass in his foot, but these are minor issues compared to the technical nightmare of doing it right. For some reason, Grant and Scott wanted to do it right. Something about scaling and elegance...
We threw around various ideas about using SCRs or other cheap power control devices to control light bulbs, discounting LEDs for their cost. At the end of the dinner we hadn't really settled on an idea; we just figured something would work itself out. During the following few months, we kept finding ourselves bored in the lounge after long nights of tooling.
As you probably know, it is never a good idea to discuss anything at 3:00 AM. At some point Grant and Scott started talking about computer controlled dance floors. This was a very unfortunate night. Then we discussed color-mixing red, green, and blue LEDs. This was a far worse night which led to many seemingly drunken declarations of the need for "multiple shades of purple." Gradually our concepts got more and more ambitious, and we toyed with the engineering problems involved. Neither of us was particularly serious, and we certainly didn't expect anything to result from the conversations. Unfortunately, it turns out that the more you talk about something that isn't serious, the more likely you are to forget that it isn't. Before long, you're spewing some nonsense about a vast USB controlled dance floor that can play video streams and people are looking at you like you're serious.
We found some LED driver chips from Maxim that looked like they could do the job and some contacts who could get us cheap LEDs. We decided the floor should have 6" x 6" tiles (good thing too- for a while they were going to be 4"), and we should cover the whole lounge, about 128 sq ft! We still didn't really take it seriously, and neither of us really thought the floor was going to get built. This remained the case until about halfway through construction.
Design
Grant and Scott designed a driver board to control 192 LEDs and 64 touch sensors... The whole thing fits in a nice small 4" x 5.25" PCB. An Atmel microcontroller does the dirty work of handling requests over USB and dishing out commands to the LED drivers. Since each driver board can handle 64 tiles and the floor is 16x32=512 tiles, we need 8 boards. It was decided that each board would control a 2'x8' section of floor (6" tiles, remember). These sections were dubbed the modules. Of course, we also sometimes refer to the boards themselves as modules. No one knows why we do this; it's entirely unnecessary and very confusing. We're all really just grateful that the design which incorporated (I kid you not) cells, modules, and meta-modules was abandoned early on. Nomenclature turned out to be one of the most amusing aspects of the whole project...
Here comes the amazing part. Grant and Scott did PCB layout over winter break (routing traces by hand, mind you...) Scott placed the order at the end of December. Remember now that the ball is scheduled for January 24th and it takes as much as two weeks to get these things in your hand from the day you place the order. So we did the logical thing. We crossed our fingers and ordered 25 of them. In case you aren't familiar with small quantity PCB fab, it goes like this: prices are assigned seemingly at random. In our case, 25 was roughly the same price as 8. In any case, we had absolutely no idea if they would work or not. We'd checked each other quite a bit, but it's a hard thing to get right on the first try... (I'll spoil the suspense; we pulled it off. No one knows how and we try not to think about why...)
We ordered boards from Advanced Circuits, and the boards were great quality and came on time. It should be noted that about this time, we also placed orders with Digikey, Maxim, Jameco, Home Depot, and GE. In all, we spent about twice our initial budget. Doesn't this project just keep sounding like a better and better idea?
Construction
In keeping with the spirit of this project, we decided it obviously made the most sense to start construction one week before the ball. Indeed, most of us spent the previous three days at the MIT Mystery Hunt doing a tremendous amount of not sleeping. Anyway, by some miracle all the shipments came in on time so we were ready to go. (Incidently, if you order 150 meters of heatshrink from Jameco, they will send you 150 individually wrapped 1 meter pieces.)
So here's the first problem with a project like this. That beautiful PCB - it's small because all the components are surface mount. In fact, the LED drivers are 24 pin QSOPs. QSOPs are very very small. Fortunately, Mike had some sort of amazing hidden talent: that man learned to solder a 24 pin QSOP in about a minute... Which is very good, seeing as he had to do 128 of them. Mike is probably the only reason this project got finished in time.
Meanwhile, we also had to make 512 ribbon cables with LEDs and a pressure switch on one side, and header on the other. The logical way to make a pressure switch for something like this is to buy force sensitive resistors (FSRs), but those cost money and we're already way over our budget. So Grant set to work investigating cheap pressure switches. It turns out you can make the world's worst FSR using single strand wire and plastic kitchen wrap (We recommend Saran Wrap with the nifty sliding cutter). Anyway, if you've ever tried to solder leds to the ends of the ribbon cable you know it takes time. Well, it takes even more time if you need to do it 1,536 times... and add the pressure switches... and put header on the other side. The amazing cable makers came through just in time. And only one of them had her gums swell in reaction to solder fumes (seriously... the doctors were somewhat confused.). Here's some more information on lead health problems.
In the other lounge (since the installation of the dance floor in the Goodale lounge, we like to think of the Walcott lounge as the uncool lounge, but that is neither here nor there) Schuyler and Matt had set up a little wood workshop with a chop saw and a table saw. It took them (and their own little workforce) six days to cut and assemble the 8 module frames. The seventh day was spent (no, not resting) raising the floor on either side of the dance floor to cover the power supplies and prevent the breakage of many ankles.
And while all of this was going on, Scott was trying to get client-side code ready to go and Grant was trying to get module-side firmware finished. We ran into a bit of an error in the Maxim datasheet and it took us two days to get intensity control to work. (It should be noted that, while they were ultimately unable to solve the problem, the Maxim tech support guys did spend considerable time attempting to help us.) When Grant finally got it going around 5AM one morning, there was a brief celebration which involved placing fading LEDs in a soda can and chanting something about "multiple shades of purple."
Somehow this all came together during the hours before the party as the residents of East Campus replied to our plea for help in final assembly. By the night of the ball, all the modules were in place and covered by the (still uncut...) Lexan. Unfortunately, most of them didn't work. Turned out to be an issue with the fuses - we're not going to go into it; it's still a bit embaressing. At least we figured it out and made six modules work for the party (#3 and #7 still refusing to work)... er... five modules ... er... four ... no wait... six again... Generally, something on the floor was always lit up. Of course, the code didn't scale very well as it had never been tested on more than a single module and we ended up with two people with laptops each controlling half the floor sitting against the wall, but these are all just details. The punchline is this: in one week, we built an absolutely amazing computer controlled dance floor from the ground up at an impressively low price.
Finishing Touches
The other punchline is that in a week and a day, we had the whole thing working. The remaining work is a lot of technical details that really aren't worth getting into. There will always be some little problem. Getting this thing perfect (Grant is very stubborn about this perfection thing) is an ongoing project, but it's pretty close (check out the demo video if you don't believe us). The only major change since the ball is the installation of heavier power lines. Outside of that, it's just been a matter of touching up solder joints and fixing a few cables.
It's been quite an experience. We've all learned a lot. For example, don't try to build a disco floor in your lounge; it will consume your life. Now there's a lesson they don't teach in any class. We do believe our dorm lounge is probably the coolest in the world. If not, it's at least the most complicated. As far as we know, there is no mention on the internet of anyone home brewing a dance floor of anywhere near this complexity. There's probably good reason for that.
Epilogue
In the weeks after the party we spent a few hours here and there working out all the kinks. Scott wrote a much more stable and versatile parallel I/O library using pthreads, and then an xmms plugin to control patterns and do some other neat tricks. Grant wrote a Matlab script to convert an array into a special format readable by the control software. Schuyler then went crazy in Matlab and made a bunch of cool patterns. These can be seen in the demo movie.
All in all, we enjoyed the project a lot. Stay tuned for a possible sequel... the Disco Dance Floor 2!