Make a Programmable RGB LED Infinity Mirror With Arduino




Introduction: Make a Programmable RGB LED Infinity Mirror With Arduino

About: I like pretty lights.

This Instructable shows you how to make a framed one-way mirror that reflects individually programmable RGB LEDs into a mirror. This creates the illusion of an infinite tunnel of pretty lights with an on/off power switch.

I want to make this but it looks intimidating!

I started this project knowing nothing about electronics. I did have some simple coding experience but you can copy/paste code to get the effect you see above. I also am really bad at soldering and scared of burning myself so don't let my long Instructable overwhelm you–there are so many resources and references available online! Basically, I'm a total sucker for mesmerizing lights and was willing to spend some extra money and make my brain hurt a little to make something rad to share with other people–worth it.

Is there an easier or different way to do this?

Yes! The LEDs could be remote controlled (no Arduino), not controlled at all ("non-addressable"), or manually controlled with potentiometers on a breadboard. Instead of the one-way mirror, you could use plexiglass or acrylic with window tint instead. Or you could put stuff inside the frame which would also reflect infinitely.

What is specific/unique about this infinity mirror vs. others?

  • Arduino controlled (customizable code for the LEDs)
  • Outside access to the USB A-B port of the Arduino and power supply jack
  • An actual one-way mirror instead of acrylic + one-way vinyl tint
  • Custom frame
  • Pretty big infinity mirror (more lights, bigger power supply needed, bigger/heavier in general, more expensive). Overall, I paid ~$320 for everything with an extra meter of LEDs and other small parts left over.

Step 1: Tools, Materials, Electronics, Vendors


  • Soldering iron
  • Lead-free solder
  • Electrical tape
  • Scissors
  • Measuring tape
  • Wire strippers*
  • Rubber insulated clamp*
  • Vice gripsº
  • Hammerº
  • Black markerº
  • Mirror cleaner + microfiber towelº
  • Double sided tapeº
  • Drill + drill bitsº
  • 8 ankle bracketsº
  • Rubber bumperº
  • Offset clipº
  • Screwsº
  • Wood glueº
  • Chiselº
  • Wooden spacersº (about .45" x .45" x at most as long as the frame itself)
  • Wood miter/trimmerº
  • 1 can of Rustoleum 2X Satin Black spray paintº

*These weren't necessary but they can be helpful

ºThese were for the build and assembly of the frame. I negotiated the pricing of the frame with the frame store to also be able to use their space, tools, and materials and get help for this step.


The dimensions of the mirrors will define your LED strip length which impacts how many power supply amps (A) and capacitor farads (uF) you'll need. LEDs and power supplies can get pricey too. You can play around with dimensions here:

  • One-way mirror (dimensions matching the mirror)

I was blessed by the LED gods and found one sized at 25x35" in a thrift store for $14 after I was quoted $174 by a local glass shop for the same thing. A cheap alternative is plexiglass with a one-way mirror tint.

  • Mirror

I got a 24x30" mirror for free from a local framing shop after I was quoted $68 by a local glass shop for the same thing.

  • Frame

I paid $140 for the build, materials, and assembly of the frame and $5 for the spray paint at the hardware store. The frame includes the moulding (4 sides), wooden spacers + vinyl taped flat ankle bracket to secure the mirrors, LED strip, and arduino + capacitor, plywood boards, screws, etc. If you want to hang the mirror (note: this WILL be heavy), you'll need two steel plate hangers with a steel cable with end loops


ª To get these, I purchased the Arduino Budget Pack ($35) so I could also spend some time experimenting and get a better understanding of circuits before moving onto the LED strips, have variable length wires with connectors, etc.

º This is not necessary–I wanted to be able to turn on/off the lights from this switch instead of plugging the power supply in/out of the wall.

Deciding Between Vendors

Definitely explore different electronics vendors and check your needs. Sparkfun had the smoothest interface/user experience. Adafruit had the most robust product search. Ebay, Aliexpress, and other shops had products at about the same cost or cheaper...

I ended up picking Adafruit for everything because:

  • Faster delivery from NYC as I'm on the East Coast
  • Everything would arrive together at the same time
  • Single delivery fee
  • Cost would eventually be about same even if splitting between different vendors and considering single vs. separate delivery fees (no more than $10-15 difference)

Step 2: Wiring the Circuit


These articles helped me avoid that mistake:

1. Cut the LED strip to your desired length.

Because my mirrors are 24x30", I needed (2 x 24") + (2 x 30") =108" or 2.75 meters of strip. Along the strip, you can see solid straight white lines with a scissors symbol next to it–you can use the scissors to cut along any of these lines.

2. Connect the capacitor to the terminal block.

This step protects the LED strip from a sudden onrush of current (source). Connect the positive (longer) lead of the capacitor to the positive terminal of the green terminal block and the negative (shorter) lead of the capacitor to the negative side of the green terminal block. The negative lead is also indicated by the light blue strip on the side of the capacitor with large "–" symbols along it.

3. Connect ground between the Arduino, LED strip, and power.

This involves two connections. I used a jumper wire with connectors to connect Arduino's ground pin (next to Arduino's 5V pin) to the negative side of the terminal block. The other connection was made up of two pieces:

A) The tail wire of the female JST SM In-line power wire connector soldered onto the LED strip's ground. A photo of my very DIY soldering set up is attached but also an example video is available here. Make sure that the LED strip's arrows are pointing AWAY from this wire.

B) A jumper wire's end in the corresponding head pin of the connector mentioned in 2A and the other end in the negative side of the green terminal block.

4. Connect +5V.

I soldered a jumper wire on the +5V part of the LED strip (again, LED strip's arrows should be pointing AWAY from this wire), connecting the other end to the positive part of the green terminal block.

5. Connect data.

I soldered the other tail wire of the female JST SM In-line power wire connector to Din of the LED strip. Then, I put one end of a jumper wire into the corresponding head pin of the connector and the other end in the positive part of the green terminal block.

6. Add power.

Plug the USB cable into the Arduino and the USB port of a computer. Plug in the in-line power switch and power supply into the green terminal block DC adapter and into a wall outlet. The Arduino "ON" LED should light up! Exciting.

Now if we want the LEDs to light up, we need to get some code onto the Arduino...

Step 3: Coding the Arduino


1. Install Arduino's Software.

Go to This application is where you'll be making code, checking it for errors, and uploading it to the Arduino:

2. Add Adafruit's NeoPixel Library.

Go to Click the green "Clone or download" button to the right. Click on "Download ZIP".

3. Follow instructions.

From this tutorial, I followed video instructions to test my circuit (neglect the one in the video) and strip: but try adjusting the NUMPIXELS value according to the number of pixels on your strip, change the color, and try to turn off the lights in the same way to get a handle of concepts like:

When the TX and RX LEDs light up on the board, TX means there's data transferring from the Arduino to the computer and RX means there's data being received by the Arduino from the computer. Rad!


I decided to use the rainbow cycle code from here:


  • Make sure you've uploaded the code you want on the Arduino.
  • Turn off the power from the power supply.
  • Remove the USB cable.
  • Put one end of a new jumper wire into the +5V power pin of the Arduino and the other end into the positive part of the green terminal block.
  • Turn on your power supply. Your LED strip should be running the code without a computer. Voilà!

Step 4: Building the Frame

The frame is made of 2 pieces of wood that are secured together with pocket screws. Here are its details:

  • 24 x 30"
  • With rabbets wide enough for a 1" gap between 1/8" thick one-way mirror and 1/4" thick mirror + 12.5mm LED strip with weatherproof silicone casing
  • Two coats of Rust-oleum's 2X Satin Black spray paint with overnight drying

Step 5: Assembling Everything Together

1. Spray paint the frame and spacers

  • Two coats needed
  • Let the frame dry overnight. Keep note of the minimum temperature needed to ensure drying and setting of the paint

2. Insert the one-way mirror. Wipe it down with window cleaner and a microfiber towel

4. Use wood glue to set wooden spacers on top of the one-way mirror.

5. Double stick tape the LED strip along the frame.

  • The wires are kept in the corner of the frame.
  • Chisel a little divot in the frame to hide the wires. This allows the next row of spacers and the mirror (#6 and #7 below) to fit the frame.

6. Use wood glue again to set more spacers on top of the LED strip.

  • I used a black marker to make sure all exposed sides of the wooden spacers were black.

7. Place the mirror on top.

8. Place a piece of plywood on the mirror and secure with ankle brackets bent at 90º.

  • I marked the exact same position across 8 ankle brackets and used a vice grip and hammer to bend them.
  • Screw in 2 ankle brackets per side of the frame to keep the plywood in place.

9. Secure the arduino and capacitor with wooden spacers glued to the plywood board, a screwed in offset clip with a rubber bumper, and a screwed in black vinyl taped non-bent ankle bracket.

  • Photo attached.

10. Place the second piece of plywood board and screw it into the frame.

Step 6: Concluding Thoughts

Possible Improvements

Right now, the Arduino is just running the rainbow cycle which was something I copy/pasted from somebody else. Some other cool options could be:

  • Have the code cycle through different modes
  • Write code that corresponds with a song
  • Write code and adjust electronics to make it responsive to different frequencies, beats, or touch

Thanks for reading!

I tried my best to make this Instructable as clear as possible so if something wasn't so, was oversimplified, or was wrong, drop a comment for me below!

Infinite thanks to the friends, friend of a friend, local shop owners, Youtube video makers, various article writers, other Instructables, Adafruit Customer Support, Sparkfun, LED lighting hut, Fritzing, and Arduino folks for helping me get through this project. It was really not possible without all the support I received and free resources available online!

LED Contest

Participated in the
LED Contest

Be the First to Share


    • Puzzles Speed Challenge

      Puzzles Speed Challenge
    • "Can't Touch This" Family Contest

      "Can't Touch This" Family Contest
    • CNC Contest 2020

      CNC Contest 2020

    8 Discussions


    3 years ago

    Will you be uploading a video when its finished and show how its looking? I would really like to see one :)

    Nice Project


    Reply 3 years ago

    It's done!!


    Reply 3 years ago

    Definitely! The frame is in the process of being built–I'm currently waiting on the frame store. I'd love to finish soon and submit it to the Circuit Contest (Nov 21st deadline).


    3 years ago

    You should include a resistor on the signal line, as close to the LED strip as possible -- to protect your signal pin. Between 220 and 470 ohm.

    Also, for software, I HIGHLY recommend looking into FastLED.

    Great work!


    Reply 3 years ago

    Thanks, allangee!

    I heard NeoPixel takes up less RAM than FastLED. Any reason why FastLED would be the better choice?

    What's interesting is I purchased the Arduino Budget Pack thinking I would need resistors. Previously, my circuit used a breadboard and three 100 Ohm resistors in a series.

    However, after looking at a photo of my circuit Adafruit customer support said I didn't need the resistors because the signal wire is short. If the signal wire was longer than a foot or so, the signal is more likely to "ring" or "echo" due to the reflections from the end of the wire so the resistors would help suppress that... Thoughts?


    Reply 3 years ago

    Sounds like you're already beyond my electronic knowledge! :)


    3 years ago

    This looks awesome! Great job :)


    Reply 3 years ago

    Thank you!!!