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:
Bottom view (w/o on/off switch, not put on this proto)
bm2004 (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.
Home