An infinity mirror is an optical illusion that makes a single row of lights look like countless rows of lights, receding into the void forever. It's created by placing a one-way mirror over a second mirror with lights in-between. The lights turn the upper mirror transparent from the outside. Inside, the two mirrored surfaces reflect each other in ever decreasing images. The lights appear to be marching in perspective towards a vanishing point, which gives them the feeling of depth. 

This guide will show you how to build an infinity mirror box lid and light it two different ways:

  • a Mini Box that uses press-on Circuit Sticker LEDs
  • an Animated Box that uses a strip of NeoPixels controlled by an Adafruit Gemma M0 programmed in beginner-friendly MakeCode.

Both versions can be used to store treasures after the candy is gone and are kid-friendly. The Animated Box uses AAA batteries (rather than LiPo) and a Gemma M0 microcontroller that's inexpensive enough to build in permanently.

Try one or both!

Parts List -- Mini Box Version

Large roll of quarter-inch wide copper tape.
Copper tape can be an interesting addition to your toolbox. The tape itself is made of thin pure copper so its extremely flexible and can take on nearly any shape. You can easily...
In Stock
Front shot of CR2032 Lithium Coin Cell Battery upright.
A perfect match for our sew-able coin cell holder. This non-rechargeable coin cell is CR2032 sized: 20mm diameter, 3.2mm thick. It...
In Stock

Parts List -- Animated Version

Pink polished fingers holding a Adafruit GEMMA M0 - Miniature wearable electronic platform.
The Adafruit Gemma M0 is a super small microcontroller board, with just enough built-in to create many simple projects. It may look small and cute: round, about the...
Out of Stock
Adafruit NeoPixel LED 0.5 meter Strip with Alligator Clips wired to Circuit Playground, lighting up rainbow
Adding glowy color to your projects has never been easier: no more soldering or stripping wires, clip 'em on and glow! This Adafruit NeoPixel LED Strip with Alligator...
In Stock
USB cable - USB A to Micro-B - 3 foot long
This here is your standard A to micro-B USB cable, for USB 1.1 or 2.0. Perfect for connecting a PC to your Metro, Feather, Raspberry Pi or other dev-board or...
In Stock
Front angled shot of 3 x AAA battery holder with on-off switch and 2-pin JST PH connector.
This battery holder connects 3 AAA batteries together in series for powering all kinds of projects. We spec'd these out because the box is slim, and 3 AAA's add up to about...
In Stock
Angled shot of 3 PKcell AAA batteries.
Battery power for your portable project! These batteries are good quality at a good price, and work fantastic with any of the kits or projects in the shop that use AAA's. This is a...
In Stock

Suggested Materials List -- Both Versions

If you don't have any of the items below, you can probably substitute from crafts materials you have on hand.

For either box:

  • heart-shaped candy box with thin flat top:
    • Mini Box -- about 4 inches wide, holding three pieces of chocolate
    • Animated Box -- about 7 inches wide, holding eight pieces of chocolate
  • black cardstock or poster board
  • one-way mirror window film (such as this) -- sold in large rolls, but you only need two pieces about the size of your box
  • glue stick
  • clear tape
  • scrap cardboard, cardstock, or paper

For the Animated Box:

  • mini zip ties
  • clear removable adhesive mini-squares (such as these) to make it easier to attach and detach the microcontroller and battery pack
  • shiny red cardboard (such as this) to extend the lid

First, you need to prepare the box lid for the Infinity Mirror. Then go to the page for your version to see how to add the electronics.

For this step you only need the lid and the heart-shaped paper liner. Set aside the bottom of the box with the candy in a safe place (away from pets and chocolate fiends).

Make the Inner Mirror

Trace around the paper liner onto the black cardstock. Cut about 1/4 inch larger than the paper liner -- you want the black heart to fit snugly into the lid.

Cut a piece of the mirrored window film a little larger than the heart.

Put the black heart on a piece of scrap paper. Use a glue stick to apply a thin layer of glue all around the edge of the heart.

Place the window film over the glued heart. Starting at one edge, smooth the film down as much as possible. The smoother your film, the better your infinity mirror.

Let dry, then trim the window film to the exact size of the black heart.

You'll need to cut more pieces the same size as the inner mirror, so trace it onto a piece of scrap paper as a template.

Make the One-Way Outer Mirror

For the outer mirror, you will cut an opening in the lid and cover it with another piece of window film.

Children may need adult help cutting the opening.

Mark the Opening

Turn the lid over. On the inside, draw the outline of the opening you need to cut for your version (see below).

  • For the Mini Box: Draw an outline about 1/2 inch from the sides of the box.
  • (Optional) For the Animated Version: To partially hide the ends of the NeoPixel strip, prepare the strip as described here, then trace around it to determine the edges of your opening. (After testing the prototype, I don't think they would be very visible anyway.)


Cut the Opening

For both versions, use a craft knife or scissors to cut out the opening along the lines you drew.

Cut and Attach the Outer Mirror Window Film

Cut another piece of window film the same size as the inner mirror.

Use the glue stick to apply glue to the inside lip around the opening in the lid.

Carefully place the window film heart over the glued opening, smoothing as much as possible.

Next, go to the section that tells you how to add the electronics for your version!

For the Mini Box, you'll be making a parallel circuit with Chibitronics Circuit Stickers, conductive copper tape, and a 3-volt coin battery. The press-on LEDs make this project a snap! I chose to use seven red LEDs, but you can mix and match as you please (up to the limits of the battery).

Prepare the Box

You need to make an opening at the point of the heart to bring the circuit to the outside. If there's tape holding it together, you may be able to unpeel it and use it to hold the battery. If you can't, just slit the point open.

Prepare the Copper Tape

Unroll enough copper tape to fit around the entire inside of the box, plus about 3 inches. Cut the tape down the middle to make two thinner strips.

You will attach these to the inside of the box to make a circuit that carries electricity from the battery to the LEDs.

Attach the Tape

Starting a tiny bit away from the open point of the heart, attach one piece of tape to inside of the box, close to the window film. Go all the way around, smoothing as you go.

At the other side of the open point, bring the remaining tape around to the outside of the box. Make sure the tape is firmly attached all the way around.

Then starting a little bit from the edge where you just ended, take the second piece of tape and go around in the opposite direction, about 1/4 inch above the first piece. Again, bring the end of the tape out the opening at the point.

This time, keep going right onto the tape you unpeeled from the point of the box. Or, if needed, make a new flap from a piece of clear or decorative tape. 

Attach the Circuit Stickers

Decide where you want to put your Circuit Stickers. Then attach them, pointy (negative) side up, to the copper tape lines. Make sure the ends of the stickers are touching the lines of tape underneath. Press firmly to make a good electrical connection.

Attach the Battery

If the unpeeled tape at the point of the heart is still sticky, press the battery right onto it so the negative side is touching the copper tape. The positive (+) side of the battery should be facing out. If needed, hold the battery on with clear or decorative tape. Make sure to leave the battery uncovered where it is supposed to touch the copper tape.

Press the battery against the outside of the box, so that the positive side is touching the other copper tape. The LEDs should light up! If not, check that all the components are making a good connection to the circuit.

When everything's working, use clear tape to hold the battery in place. Cut a thin strip of cardstock and slide it underneath the battery when you want to turn the lights off.

Finish the Lid

Make Supports for the Inner Mirror

Cut some small rectangles from scrap cardboard, a little higher than the Circuit Stickers. Use the glue stick to attach them right over the copper tape, between the LEDs. Let dry.

Insert the Inner Mirror

Rest the inner mirror on top of the supports. Use small pieces of clear or decorative tape around the edge of the lid to hold the mirror in place.

Turn the LEDs on and flip the lid over to see the infinity mirror in action! If the image is distorted, make sure the window film and the inner mirror are flat and as smooth as possible.

The lid should still fit over the candy in the bottom of the box -- although it will sit a little higher than before you squeezed an infinite number of lights into it.

The Animated Box is a little more complicated than the Mini Box, but the added wow factor when the lights sparkle and flash are worth it.

It uses a NeoPixel strip, which contains 30 individually-addressable LEDs that can change color and turn on and off, one by one. The strip also has alligator clip connectors, which means you can take all the components apart and reuse them in other projects later if you choose.

The following pages show you how to prepare the box, assemble the electronics, and program them in MakeCode.

The NeoPixel Strip comes in a protective plastic sheathing. When you curve it around to fit inside the heart, it makes a handy ledge to rest the inner mirror on. However -- fun fact! -- glue won't stick to the silicone it is made out of.

Instead, to keep the NeoPixel strip in place, you will use mini zip-ties to connect it to itself, and to attach strips of cardstock which you can then glue to the inside of the box.

Fasten the Ends Together

With the LEDs facing inwards, pinch the ends of the strip together to make a heart shape. Wrap a mini zip-tie around the ends at a spot where it is not covering any LEDs and pull tightly. Snip off the extra with scissors.

Attach Glue Tabs

Add a few more zip ties around the strip where you would like to secure it to the inside of the box. Before you tighten it all the way, insert a thin strip of cardstock under the zip tie on the outside of the light strip.

To attach a strip of cardstock to the indent at the top of the heart, take a zip tie and fasten it loosely to make a loop. Then take another zip tie and use it to attach the loop above the ends of the LED strip, as shown.

Insert a strip of cardstock into the second zip-tie, then tighten both zip ties to hold the cardstock in place.

If you want to trace around your NeoPixel strip to mark the opening in the lid, do that now.

Connect the NeoPixel Strip to the Gemma M0 Board

Before you glue your NeoPixel strip in place, connect it to the microcontroller board so you can test out your code as you write it.

The NeoPixel Strip has three alligator clip wires you can attach right to the pins (numbered holes) on the Gemma M0.

  • The black wire is ground. Attach it to the pin marked GND.
  • The white wire is the signal. This connects to the pin you will program to tell the lights what to do. For this project, attach it to pin D1.
  • The red wire is power. Attach it to the pin marked VOUT (which stands for Voltage Output).

Connect the Battery Holder

The battery holder can plug right into the board using the JST connector. Leave it turned off until you're ready to attach the whole thing to the candy box. The Gemma can run off the computer while you're programming it.

Now go to the next page to find out how to program your board and lights in MakeCode!

It's simple to program an animated infinity mirror on the Gemma M0 in Microsoft MakeCode! Just open and edit the sample code below and add to or change the light display as you wish. Or, create your own program using the strip code blocks, found in the LIGHT category. You can preview it in the simulator before you download it to your Gemma. There's more information about using MakeCode on the Gemma M0 guide.

To download the file to the board, connect the Gemma M0 to your computer with the USB cable. Press the reset button and it will go into bootloader mode. That means it's ready to receive code.

If it is your first time running MakeCode on your Gemma board, or if you have previously installed Arduino or CircuitPython, you may need to double press the reset button to get your board into bootloader mode.

Click download on the MakeCode page and save the file. It will have a .uf2 extension.

Then find the drive on your computer labeled GEMMABOOT. Drag and drop (or copy and paste) the program into Gemma! You'll know the code was downloaded when the onboard pixel changes to violet.

While the Gemma is still connected to the computer, check how the MakeCode runs on the actual NeoPixel strip so you can make any adjustments.

Next, you'll attach the lights and the Gemma and finish the box!

Optional: To make your box even fancier, use a Circuit Playground Express instead of a Gemma and add sensors and music to your infinity mirror! If you're new to using MakeCode with the CPX, check out the Adafruit MakeCode Guide.

It's time to glue the NeoPixel strip to the lid, and the rest of the electronics to the inner mirror.

Finish Attaching the Neopixel Strip

Figure out where the wires need to go through the inner mirror. Mark the spot and cut a small opening.

Then insert the NeoPixel strip into the lid. Glue the cardstock tabs to the sides to hold the lights in place.

Crafts sticks wedged in between the strip and the lid will hold the tabs in place while they dry.

Attach the Gemma M0 and the Battery Holder to the Inner Mirror

To attach the Gemma to the back of the inner mirror, stack a few reusable adhesive squares on the back of the board. This will give the board enough height to allow for the alligator clips.

Use more squares to attach the battery pack, with the on/off switch facing up.

The squares should make it easier to remove the battery holder to put in fresh batteries. Remove it slowly to minimize tears to the cardstock.

When the glue holding the NeoPixel strip to the lid is dry, carefully pull the alligator clips through the hole in the inner mirror. Then insert the inner mirror into the lid. Let it rest on the edge of the light strip sheathing.

Glue small rectangles of cardboard above the inner mirror to hold it in place. You can still slide it out if you need to.

Unlike the Mini Box, the electronics for the Animated Box fills almost the entire lid. So you'll need to build a connector that covers the electronics nicely and gives the lid enough extra height to fit over the candy. I used shiny red cardboard that matched the box.

Build the Lid Connector

Cut out another heart that fits snugly inside the box. Then cut two strips long enough to reach halfway around the box. They should be wide enough to cover the sides when the lid (with the electronics inside) is on the box.

Tape the two long strips together. You need to shape them to fit around the box (the part with the candy in it). With the taped ends inside the indent at the top of the heart, bend the cardboard strips around the outside of the box. Trim where they meet at the point and tape those ends together.

Insert the cardboard heart into the new sides, about halfway down, with the "wrong" side facing out. Use small pieces of tape around the entire heart to connect it to the new sides.

Flip the lid connector over so the "right" side is facing up. Place it over the lid. Find the battery pack on/off switch by pressing down on the cardboard. Cut a small opening for the switch.

Last Touches

Hold the lid and the connector together as you flip them over and slide them over the bottom of the box.

Add any finishing touches your box needs. I cut out a smaller heart to cover the tab I made to hide the ends of the NeoPixel strip.

You're done! Enjoy the infinite light-up chocolate pleasures you've created, or share them with your favorite Valentine.

This guide was first published on Feb 05, 2019. It was last updated on Feb 05, 2019.