Infinity Mirror and Table (With Casual Tools)




About: Mostly, I study chemistry but sometimes I work wood. Also, the game.

Hey everyone,

A while ago I came upon this instructable and was immediately taken with it and wanted to make my own, but couldn't get my hands on 1) One-way plexiglass mirror nor 2) A CNC router. After a little bit of searching around, I came up with a more casual way of making this table with more casual tools and materials.

There are already several projects for infinity tables out there, but mine has a slightly different approach from what I saw before so I figured I'd contribute! This design allows for a customisable size table, with extremely thin borders that enhance greatly the optical illusion by removing a lot of the bulkiness of wood and other materials.

Welcome to this instructable, I hope you enjoy it!

Aaaaaand let's get started.

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: (Casual) Tools and (Common) Materials

The total cost of the project was around $200 including all parts except for the Arduino which I already had. Although I spent a week or so building this, it would really nicely fit into a week-end if you have all the parts ready.


Router with circular attachment (Or a jigsaw and some extra skill)

Scrollsaw (or a small handheld hacksaw)

Soldering iron

Dremel or handheld drill with small drilling bits

Knife (Opinels are always a must!)

Pencils, ruler, markers...


One circular mirror, 60cm/1.9ft diameter, from a local furniture store

A square sheet of non colored plexiglass/transparent pvc at least 65*65cm, 4mm thick

Adhesive semi-reflective film, big enough to cover the plexiglass sheet (from Amazon)

A roll of metal lining for windows

USB type B cable for powering the arduino

Adapter from wall outlet to USB (5/5.5V, around 200/300 mA should be enough) for the testing phase

Micro USB cable to recharge the arduino shield

Soldering wire


Electrical wire

Good quality double-sided tape

From the Adafruit store

- 1 Arduino Uno

- Adafruit NeoPixel Digital RGB LED Strip - Black 60 LED - BLACK - 2 meters


The Pocket Arduino for portable projects (Instructable to come)

Step 2: Making the Semi-reflective Mirror

The plexiglass will usually come with protective films on both sides, I advise to leave those on as long as you can for they are really useful. I chose 4 millimetres thickness because it was the thinnest (therefore less expensive one) I could find that offered enough resistance to bending.

Using either a router with a circular cutting guide or a jigsaw, cut out a circle of plexiglass the same size of the mirror you found. I used double-sided tape to stick a piece of wood in the middle of my plexiglass sheet and used this as a support for the router's guide as I wanted to avoid any marking of the surface. Tip : go fast with the router as it can easily eat all the plexiglass you can feed it and going slow will end up in the melting of the plastic chips and could jam you router bit.

Next, you need to apply the semi-reflective film on the circle you just cut out. This is a really tricky step and I have a lot of respect for the people who do it on cars I mean this is an evil version of Saran Wrap it literally sticks to ANYTHING especially itself and except what you are trying to apply it onto.

Here's how I proceeded after wasting a couple meters of it and a lot of frustration.

1) Place 4 pieces of double sided tape on a table such that you can unroll the film on there and it holds in place (Make sure you have the good side of the roll facing up)

2) Remove the transparent film protecting the silver adhesive

3) Remove the film from one side of the plexiglass

4) Spray water everywhere. And I mean everywhere. On the film, on the plexiglass, on the cat, on the ceiling

5) Carefully place the plexiglass on the film

6) Mess up forty times and repeat steps 1 through 5

7) Cut the excess film with a sharp blade and push the air bubbles out gently with a credit card while everything is still wet from your frantic water spraying.

8) Let dry for a day and you're done!

Step 3: Circling With Metal and LEDs

I used the roll of thin metal I had and made a circle that fits closely around the plexiglass. I cut the metal a couple centimeters longer than the exact size and superglued the overlapping sections (sorry I don't have a picture of that!) I let it cure for a couple of hours.

Then, I put sections of double-sided tape on the inside of the metal band to attach the LEDs (a lot of helpful guides about those LED strips can be found on the Adafruit website)

I cut the LED strip to the right size and stuck it inside and then drilled 3 holes in a diagonal line for the ground, signal and positive wires.

Step 4: Duino the Code ?

Yes we do. Here it is.

This code is a mix of diverse codes I found free of copyright on the internet to give LED strips some cool effects and the code from this instructable. You are welcome to use it and modify it!

You will need the Neopixel libraries from Adafruit which can be found here. Place those in your Arduino libraries folder and don't forget to include them at the beginning of your code if you write a new one. Useful tips for the use of strips can be found here.

This code will make your table cycle through a couple of different patterns and then you can make up your own :)

The only thing you need to make sure of is that the number of LEDs in the code matches the number of LEDs on your strip (#define NUMPIXELS n // I had 112 pixels)

Step 5: Supporting Bits and Assembly

I placed the glass mirror on a table and centered the metal circle on it. I then cut tiny pieces of plexiglass from the leftovers of the circle with the scroll saw. They are about a centimetre wide and just the right height so that when resting on them, the plexiglass is flush with the metal band. I made a dozen of those to hold the plexiglass panel firmly and glued them both on the mirror and the metal band but not to the plexiglass so I could still get to the LEDs.

I then placed the plexiglass circle back on the supports and put some weight on it while the glue cured for a couple of hours.

Step 6: Closing It Up and Turning It On!

Now you can remove the second protective film on the plexiglass and put it all together.

I placed it on a round table of the same diameter to make an infinity table but you can hang it on a wall or use it any way you can think of ! Although I don't think it'd stay on well on one of your car's rims. Please try for science and email me a video.

Now that you are done, all you have to do is upload the code to the Arduino and plug it in an outlet! There you have it, a cool table.

Step 7: Going Off the Grid!

Great, now we have a table but we would like to avoid the need for a wall outlet at all times. This is where the Portable battery powered Arduino box comes in place! (Instructable to come soon.) It is a little box that carries an arduino, a battery and battery shield. It connects the Arduino pins to the project via a USB cable so you can use the Portable box for different projects, as a plug and play power source

The only thing to do if you decide to power it with a battery is to diminish the intensity of the LEDs (I never use 100% anyway, it's too bright and will lower the life expectancy of the LED strip.).

Well, this is where this instructable ends! Thanks for reading it until the end if you did, and see you soon :)

I'd like to thank my grandparents who got me some of the materials as a Christmas present and my cousin for the pictures

Be the First to Share


    • Instrument Contest

      Instrument Contest
    • Make it Glow Contest

      Make it Glow Contest
    • STEM Contest

      STEM Contest

    57 Discussions


    2 years ago

    Je l'avais pas vu passé ce projet là, super stylé!!


    3 years ago

    can I make a mirror using plexiglass and aluminum foil instead of using solid mirror. I am afraid it may break after couple of months...

    1 reply

    Reply 3 years ago

    Amazon sells Acrylic mirror sheets


    3 years ago

    The code isn't showing up can anyone repost it?

    1 reply

    Reply 3 years ago

    here you go

    #include <Adafruit_NeoPixel.h>

    #define PINdroite 1

    #define STRIPSIZE 112

    // Parameter 1 = number of pixels in strip

    // Parameter 2 = pin number (most are valid)

    // Parameter 3 = pixel type flags, add together as needed:

    // NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)

    // NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)

    // NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)

    // NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)

    Adafruit_NeoPixel strip = Adafruit_NeoPixel(STRIPSIZE, PINdroite, NEO_GRB + NEO_KHZ800);

    void setup() {


    strip.setBrightness(100); // Lower brightness and save eyeballs OR NOT; // Initialize all pixels to 'off'


    void loop() {

    // Some example procedures showing how to display to the pixels:


    colorWipe(strip.Color(0,0,0), 100); // Black


    // Fill the dots one after the other with a color

    void colorWipe(uint32_t c, uint8_t wait) {

    for(uint16_t i=0; i<strip.numPixels(); i++) {

    strip.setPixelColor(i, c);;




    // Slightly different, this makes the rainbow equally distributed throughout

    void rainbowCycle(uint8_t wait) {

    uint16_t i, j;

    for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel

    for(i=0; i< strip.numPixels(); i++) {

    strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));





    // Input a value 0 to 255 to get a color value.

    // The colours are a transition r - g - b - back to r.

    uint32_t Wheel(byte WheelPos) {

    if(WheelPos < 85) {

    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

    } else if(WheelPos < 170) {

    WheelPos -= 85;

    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);

    } else {

    WheelPos -= 170;

    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);




    * ^ ^ ^

    * ~~~~~ ColorWave ~~~~~

    * V V V


    void colorWave(uint8_t wait) {

    int i, j, stripsize, cycle;

    float ang, rsin, gsin, bsin, offset;

    static int tick = 0;

    stripsize = strip.numPixels();

    cycle = stripsize * 25; // times around the circle...

    while (++tick % cycle) {

    offset = map2PI(tick);

    for (i = 0; i < stripsize; i++) {

    ang = map2PI(i) - offset;

    rsin = sin(ang);

    gsin = sin(2.0 * ang / 3.0 + map2PI(int(stripsize/6)));

    bsin = sin(4.0 * ang / 5.0 + map2PI(int(stripsize/3)));

    strip.setPixelColor(i, strip.Color(trigScale(rsin), trigScale(gsin), trigScale(bsin)));






    * Scale a value returned from a trig function to a byte value.

    * [-1, +1] -> [0, 254]

    * Note that we ignore the possible value of 255, for efficiency,

    * and because nobody will be able to differentiate between the

    * brightness levels of 254 and 255.


    byte trigScale(float val) {

    val += 1.0; // move range to [0.0, 2.0]

    val *= 127.0; // move range to [0.0, 254.0]

    return int(val) & 255;



    * Map an integer so that [0, striplength] -> [0, 2PI]


    float map2PI(int i) {

    return PI*2.0*float(i) / float(strip.numPixels());



    4 years ago on Step 7

    Just looked at Microduino site -- that may make even a smaller package, and you could use a smart phone to control it.

    2 replies
    Kurt E. Clothierjscanlan

    Reply 3 years ago

    Nice idea. I've been thinking about doing something like this - will probably use BLE and a custom Android app. No Arduino, of course, because... gross.


    3 years ago

    How long does the battery last on something like this? I plan on making the LEDs sync to music, and I'm worried that if it's portable I won't get much play time out of it.

    Great job!

    2 replies

    Reply 3 years ago

    Hey ! Are you planning on making an infinity porTable ? The battery life totally depends on the number of LEDs and on the Ah of your battery... To be on the safe side, you could go with a model/drone lithium battery from hobbyking or radio shack maybe. Be careful to not burn all your LEDs and arduino at once though ! Good luck


    Reply 3 years ago

    Hi, thanks for the response. I'm planning on making an infinity table, but the lights and the effects are going to be synced to music (I'll be reading a music signal and using the frequencies I pick out to set colors and such). Hopefully it'll turn out cool!

    I was planning on using 180 LEDs and powering them with 3.7V LiPo batteries with a capacity between 5Ah and 10Ah, but it seems like you used a battery with a capacity much less than that to power 120 LEDs. That's why I'm wondering how much run time you get from your table, because I have a suspicion that my current draw will be much less than what my calculations predict. Maybe I can save myself from needing to purchase some pricey batteries!


    4 years ago on Step 7

    Thanks for the work you did putting this this tutorial together! I'm looking into making a table or probably a picture frame on the wall. I'm wondering how the plexiglass is holding up to scratches? If you're using it as a table, won't it get messed up pretty fast?

    2 replies

    Reply 4 years ago on Introduction

    Hey, thanks for your kind words!

    The plexiglass does get scratched but it's kind of like when you get a new phone ; you see the first one all the time and after a while you don't even notice them. But if you can get your hands on a circular piece of tempered glass, it would be scratch-free for sure (be careful not to use regular/too thin glass as it could be easily shattered if used as a table)

    csepeda jr

    4 years ago

    This is the game room fixing to update it and the infinity mirror would be a nice fit

    15, 7:27 AM.jpg

    4 years ago

    huge ................


    4 years ago on Step 2

    +1 on doctaven's soap water suggestion. When tinting car windows I've even gone so far as to spray down the adhesive side of the tint and the window with soapy (a few drops of palmolive) water, position the tint on the window, then also spray the outside of the tint to make the squeegee slide easier and not accidentally move my positioned tint strip.


    4 years ago on Step 2

    using soapy water helps with the manageability of the sticky film on car windows. it might help with this project too... i often used magnets to keep the film in-place during very windy days outside (working on car window tinting).

    then squeegee the water out, starting in the middle and working your way outwards.

    1 reply

    4 years ago on Introduction

    Awesome project, thanks for the instructions!
    Could you please provide the link to your semi-reflective film from Amazon? There are so much films available with different quality so it's hard to choose, thanks!