I had created clocks prior to this with LED arrays, but I wasn’t satisfied with the sharp points of light the individual LEDs produced. I wanted a diffuser. I had the idea kicking around for a while, with prototypes of enclosures for digits lit by individual LEDs, but the diffusion wasn’t great and the wiring would have been a mess. Eventually, I thought of using a Neopixel strip as the light source. That way, I would get full color, and all the LEDs could be connected in one big series string.
Once I had the idea to use Neopixel strips, I started with a single segment of a 7-segment digit, and experimented with different diffusion methods. I started complex, but eventually found that simply giving the light some space to spread out, and a thin surface on which to project was plenty. I also designed a simple clip that would hold a section of Neopixel strip onto the segment.
After nailing down the diffusion approach and the clip, I printed a single digit. I thought it would look nice to have the digit segments pop-out, so I printed them each as separate pieces. It turned out to look better with everything flat, so I redid it.
After landing on a diffuser design I was satisfied with, I printed all 4 digits, as well as a simplified diffuser for the divider lights. I printed a back case piece for each divider to allow them to stand on a flat surface, wired them all up with cut up parts of a USB cable running between the digits, wired up a rotary encoder for input, slapped all of the electronics on a proto-board and tucked them in the first digit, and updated the software to allow full configuration, including setting the time on the real time clock module, and changing the start colors, end colors and direction of the gradient.
The clock uses an Arduino Pro Mini clone, a real time clock module, and a 144-per-meter 5050 LED ‘Neopixel’ strip, all from eBay. It uses a single clickable rotary encoder for input, and a resistor and capacitor to help drive the LEDs, and a USB breakout board to receive power. All of the other pieces were 3D printed.
The software puts each LED segment on the face of the clock into a grid via a 2D array. It then loops through the grid, skipping the blank spots, and shifting the color it’s outputting as it travels through the array, checking if the current pixel should be lit by referencing a separate array for the number it’s supposed to be displaying. It works well, and makes it easy to understand how a pixel arrives at a particular state by looking at the code.
My dad’s birthday was coming up when the clock was nearing completion, so I decided it would make a good gift. It now lives in his living room on a custom-designed shelf.