HoloLamp - Between display concept & physics class

A clock that encodes two dimensions into a multispectral PoV stripe - put on diffraction filter glasses to decode it

Similar projects worth following
The idea emerged while playing around with diffraction foil on New Year's Eve. Besides multiplying fireworks a diffraction grating decomposes light by wavelengths, allowing you to perceive the spectral composition. But what if you could control a light source so the interference will magically decompress a colorful line of light into a rainbowy display floating in the air?

RGB stripes are unfortunately not enough to display 5x7 pixel characters because each color translates into one row of pixels. So let's add hyper red, amber, turquoise and hyper blue for a sufficient resolution of 7 colors. HrRAGTBHb is already painful enough to spell out, so I didn't want to wire up more than one set of LEDs and opted for a PoV setup instead. A spinning reflector with two exit holes redirects the light to avoid balancing and powering rapidly rotating electronics.


I was curious to experience how it looks and find out if it works. It might also be a slightly more engaging alternative/addition to showcasing the uncertainty principle with two razor blades and a laser.

How did it turn out?

Better than expected. The display is easy to read and just floats in midair. The darker it is, the better it works, but as you can see in the video it is also visible in a brightly lit room.


The device is divided into two units: The top consists of the brushless motor+driver and the rotating reflector, the bottom contains the LEDs and their control. Because of the modularity the multispectral LED module can be used for other experiments or as fancy lighting. Since I wasn't sure if the concept is feasible I planned to repurpose it by printing a diffuser and turning it into an overengineered lamp.

An acrylic tube provides a rigid yet "invisible" connection between the units and some safety for/against the reflector. It sits on three red silicone foil pieces on each end for additional noise/vibration reduction. The reflector has a ball bearing that provides alignment and stability. It slides on a brass pin in the base. The space between LED-unit and reflector is shaped to prevent light bleed. The reflector has two slits to synchronize the light pulses via a light barrier. Because the reflector has two holes it display two updates per rotation, effectively halving the required rotational speed.

Most parts are 3D-printed and optimized to reduce supports to a minimum. I used some cheap black PETG and white "Kexcelled K5-shade: light shield" PETG with a very high content of pigment. The pigment content reflects the light very well, but be aware that it prints worse than vanilla PETG, has worse mechanical properties and also stains the build-plate. I had to print a "cleaning-layer" to get it out of the textured build plate of our MK3S because it stained the following prints. A standard nozzle might also clog, but I printed everything with 0.6mm diameter and had no issues. At first I was a bit disappointed with the print quality, but the texture and artifacts on the overhang turned out to look pretty interesting and somewhat aligned with the weird design. In case you were wondering: Yes, the reflector is oval and not circular. That looks way cooler, still has low drag and most importantly fits on a 250x210 build plate while maximizing the display size.


A raspberry gets the time/content via wifi and encodes 2D images into bytes that are sent to an ATmega via serial. Every byte represents one column. I want to add a yellow LED at some point to increase the height to 8 pixels. The width is set to 42, but can be altered easily. The mega's integrated operational amplifier is connected to the IR receiver to sync up the timer when the reflectors slit passes the detector. It pushes the pixel columns to LED drivers that are set to 700mA. The bottom base plate is aluminum and serves as a heatsink for the LEDs. The top is steel because it was cheaper and heavier (=more vibration dampening).

The BLDC motor is driven by a generic controller board. Since the setup is sensor-less it struggles a bit with the high rotational inertia of the reflector. But the pretty septagonal speed knob with exposed gyroid infill almost makes you forget about it.


The diffraction grating glasses are 3D-cinema glasses that were refitted with 13.5k lines/mm dual axis diffraction grating foil (sounds way more expensive than it is). The fewer lines a filter has, the more the image will get stretched and the closer you will have to get to the device. Both sides have to be aligned perfectly parallel to create a proper stereoscopic experience. It would be even better to print glasses that hold one continuous piece of foil instead. For the videos I just held some foil in front of the camera.

Want to DIY?

Here are some more considerations if you would like to make something...

Read more »

Adobe Portable Document Format - 100.48 kB - 06/11/2021 at 17:32


Adobe Portable Document Format - 80.44 kB - 06/11/2021 at 17:32


sch - 429.91 kB - 06/11/2021 at 15:16


brd - 103.83 kB - 06/11/2021 at 15:16


py - 2.30 kB - 06/11/2021 at 15:04


View all 13 files

  • 1 × < 1 spool of black PETG
  • 1 × < 1 spool of white PETG (Kexcelled K5-shade: light shield)
  • 1 × 13.5k lines/mm dual axis diffraction grating foil
  • 8 × M8x25mm screws
  • 1 × 5010 360KV High Torque Brushless Motors

