Floating Image Lamp
A custom lamp to create a floating image effect, featuring edge-lit laser cut acrylic, a custom 3D-printed enclosure, and custom CircuitPython code
A custom lamp to create a floating image effect, featuring edge-lit laser cut acrylic, a custom 3D-printed enclosure, and custom CircuitPython code
This is a custom lamp to create a floating image effect, featuring edge-lit laser cut acrylic, a custom 3D-printed enclosure, and custom CircuitPython code running on a Trinket M0 microcontroller to control a NeoPixel LED strip.
The enclosure required a fair bit of design work in OpenSCAD, since there weren’t any existing models to mount the Trinket M0 or this specific NeoPixel strip. The first iteration used a top-down photo of the parts with a metric ruler for comparison. With a little bit of math to calculate pixels per mm, one can calculate roughly how far each mounting hole is from the edge. This first design worked, but with some minor tweaks the holes eventually lined up perfectly.
Speaking of holes, the OpenSCAD code allows the user to switch between 3D printed pegs or holes for M2 screws. The screw holes are sized so that the M2 screw essentially taps the hole itself when it goes in.
The enclosure is designed in three parts. The base has the walls, a mounting pad for the Trinket M0, and a hole for the USB port for power (and programming the Trinket). This layer has supports along the middle and edges to allow the middle layer to be inserted without blocking the wiring.
The middle layer contains a mounting pad for the Neopixel strip, a border to be mounted to the lower layer, and holes for the wires to pass through.
Finally, the top layer fits inside the walls of the bottom layer, and it has an opening for the laser-engraved clear acrylic to fit inside. The recipient requested the ability to switch out the floating images, so the acrylic is removable. We were exploring a way to have the top screwed into walls of the lower layer so it could be easily modified in the future if needed, but we had to deliver the project and it was glued on. The images can still be changed at will, and the Trinket can still be reprogrammed from the USB slot, so some customization is still available.
This was fairly straightforward. Since both the Trinket M0 and Neopixel strip were from Adafruit, it was a simple matter to take one of their examples and modify it to work. We created two versions. One used full brightness from the LEDs and smoothly transitioned between random colors. Since the recipient wanted a Pokemon-themed nightlight, however, we had to come back with a second version. The nightlight version used far lower lighting and stayed on one color to not interfere with sleep cycles.
We achieved the best results using an engraved photo rendering of the image and a vector to define the cutout. By aligning those two layers on the Glowforge Pro laser cutter, we were able to reliably create the edge-lit floating image effect. The GitHub repository includes a simple cutout test, a torus, and Charizard.