
My 1 year old son loves pushing buttons! (And not just the metaphorical ones.) So I decided to hack together a quick set of buttons that light up his name for his button pressing needs.
The idea came to me when I was printing this open stick model to develop an accessible android controller for a friend that had lost the use of his hands.
After the initial idea, the build was pretty straight forward.
First, I hacked the top of the OSM model in TinkerCAD to have light boxes for the LEDs and I moved the original button holes to be centered under each light box.

And then, in BambuLabs Studio I created a text object that fits into the light boxes and turned it into a multi-filament print.

I ordered some WS2812B LEDs and I used the left over arcade buttons from my previous project. Finally, I used an Arduino nano and a rechargeable battery that were in my box-o-parts from bygone projects to round out the hardware.
The circuit is about as simple as it gets. Connect the buttons in the usual mannerand then connect the WS2812B in a chain. The buttons and their internal LEDs are wired up together and use the Arudino's internal pull-up. Similar to as shown in this post.
That just left the software!
The full platform IO project is available on my github. It uses the FastLED library to control the WS2812B's and the DebounceEvent library for event based button debouncing. It also supports sleep after 1 minute of no button presses and plays a rainbow animation if all the letters are lit up at once.

Final note on power consumption, after turning on the arduino's sleep functionality the board is still sitting at around 4-5 mA idle power draw. I'm sure this could be improved, if I were to replace the arduino's internal pull-ups with bigger eternal resistors and there are probably 5 other things I could improve on the power side. But I haven't had time to look into further. Maybe if I get sick of charging it I'll do a full power audit.