bm2004: 25 5mm orange LEDs, 9V battery wearable

This web page documents a board with 25 LEDs running patterns
Board size: 2.75 x 2.75 two-layer

Project timeframe: August 2004
Client: Leo Villareal
Webpage created: May 25 2007

Top view:

Top view, an example single frame:
(top lit)

Bottom view (w/o on/off switch, not put on this proto)

(i.e. the blinky for Burningman 2004) is the first generation of the wearable LED blinkies for Leo Villareal / disorient.  (other years: bm2006, bm2005).  bm2004 is a 5x5 grid of 25 5mm high-brightness orange LEDs.  The LEDs and all the parts are through-hole, to make it easy for "solder monkeys" to assemble them.  Unfortunately I wound up doing a considerable amount of fixing (bad monkeys!) and soldering on-playa.  Yick.

I did the "architectural" design of the hardware and all the software.  Todd Polenberg did the hardware layout and project management.  The layout is a bit tricky, since everything is through-hole, and all the electronics are on the backside.

The design is pretty simple.  25 pins of the PIC18F442 PIC control 25 2N7000 NFETs, each of which switch an LED thru a 180 ohm resistor.  To save a lot of space and hassle resistor networks are used.  This arrangement allows higher than 20mA to be run through the LEDs if desired, and there is no concern for exceeding total current flow thru the PIC, which might happen if all are on at once.  (the PIC has 20 to 25mA per pin max, and a total of all pins maximum.)

Assembly has to happen in a certain order - after more rework than should have been necessary the assembly process became: solder the LEDs first, then the resistor networks and FETs, then test that each LED can be turned on and off by its FET, then finally put the PIC on.  If there are solder bridges or broken traces under the PIC it is a world of hassle.

The software the runs it is also pretty simple: patterns are stored in program ROM, and played back.  Everything is in C using the CCS C compiler.  The clever bit to this is the patterns themselves are frames synthesized using video processing and whatnot from Leo; these were sent to me as a list of LEDs to light for each frame, all frames for a pattern concatenated together.  Each frame also had a "repeat count", i.e. how long to show it for, effectively.  This allowed a single pattern to have "faster parts" and "slower parts".  This data was then processed by a little utility program I wrote to generate two large const arrays in C, which was #include-ed in the main code.  So Leo was able to send me a bunch of different pattern files conveniently, and I'd process them in a batch to make "patterndata.c", and then compile everything to make the PIC HEX image.  In addition, there are some "smart randomization" tricks whereby pattern playback speeds up and slows down, and each pattern is randomly chosen, with a few smarts.  It took some squeezing and a few hacks but we managed to fit everything we wanted to in a relatively small/cheap PIC.

Apart from the schedule being ridiculous, this project turned out pretty well.  Live and learn.