DISCO! We hope you enjoyed the over-the-top X2 Time Ball video as much as we enjoyed making it! Getting this finished in time for New Year’s Eve meant the progress blog posts would have to wait, so we’ll be returning to a few details now after the fact, and continuing as future design plans are ironed out…
As explained in an earlier post, we settled on an icosahedron shape as a sanity-preserving measure. Every single LED — 120 of them — must be installed in a specific sequence, and using a higher-order polyhedron would require following a very complex map for their locations. The icosahedron is simpler with 20 identical triangular faces, and the same wiring sequence from one to the next (with alternate rows rotated 180 degrees):
This is just the installation order for the LEDs; wiring for power was also explained in a prior post. There are additional wires (not shown here) that are joined to power distribution strips only after all the LEDs are pressed into place.
The polyhedron faces were laser-cut from mirrored acrylic. To make the wiring process less error-prone, the order of connections was drawn on the back side of each face with a permanent marker (identical for every face, so this goes fairly quickly):
Pairs of faces were then joined up and are loosely joined with cable ties (there’s a specific alignment: note how the “in” and “out” wires always come and go from the sides); this produces 10 identical diamond shapes. The 10 diamonds were then laid out to match the wiring diagram above, and similarly joined with cable ties, producing a complete 2D map:
Starting from the top-left triangle and following the wiring sequence exactly, each LED pixel (beginning from the microcontroller end) is then pressed into place. This involves a lot of twisting and turning in order to avoid tangles in the wire, which is why the power leads should not be joined to anything yet (the strand needs to turn freely at one end):
Above: one triangle down, 19 to go. Below: all LEDs installed, power not yet connected:
Loosely rolling everything up into a ball at this point revealed a problem. I’d been obsessed with the idea that all of the electronics (including the microcontroller, XBee, power distribution bars and protective plastic covers — a roughly fist-sized wad of stuff) should fit inside the ball, so only a single power cable would protrude. But when folded up, the loops of wire between pixels didn’t allow enough space at the core. This required going through and doubling every loop back on itself:
The power cord would do double-duty as a means of suspending the ball. This may or may not actually be a good idea — I can’t help but imagine there’s some kind of electrical code regulation against doing this, but then IKEA lamps seem to do it all the time. So, purely as an experiment for now, an extra plastic piece locks neatly over the ferrite core at the end of the power cable. This is fed through what will be the top vertex of the polyhedron, where five triangles meet at a point. When it’s all cinched up, the cord won’t slip back out through the hole.
The flat icosahedron map is then loosely rolled up like a burrito, with more cable ties holding it in place. The bottom vertex is closed, then all of the power leads are joined to the distribution bars, the electronics package is screwed together and placed inside, and the top vertex is closed around the power cord.
Three or four passes are then made around all of the cable ties, gradually transforming the shape from a chaotic molten glop into a neatly-ordered polyhedron…albeit a bristly polyhedron at this point:
Two tools can be helpful for finishing. The first, a cable tie gun, is not essential but can really improve the final cinching down of each piece, to get every cable tie uniformly snug. The second is an ordinary nail clipper, to cut each cable tie flush (wire cutters don’t cut them quite flush, resulting in hundreds of sharp little plastic points and a disco ball that’s very painful to handle!).
The microcontroller inside had previously been programmed with the LEDstream sketch — essentially the same as used by Adalight and Adavision, with just a small change to read from the XBee module rather than the USB port. No code had been written for the ball at this point, but the Plasma demo from Adavision would at least show if the ball was receiving data. After plugging it in and firing up the code, it works!
Some ideas didn’t pan out as hoped. Remember those 5 extra LEDs from the wiring diagram? The project used five LED strands, which come in lengths of 25 pixels each (125 pixels total), while the icosahedreon needed only 120 (20 faces x 6 pixels per face). The extra five could have been trimmed off and used in some mini-project, but instead I had the idea to use these to illuminate the interior of the ball, which would then be visible through Adafruit logo-shaped cutouts at each vertex:
In practice, the internal LEDs didn’t provide uniform lighting. They tended to get smooshed up against one face or another, and would throw off the color of the outside LEDs in that specific area. So the code now leaves these LEDs turned off.
“Bronze mirror” wasn’t the best choice of materials; it tends to photograph as almost black. Future iterations will use traditional “clear” mirror.
XBee also didn’t perform as well as hoped, but that’s a post for another day. In the meantime, here’s a dinosaur holding up a disco ball: