Building a device that paints on photoluminescent surfaces

I wanted to build a device that automatically paints on a surface coated with photoluminescent material – so I did. In essence i build a motorized LED strip that sweeps across a glow-in-the-dark panel, selectively "charging" spots on it with light to paint an image. Here's how it came together.

Inspiration and similar things

I am not quite sure where I got the idea from. I believe it was something that floated around in my head for a long time, and after gaining first experience in mechanical design by building my plotter, I probably was able to tackle this thing, and so I did.

It is also completely possible that I saw LOOK MUM NO COMPUTER's video on building a glow-in-the-dark ETCH-A-SKETCH 8 years ago and somehow developed the idea based on that. I tried to see if someone had built the exact same thing I built, but luckily nothing turned up making the design I will explain later a completely ✨ORIGINAL IDEA ✨.

Similar ideas exist. Mainly using a laser on a gimbal to write on a photoluminescent surface. Gjis van Bons light writer was the first art installation that I found in that regard. Similar DIY projects with documented hardware designs can also be found on Hackaday (Project 1, Project 2). I also quite liked the idea of this "Epheremal Printer" that uses a sort of stencil to expose the photoluminescent material (via. hackster.io).

The Design

The mechanical design is pretty straightforward. For linear motion I utilized a linear rail that I ordered on Banggood 10 years ago and never found a use for, mounted a stepper motor on it and used a rack and pinion mechanism to move the carriage.

I used a 28BYJ-48, which has the lowest torque imaginable but is still enough to make the mechanism work (most of the time). It came with a driver board that allowed me to connect it directly and easily to an Arduino UNO. I also put an endstop I had lying around on one end of the linear rail.

I designed the rack and the pinion gear in Fusion 360 using some generators. The generator for the pinion gear drew a pitch circle, but the generator for the rack didn't draw such a thing, so I lined the two up by feel.

The rack and pinion mechanism with mounted servo motor and endstop on the far right of the picture
The rack and pinion mechanism with mounted servo motor and endstop on the far right of the picture

The surface I want to draw on using light is a panel of acrylic I had cut at the hardware store. It is covered in Oralux 9300 Foil, Orafols photoluminescent foil offering. I mounted the panel to a larger wooden board, which I also used to mount the motion mechanics.

Lastly, I build the painting device. I used a strip of individual addressable WS2812B LEDs with three shades of white, put them into an enclosure and mounted that to the carriage on the linear rail. I cut the strip to a length of 8 LEDs. The LEDs are aimed at the board with the photoluminescent foil and can be used to "charge it up" selectively. The motion system can now be used to freely move the stick with the LEDs above the board (in one axis). The WS2812B LEDs were also connected to the Arduino UNO.

The whole aperatus from the front
The whole aperatus from the front

Software on the Arduino

I vibe coded a firmware for the Arduino that allowed me to perform several actions over a serial interface:

  • Home the system - The servo slowly moves the carriage until the endstop is hit

  • Move the carriage - The servo moves the carriage to a given position relative to the endstop.

  • Turn on the LEDs - Takes an 8-bit integer as a parameter that is interpreted as a bitmask. Turns on the LEDs accordingly.

  • Set global brightness - Sets the brightness all LEDs have when turned on. Mainly used for testing, so I didn't get blinded by the lights (🎵).

The Arduino stepper library was used to interface with the stepper motor and FastLED to interface with the WS2812B LEDs.

Software on the Host

On my PC I also vibe coded a little Python application. I defined a pattern I wanted to have painted on the surface, and the application controlled the LEDs and the motor accordingly via the Arduino and the Serial Interface.

Did it work?

It did, but not great. Attached you see a few pictures of things the device drew. The primary issue is that the light sources are not bright enough to charge up the foil fast and bright. Another issue is that the servo is really weak and also overheats (I believe) after 30 minutes of use and doesn't work at all anymore before cooling down again.

A smiley
A smiley
Drawing the smiley
Drawing the smiley
Hello World
Hello World

Now what

I really like the idea of having this sort of reverse flatbed scanner painting fading images. I think it's great that this doesn't use the classic plotter approach that most of the previously discussed projects use, but a novel method using multiple LEDs. I hope to pursue this idea farther in the future.

For solving the issues with the weak servo, I will probably use a classic setup with a timing belt and a Nema 17 stepper motor found in every other 3D printer.

For solving the issues with the weak exposure, I thought about building a custom light stick with UV-A light, because I read online that this is the most efficient way to charge up photoluminescent material.

If i can solve these issues i would also like to build a larger installation.

So all in all the project was a promising start but revealed a few issues that need to be solved if one wants to use this in a real art installation or as a complicated display device.