This clock is based on the light-up X-Ray Rabbid character offered as a happy meal toy from McD’s back in 2015, with the base from a Power Ranger toy (no, I don’t eat happy meals and yes, I have kids.)
However, this particular Rabbid toy saw service as a pinewood derby car “Rabbid Racer” for a few years. The manual LED switch was replaced by an ATTiny blinky LED to light up the octopus seen in the “x-ray” machine.
For this project the octopus image is replaced with a 2-color OLED display, and driven by an Arduino nano, keeping time with a DS3231 real-time clock module.
The Rabbid was previously forced open, breaking some of the glued joints, but nothing to prevent reassembly.
A replacement lens made out of thin plastic is masked with flat black and fits snugly inside the x-ray machine. It gets the glue gun treatment, and the display is glued as well.
The 7 wires are fed through a hole drilled in the feet.
The base is trimmed to accommodate the nano and clock module, and a small bracket fabbed from thin aluminum holds the nano in place.
A MDF spacer covers the opening on the base, and another small aluminum bracket locates the screws fastening the Rabbid to the base.
No Rabbid is complete without a plunger, so I carved a 5/8” dowel on a drill press and glued on a 1/8” handle. Who needs a 3-D printer?
I wrote a custom LCD driver for font/image management and display (meaning a lot of PROGMEM silliness), and reused RTC components from a previous project so I can get the temperature from the DS3231.
Much time was spent fiddling with different fonts and font sizes to get things arranged on the small LCD. TDF is great for generating only the glyphs you need, instead of the whole set. This helps keep memory usage down, especially since a clock uses only digits and a ‘:’ .
Animation sprites were found online and manually (er, painstakingly) converted to small bitmaps. TDF converts them to C data code. Now you're spriting like it's 1983!
The service menu uses the USB serial port to easily set time, and to help debug.
Ok, I added code and schematic. There's no custom libraries used. The code contains unused features and some test artifacts.