Introduction: How to Make Infinity Mirror Heart With Arduino and RGB Leds

About: A Interaction Designer with Industrial Design and EE background. Maker since a kid. Super grateful to new technology and online communities made everything possible!

Once in a party, me and the wife saw an infinity mirror, and she was fascinated by the look and kept saying I want one! A good husband always listens and remembers, so I decided to build one for her as a valentines day's gift.

Step 1: Parts

I wouldn't want to make another regular infinity mirror. So the idea is to have a heart shape, so I picked some 3/16 thick acrylic laying around for laser cutting . It would be better to use glass but I have no idea how to cut them.

As for the electronics, I planned to build it with RGB LEDs for fancier effects, Neopixels come into mind, but also you can use WS2812 strips. To control the LEDs, I picked Arduino Nano for the smaller footprint. I also found a power supply and a power plug laying around.

Another essential is the one-way mirror film, to make the front and back pieces reflective.

Some copper tape is also used for cosmetics.

Here are the links for the parts I used:

LED Strip:
Adafruit Neopixel


WS2812 Strip:



Arduino Nano:



Copper foil tape:


One way mirror film:


Step 2: How It Works

The infinity mirrors are having simple constructions, light source sandwiched between 2 mirrored surface, the front mirror need to be one-way, so the light source can shine through.

In my design, the LED strip is also held between a series of inner and out walls.

Step 3: Preparing All the Acrylic Pieces

There are total 8 acrylic pieces, 3 inner walls, 3 outer walls, the front and the back.


For the outer walls, it's simply laser cut with no further processes. To blend the LEDs better without any hot spots, the inner walls need a different treatment. In the first design, I had them too thin that even after bead blasting, it still shows the hot spots. So I ended up with a thicker design.

Front face

I want this face to hide the LED strip behind so I tried to use the film on acrylic sheet as a mask. Basically you need to cut a line with really low laser power so you can peel off for bead blasting or spray painting. Extra masking tape is applied before the cut, to make it survive the blasting better.

Back face

I spray painted one side of the back piece, so it covers up all the electronics behind.

We also need to apply the one way mirror film to both the front and back faces. There are tons of tutorial online to make it perfect flat and bubble free.(Not in my case :D)

Step 4: Putting Together

Now it's the time to put everything together.

Stack all the walls up, and then we can fold the LED strip inside. Make sure all the wires are on the tip of the heart so they can come out of the back face.

We still need to bind all the layers together. I was trying to use the copper tape but it is too thin that creates a lot of cracks. I ended up using double sided tape below the copper tape substrate (Not peeling off the copper tape), then apply this thickened tape along the side.

Step 5: 3D Print the Rest of the Parts

Then I modeled out 3 pieces that can be 3D printed.

A holder piece that fixes the Arduino Nano and the power port.

A shell that enclose all the electronics

A little stand.

One thing special I did this time is modeling out a press fit feature. On each of the 4 pillars on the holder piece, there is a shallow groove. On the shell to the opposite, a matching feature with a tiny lip. So that we could easily open it up in the future.

Then I primed and sanded the shell for a couple rounds, then spray painted a copper color to match the side.

The 3D model and laser vector is attached here.

Step 6: Electronic Connections

The electronics is quite simple. Connect the power to Vin and GND, and connect the Neopixel's 3 pin to 5V, GND and a digital pin. That's it!

I made a tutorial for how to use Neopixel or WS2812 LED Strips here for your reference

There are still plenty pins left for future expansions like adding mics, speakers, batteries, etc.

Step 7: Programing

As for programming, I didn't spend too much time customizing the animation, the DemoReel100 in the Fast LED library looks flashy already and the wife definitely loves it!

Step 8: That's It!

Hope you like my project and please don't hesitate to leave a comment if you have any suggestions or questions!

I will be super grateful if you can subscribe to my youtube channel here:

Thanks for reading and happy making!

DISCLAIMER: The part list contains affiliate links, which means that if you click on one of the product links, I’ll receive a small commission with no extra cost to you. This help support my effort and allows me to continue to make videos like this. Thank you for the support!

Arduino Contest 2019

Participated in the
Arduino Contest 2019