led-clock

July 2022

return to index

My initial idea was to make a very large ring, just over a meter in diameter, and in that ring would be embedded addressable RGB string lights sometimes referred to as RGB pixels. This ring would then be hung flat on a white wall, and rather than using painted on numbers or lines like a traditional clock, it would instead light up an LED corresponding to each clock hands position. This opens the doors for neat on-the-hour light effects and visualizations, making it at the very least an interesting conversation piece.

Early on I had decided to stick with using string lights instead of strip lights. I find the strips to be thin and fragile, and once they are soldered and installed in a project they tend to be difficult to recover if needed. I like the strings, although they are a bit more expensive. They have coated wires with potted LEDs making them water-proof-enough. I knew that even if everything failed on this project I would still have some great lights I could reuse at the end of the day. A close up of one of the LEDs is shown below.

I set out printing some test fits to see if I could get a good friction fit, meaning I could avoid using glue, bolts, or some other means of holding each LED in place. I started with a flat section which was an easy print standing up, then moved onto the curved pieces. The curved pieces needed to be printed on their side to avoid supports, causing them to be a little rough on the insides. This actually helped with the friction fit as the rough parts gripped onto the rubbery LED casing nicely.

I then calculated the final ring size based on the wall it was going on and the minimum space between LEDs. Using that information I was able to divide the ring into pieces that would fit on my printer. If you scroll back up to the first image you can see the result of those efforts. At this point I realized that not only are this many LEDs and plastic parts surprisingly heavy, but after trying to glue two plastic parts together I realized a lot of surface prep work would need to be done to get a good enough glue joint.

I could have pushed forward and modified the design to either slide, snap, or bolt together but the logistics of hanging the final product dissuaded me. Instead I pivoted to a more conventional sized clock. My thought was that it could be a nice compact bookshelf style clock. I decided on a cube shaped case where all of the power supply and microcontroller nonsense would be packed inside, and a display of concentric LEDs would be displayed on the front. Below are the results - and it is much heavier than it looks.

Although this design ended up working pretty well, I was unhappy with the offset of LEDs moving from the center to the edge of the case. I also realized at this point that I could pack more LEDs into a grid and then emulate a circular display if I wanted to. It was also around this point that I decided some nice big buttons would probably be useful for setting the time, or changing visualization modes. And so onto the next version.

These cases max out the print volume on my printer to the point where I had to move the brim closer to the print just to get it to fit on the bed at all. The full depth LED holes required mostly perimeter printing and no infill, causing it to take forever to print and quite a bit of plastic. The next photo shows the classic arcade buttons I decided to go with, along with a hefty 5V power supply. The back of the case is designed to slide into the front with a friction fit, giving it a nice clean finished look (ideally).

Now it looks pretty wild back here, but really it's mostly just LED string and 4 button wires plus a common ground. During this project I discovered these wonderful clamping wire nuts (grey with orange clamps). I was originally skeptical of their holding strength, but they have definitely won me over as my goto splicing tool.

I played around with a few power supply arrangements, but with each LED required about 50ma each, and 196 LEDs total, thats a whopping 9.8 amps at 5 volts. I considered that not all LEDs would be fully lit at all times and careful coding could prevent too much current draw... But knowing myself I would pick it up off the shelf one day and immediately turn all the LEDs on full to test them probably damaging something in the process. So I went with a beefy power supply and parked it at an angle so it would actually fit inside a case I could print. The astute reader is probably noticing that PLA melts at a very low temperature, and high current power supply generate quite a bit of heat when they are running, plus this case has zero ventilation. I was aware of this even at the design phase but decided to just go for it and iterate later.

Compared to the circular design, the grid was much more satisfying, and much easier to program. The indexing of the LEDs actually goes back and forth in a zig zag since the wires wouldn't stretch back to the start of each row from the end. I got around this by making a mapping array so they could be indexed in a sane way for making visualizations.

This time around I tried using a label maker to mark each wire, but the adhesive on the labels left a lot to be desired, coming apart after only a few minutes. I still haven't found a nice clean easy way to tag and label that I really like, some day I guess.

I am however very pleased with this arduino nano screw terminal board. I kinda hate working with breadboards, I'm big and clumsy and constantly knocking jumpers wires out or shorting them together. The screw terminals give all the same advantages and work great in a finished project as a permanent fixture, the two M2.5 mounting holes are a nice touch as well. The arduino nano is also my goto MCU for anything that isn't an input device, which is where the arduino pro micro is a great choice instead

Looking back now this would have been the perfect situation for a strip light instead of a string, I could have just laid it flat on the inner curve where the LEDs protrude in this picture. I might try that again sometime in the future for an installation piece. You can also see some early friction fit tests in the background in black here.

I suppose I should include some gifs. First up is a quick test of the fastled library just to make sure the LEDs were actually working, actually 5V LEDs, and responding to color codes and timing correctly.

Next I tested color dimming and some simple code to make a trail.

Finally a simple display test for what could be hour (red), minute(green), and second (blue) hands all moving in sync with each other. In a final deployment the blue would tick slowly and the green and red would seem to almost not move at all. The time could be read just like a normal clock where lights at the top implies 12 and lights at the bottom implies 6, etc.

Even though I plan to dismantle this project there was some valuable takeaways