In short: the Mitochondrion looks as stunning as I hoped for about five years ago.
My journey into the obsession of making LED staffs
About five years ago, I stopped fire spinning and started building LED staffs. I wanted to have images hanging in space around me while I am spinning staff. Technology (and my skills) have finally got to that point where I’m pretty happy with the Mitochondrion, Mark 5.3.
The path has been:
Mark 1 – I learnt so much by designing the first one that there was no point building it. Straight on to…
Mark 2 – Ran without a microcontroller and had some fundamental flaws, like not turning on. I learnt enough to build the next one…
Mark 3 – The first of those pictured above. 44 LEDs controlled by a Picaxe. Twenty-eight bytes of memory, home-etched circuit boards, sketchy wooden parts, and bubble-wrap.
Mark 4 – First to use LED strips, 88 LPD8806 controlled by an Arduino Nano, twenty NiMH cells, and 3D printed parts. Eventually became bomb-proof enough that various I was happy to let randoms play with it at festivals.
Mark 5.2 – Teensy 3.1, 800 NeoPixels as four parallel strips of 200, and lithium cells. It looked good at Burning Man until the overloaded Voltage converters tried to catch fire.
Mark 5.3 – The brief details are: twelve 14500 Lithium rechargable cells powering 800 APA102/DotStar LEDs in four strips, controlled by a Teensy 3.2 microcontroller, with a motion sensor to turn it on and off, running the wonderful FastLED library and my own multitasking code to display a hundred images. You may have seen version this at Kiwiburn this year.
The not-so-brief details are explored below, with an emphasis on the inevitable trade-offs that you face when trying to push to the boundary of what’s possible.
First limit is size, because here we’re trading off between ease of holding, stiffness, and internal diameter. The outside diameter of the tube can only be so big before it gets hard to hold. 32 mm is already fatter than I’d like for a staff. The only possible material for the tube is polycarbonate and that’s pretty flexible stuff. That diameter tubing comes in two choices of wall thickness and 1.6 mm is like a noodle. So 3.2 mm wall it is, giving a 25.4 mm inner diameter. That fact alone drives the rest of the design.
Second limit is energy storage. I want this to be kicking out the lumens all night long, or at least as long I last at a festival. (So that’s till about half-way through the night when everyone is kicking off and I say “I’m just going back to camp to get more water” and then I sneak off and crash out. But I digress.) I also want to fit four LED strips along with the necessary wiring and internal structure. Turns out 14500 cells (AAA size) fit, with about a quarter of millimetre spare. Twelve of them give me 33 Watt-hours, which is sufficient. Splitting them into two groups puts the heavy cells at the tube ends for good weight distribution when spinning. Keeping those two groups as one pack, i.e. all the cells in parallel, makes charging so much easier. Charging from USB is handled by Peskie Products tiny 800 mA board.
The cross-section looks like:
Third limit is power. I’m keen on ridiculous peak powers. And 800 LEDs could peak at 150 Watts. Sadly, that would pull 4 Amps per cell, a rate of 6C. There are high discharge rate 14500 cells, but I’ve yet to find any that are also protected and 50 mm long. The Trustfire Flame cells I’m using have a detectable Voltage sag at anything above 0.1 Amps, so I chose to cap the power at 10 Watts. More is certainly possible, but the green and blue LEDs fade out leading to a noticeable colour change. And 10 Watts is still the brightest LED flow tool that I’ve seen in NZ. (At some point, I’ll try higher discharge cells…)
Fourth limit is features. Here the trade-off is between time writing code (and getting it to work) and just building the bloody thing. I’m at the point where it does images. It doesn’t visualise music, yet, but that’s the plan for Mark 5.4.
Fifth is durability. Making a long, thin electrical device and then repeatedly throwing it on the ground is just hard. So everything is solidly mounted, there’s 3D printed ninja-flex bumpers at the ends, all structural parts are aluminium, thick 3D printed nylon, or FR4. All wires are as short as they can be, with locking connectors. All solder connections between parts that could move are sewn. All cell holders are screwed in place as well as soldered.
Key design features for the Mark 5.3
Power architecture – the great thing about APA102 LED strips is that they will happily run off 3.7 Volts, meaning no need to step Voltages up to 5 Volts as with NeoPixels. (They also just work, unlike NeoPixel’s tricky timing requirements.) This simplifies the power architecture greatly and avoids using UBECs. The downside is that they pull 1 milliAmp per LED even when the LEDs are set to off. I don’t have room for a physical power switch, so to keep the stand-by life at more than a day, there’s MOSFETs between cells and strips which cut or enable power to the strips. This also allows for control of the strips on start up – the Mark 5.2 didn’t have this. On power-up, the NeoPixels could light before the microcontroller had booted up, getting stuck in a high-current draw mode, preventing the Teensy from starting and damaging other components from overheating. The Mark 5.3 holds power off to the strips until explicitly commanded by the microcontroller.
Here’s a block diagram, clickable for enlargement:
Overall Arrangement and Physical Alignment – Accuracy is hard. Or rather, accuracy is expensive and time consuming. Squeezing everything in gets to be a pain in the arse, when you have quarter-millimetre tolerances. Making everything stiff enough and strong enough is bonus arse pain. So rather than try to make structural components myself, I used the PCBs as structure, alignment, and circuitry. Board shops will happily drill holes for no cost with micron accuracy. Then everything just screws together and fits together. The four sides are in two pairs with L-brackets holding each pair. There’s hinges between each pair so you can remove the internals and open the whole thing up for access.
Physical power switches – I said this doesn’t have room for one. It doesn’t, at the ends. One end holds the charging port, the other the microphone. I probably could squeeze one in, but there’s lots of current so the switch isn’t going to be small and the ends are the parts that get most knocked-about, so it’s not going to be durable. Still, power switches are necessary for debugging and resets, so there’s two tiny, board-mounted six Amp switches, one for each battery pack.
Multi-tasking code and timing
The code is all built on Alan Bleaklow’s Very Simple Arduino Task Manager. Every feature is an object that gets called every X milliseconds. The pattern generator and display refresh run every 2 milliseconds; the motion sensor every 250 milliseconds when spinning and every 500 milliseconds when stationary. Communication between objects is by message passing, with a SwitchModes object running a finite state machine to hand smooth transitions between spinning, ambient, and timed-out modes. Transitions between images happen every few seconds, or on reversal of the spin direction. The transitions are sharp, but could be gradual.
This code is probably a bit over the top for just displaying images, but is a solid platform for more complex behaviour.
The interface is entirely motion-based. Spinning wakes it, not spinning drops it into mellow ambient modes, rolling it turns it black.
With a Teensy at 72 MHz and data to strips at 10 MHz, updating 200 LEDs takes 1.5 ms. The display aims to update every 2 milliseconds, leaving 0.5 milliseconds to get new the next column of image data or generate the next frame of a pattern, or do other stuff. This is plenty.
I wanted a strong visual identity to take to Burning Man – something very New Zealand. I also wanted bright colours and not too much complexity, coz the Teensy is pretty tight on memory. Luckily, NZ was having a competition to replace our flag, which provided a source of bold designs that look great in a palette of only 16 colours. (Unluckily, the proposed replacement flag is crap so we might be sticking with the original.)
Some are 256 colours, most are 16 colour for two pixels per byte. Images are 32, 48, or 72 pixels high.
So I rounded up a heap from the flag competition, along with lots of traditional tuktuku and kowhaiwhai patterns, and some mandala drawn by Spiralishis, and some mathematical designs sourced from Wikipedia. Some of these were tweaked in Gimp with conversion to polar co-ordinates, shifted, and faded brightness in the rectangular originals to give round and even brightness in when displayed by the rotating Mitochondrion.
Like this, original on left, what it looks like on right:
The images are processed from GIFs by a hacked version of Philip Burgess’ LED poi converter. It takes a directory full of images and writes out a header file full of image data and palettes, which then gets picked up by the compile.
And of course, we had to include Laser Kiwi. It’s the People’s Choice!
I’ll admit to being quite pleased with this version.