The functionality of this project is quite simple: when left in the default "Alarm mode" the diffused LED panel will turn brighter and brighter over a set period of time each morning (when the functionality is armed) to prepare my body for waking up. It uses an Arduino Nano and an Adafruit DS3231 RTC module to achieve this. The Arduino Nano uses PWM to control the LEDs through a ULN2803 transistor array (admittedly, the PWM resolution isn't quite as good as I would have liked. In hindsight, I probably should have used a PCA9685 LED driver in tandem with the ULN, as we do in our ferrofluid display, to increase this resolution), and the DS3231 takes care of time tracking (also through power outages) and alarms. To use the Zom-B-Gone as a normal reading lamp, a highly satisfying LED-lit push-button can be used to set the display in "override mode". When in this mode the lamp can be dimmed through a rotary encoder.  

A few compromises were made in this design to avoid unnecessary complexity. For example, there is no way to change the alarm settings without reflashing the MCU. There is enough input devices to do this though, but it would be necessary to add a small LCD or seven segment display to make the UX usable. 

We made a custom PCB for this project, but that's hardly necessary (bar maybe the ULN2803 transistor array, all other parts could easily be mounted on a proto-board for much cheaper). 


Project video


Open Source files and project details:

Code and CAD: Github repo:

Third party: 

Arduino Nano:
Adafruit DS3231 RTC:

Rotary Encoder Module (affiliate): 
Pushbutton w/ LED (affiliate):


The concept of repurposing LCD backlighting sections for light diffusion has been done by DIY Perks in several of his videos, check them out if you're curious: