LED Cube Finalized and at the 2017 Hackaday Superconference
In preparation for the Hackaday Superconference I rebuilt the LED Cube using brighter LEDs. The ones I had were alright, but I wanted a bit more intensity so the cube would be visible even if it's outside in the daytime. I also wanted to rebuild the cube's structure to look nicer using a bending and soldering jig rather than the hand bend everything and eyeball the soldering method I used the first time around.
Sin City Scenic had recently purchased a CNC so I decided to use that to make my jig. Because of how small some of the features I wanted to cut were, specifically the ridge at the bottom of the LEDs, I had to buy 1/16" and 1/32" ball end mills. These things are tiny! I modeled the jig in Fusion 360 so I could generate the CAM operations and the G code for the CNC. I drew a single plane of the cube with 16 LEDs that would lay flat on the jig. This will allow me to do the most difficult bending and soldering in the jig. This still leaves me soldering the planes together freehand, but there are a lot fewer connections there. I wanted to paint the bottom of the LEDs to prevent bleed through so I added 64 6mm holes on the bottom side to hold the LEDs vertically.
I had never used tooling this small in a CNC so I was very conservative with my feeds and speeds. Because of that, the total cycle time for the jig was something like 90 minutes (did I mention 1/32" end mills are small!). My first attempt required some small adjustments, but the second jig came out great. After I was happy with my jig I went home for a long night of soldering at the kitchen table.
Below you can see the bottom of the LEDs blacked out. Really any color would have worked. All I was trying to do there was preventing the light coming from a lower LED and shining through the LED above it. I have seen that problem pop up on cubes before and it ruins the effect. In the picture you can also see the detail in the 3D adaptive path that I cut into the jig. No wonder it took so long.
Once the paint had dried I started by assembling the common cathode verticals. At this point I left all of the structural wire long. I knew that I would end up bending the bottom leads to deadbug onto the chip, but in the end all of the extra lead length also helped with freehand soldering the planes into a cube because I could use .1" protoboard to hold the top and the bottom at the same distance apart.
Once I got all of the verticals made, I began to assemble them into planes. I did not make the same mistake as the first time and I immediately opened up my Hackaday.io project log for the cube and followed all of the plane diagrams I drew to make soldering easier. This made things go much faster and also resulted in much cleaner bends.
With the planes assembled I used a large breadboard to space the bottom leads out evenly and then used a spare piece of protoboard to match that spacing with the upper leads. This whole situation was so ridiculous that I didn't take a picture of it and just soldered everything up as quickly as I could. With that the cube was assembled and it was time to finish the animations.
I waited as long as I could to commit to the final animations to give me as much time as possible to think up new ones. Honestly, this kind of creativity is really hard for me so I don't think I came up with the best set of animations, but I ended up with about a 75 second sequence of the following seven animations:
- Fade - All LEDs on at the same intensity and fading in and out. Just basically showing off the 4-bit dimming is working.
- Line Rider - Runs around the outer edge of each plane. No real reason or explanation, I just thought it looked cool.
- Shift - Rotates an image around the cube. This uses a flag in the function I wrote so that the pixels closer to the axis of rotation rotate at the same radial speed as the pixels farther away. I chose a 4 pixel x 4 pixel representation of the Hackaday logo for the image. If anyone noticed it they didn't mention it to me.
- Fireworks - Kind of a stock animation for cubes where a single line goes up quickly and then grows as it falls slowly. Looks better with more pixels, but I wasn't too upset with it at 4x4x4.
- HaD Shift - Quickly shifting the Hackaday logo through the planes and then dimming to 0 before switching axes and doing it again. Simple, easy, but probably my favorite of the animations.
- Lightning - Jagged lines that blink quickly and then go away. I have some doubt that anyone looked at this and thought of lightning, but it did a decent job of showing a fast cycle time.
- Snake - The cube plays a game of snake. I used a canned sequence so it is more showing a game than playing one, but it's not a complicated algorithm. With more time it could actually play a randomly generated game. The question would be how good do you want the algorithm to be vs. how long the game lasts on average.
With my animations done (Or more realistically after running out of time on them) it was time for final assembly. I flashed my final program onto 3 different ATmega328 chip, 1 to use and 2 backups, and then hot glued it to the back of a 9 volt battery holder. I needed a 80Ω current limiting resistor for each pin, but for structural purposes I used four 330Ω resistors twisted together in parallel (330/4 = 82.5). This made it much harder for the leads to move around and short against each other. I then soldered a 5V voltage regulator directly onto the leads of the battery holder. After that I jumpered over Vdd and ground and put a 1kΩ pullup between the 5V input and the reset pin. With that construction was complete and the cube was ready for the 2017 Hackaday Superconference.
Honestly I never would have guessed how popular the cube would be at the conference. Everyone had seen similar cubes online, but few had built one. This made it so everyone instinctively knew that something was different with my cube because of the physical simplicity from the Charlieplexing. The cube took the wear and tear of the conference surprisingly well too. It got bent around from time to time, usually because of something silly I did, but nothing broke until the very end when we were walking to a post conference event and a lead broke off the DIP package (I was able to easily fix it once I got home). The long leads running from the cube to the battery also made for a great arm hole for carrying so the cube didn't annoy me as I walked around with it all day and night during the conference.
It was my first time at the Supercon so I was a bit overwhelmed. I was so busy enjoying myself and trying to suck up as much knowledge and inspiration as possible that I completely forgot to take any pictures. It's a great time and anyone with even a passing interest in hardware should go next year. I managed to find a few things from other conference goers that included my cube though.
At the post conference party Robert Wolff asked me to do a 60 second demo and explanation. My voice is raspy and the cube has a broken lead, but I still like the video. You can see it below.
I have so many ideas for improving for next time. Multiple MCUs in driving parallel arrays, addressable LEDs, a mix of traditional layers and Charlieplexing. I'm not sure if I will build a cube for next year's conference, but I'm certainly going to build something to bring along!
I am documenting this project on Hackaday.io as well. Large advancements in the work are posted here, but for smaller, closer to day-to-day updates look at the project over on Hackaday. The source code is also available in Github repository as well.