View all 31 components

  • holographic microverse generator

    Matthias Kampa09/09/2021 at 10:08 0 comments

    Here's a video of the device as "holographic microverse generator" without commentary or sound.

    It runs vanilla game of life, but the slightly distorted display lets some humanoid shapes and mysterious stories evolve in its little toroidal universe (with a bit of imagination). It's a 42x7 cell grid that wraps around the edges.

    Inspired by the holographic principle, postulating a dual representation of our universe with one less dimension. Enjoy the automata borealis!

  • video

    Matthias Kampa06/17/2021 at 08:48 0 comments

View all 2 project logs

  • 1

    Print the STLs. The reflectors have to be white and the light trap black, but you can go wild on all the other parts. You can go fast (.2 to .3mm height, .6mm nozzle) on all the parts except the big reflector. Reduce the layer height to .15 to .2 for the latter. This is also the only part that requires some support material. "Supports on build plate only". Use a cylindrical modifiers to constrain the support to parts that wont be visible later. You can see the supports I used in green below (I sliced at .3 and it turned out a bit rough). Use 3-4 walls and your favorite infill. The big reflector should have rectilinar. Remove the bottom layers of the knob if you would like to expose the infill.

    If you use different LEDs the reflector might not be compatible, but it's also not necessary. In that case you will also have to drill different holes for mounting them.

  • 2

    Drill out the holes in the metal plates using a 10mm drill for the M8 screws to allow for some tolerance. Preferably with a drill-press, but not necessarily. You can take the measurements from the PDF stencil or print them out, but double-check your print settings and the paper because your printer might scale them. I almost fell for that one. The steel plate only needs the big holes and an additional hole for the power cable (place where you think it looks best).

    Use a saw and a fine round metal file to carve out the slit from the acrylic tube where the knob is. Use the print to make sure it fits. Rather too loose than too tight. The knob will cover it anyway. The PDF stencil can help you with the initial shape.

    Cut out some roughly 3x2cm pieces from the silicone sheet. They will go between the big prints and metal plates. Let them stick out a bit. You can trim them to the outside of the metal plates with a knife. They are optional but do provide better dampening.

  • 3

    I wont describe any mains wiring. Use a safe power source and good practice. If you are not 100% certain you know what you are doing use external units to provide 12V for the motor and 5V for the LEDs. If you use an external source you will have to add a capacitor to reduce noise on the LED board. Anything >1000µF is sufficient.

    Pull the motor cables through the hole in the print and connect them to the driver board. Attach a power cable to the motor driver and pull it through the steel plate (or use an internal PSU according to the previous remark).

    You can now assemble the reflector unit! Start by mounting the motor to the motor holder with 30mm M3 screws. Test the motor: The driver should be set to spin it counter-clockwise (looking at the rotating part of the motor).  Use the screws that came with the motor to mount the driver board (or some other ~10mm M3 screws). Screw in the M8 bolts and don't forget to insert the silicone strips before tightening. Attach the big reflector using the 60mm M3 screws. Plop the ball bearing into the hole.

    The PCB is made for easy etching and assembly. Yes, messy, but we urgently wanted to find out if the concept works. Use the picture and schematic if you don't know what goes where or ask if anything is unclear. Put the phototransistor in the bottom hole of the print that connects to the slit of the light barrier. Connect the IR LED and push it in the hole of the 3D print (flat backside). If it doesn't fit use a reamer, file or a drill to widen it. Use hot-glue if anything is loose. The crystal oscillator is optional. Change the frequency in the code if you don't use a crystal or a different frequency than 14745600Hz.

    Solder wires to the LED boards and pull the wires through the metal plate. You can pay attention to which color goes where, but I just randomly connected them to the drivers and changed the pins in software later. Pull the LED and light barrier wires through the holes in the aluminum plate. Mount the LEDs using the reflector. Thermal paste recommended but optional. Mount the light trap and bottom cover using M8 bolts. (And don't forget some more silicone pieces.)

    Mount the raspberry pi with screws and the board with hot glue. Solder the LED wires to the pads next to the drivers. The photoresistor needs to be connected to 5V with the long pin. Short one goes to the pad next to the mega where you also see its pull-down to ground. Connect RX to the raspberry's TX. Connect any part of the ground plane and the thick 5V rail to the power source and connect the raspberry to it as well.

    Flash code via Atmel studio and an ISP programmer. I provided a HEX file, but recommend using the ASM so you can flip the pins of the LEDs or alter it for your set of colors.

    Run the python code on the raspberry or let it run automatically on boot.

    Use the knob to start the motor. Only go as fast as you need to for a flicker-free display. I went all the way and didn't break anything, but don't risk it. It's obviously a prototype device, so no guarantees. Adjust the potentiometer to set the trigger level for the light barrier.

    The device also works upside-down, but you will have to change the direction of rotation or the python code.

    That should be it. Enjoy! And please send me a picture. - Especially if you added a yellow LED.

View all 3 instructions

Enjoy this project?



dearuserhron wrote 06/17/2021 at 21:32 point

The most unusual display I ever seen.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates