Interactive Infinity Mirror

1,805

17

3

About: A student from the Netherlands, Studying Creative game and media technologies at HKU Currently in freshman year (2018/2019)

The assignment for this class was simple yet complicated: Make something interactive with an Arduino. It had to be designed well, technically challenging enough and original for as far as original ideas go these days on sites like Instructables.
From the start, I was interested in LEDs. My project would have to incorporate something with LEDs, so the first thing I thought of were these LED visualizers which use music as a source to indicate the loudness per frequency for instance. I quickly realized that the time we had to finish this project was pretty short and I wanted to make a visualizer that would have each led respond individually to the music. That would take way too long so I decided to do something else. Instead of having something functional, I really liked the idea of something aesthetically pleasing. Something with LEDs you could stare at for ages... An infinity mirror.
The infinity mirror has always been a kicker and to make the LEDs inside do something when you push a certain button would definitely be within the scope of this project. Instead of making a standard one I made a slightly different design (which has been done before of course) which has a square in the middle of the mirror as well that has an LED strip around it so it looks like a huge endless tower is rising up from nothing.

Inspired by the glass and chic look of the infinity mirror I wanted to have an input which was as satisfying as the rest. There I came up with capacitive buttons which need no pressure (and no actual contact if you change the sensitivity of your sensor) to be activated and thus creates an even more magical feeling.

Enough talking, let's get building!

ps. you can make this project any size you like, just keep in mind, the more LEDs you use, the more power it needs ;)

Step 1: Gathering All the Stuff You'll Need (or Want).

Wooinity mirrors don't come cheap especially when you want to use them with individually addressable LEDs. Also if you've never done anything like this before you probably need to add a few tools to your arsenal like a soldering iron or a glass cutter for example. First I'll list the parts you'll need (remember for a different size project you just have to scale everything down or up according to your ratio) for the design and the second list will be the tools I've used to make this.

Parts:
8x 6mm thick 60x60cm MDF panels
1x 3mm thick 50x50cm Plexiglas panel
1x 3m ws2812 5050smd LED Strip with 60 LEDs per meter, or around 160 LEDs(make sure it has a 5V rail instead of a 12V one)
1x 5mm thick 50x50cm glass mirror (glass mirror's give the best effect! You could use another type of mirror but it just won't look as good!)
1x Arduino Uno (A smaller or larger Arduino will suffice as long as it is powered by 5V and has at least 7 digital I/O pins
1x 5V 7A dc adapter (This will vary if you've got a smaller or larger project so be sure to calculate how much current your project will draw!)
1x Perfboard 15x15cm
5x different color 24 AWG flexible core wire (lots of it, just buy a bundle packet which should be enough)
1x 50x50cm privacy window tint foil, you should check to make sure you have the reflective kind to get the best results. It's also good practice to get a little bit extra so you can mess it up the first time as it is pretty hard
1x CAP1188 (at24qt1070) 5Key capacitive sensor breakout
1x A small bit of copper or aluminum tape (get 1 meter if you want to be sure)
1x cheap clear varnish

Tools:
Laser cutter (should be capable of cutting Plexiglas and 6mm thick MDF panels up to 60x60cm)
Basic tools (small fretsaw, wood files, sanding paper any grit, drill, etc.)
Soldering iron
Cable cutters
Hot glue gun
Lots of Solder
Woodglue
Some frame clamps
Glass cutter

Step 2: Cutting Everything

Time to cut some wood! And glass! And Plexiglas!
Use the files I provided to cut every frame of wood individually as one layer in the laser cutter.
You can use the last layer as a template for the square needed to be cut out in the exact middle of the piece of Plexiglas.
For the mirror, you should clean it first of all so that nothing is on top of the surface anymore, after this carefully measure out so your mirror is exactly 50x50cm when cut. Then in one smooth firm movement use the carbide wheel of your glass cutter to cut the glass. It won't break fully but there should be a scratch left behind, if not, try again. Then very carefully try to bend and break the glass piece off.
You're done with cutting!

LasercutLayer1.dxf

LasercutLayer2.dxf

LasercutLayer3.dxf

LasercutLayer4.dxf

LasercutLayer5.dxf

LasercutLayer6.dxf

LasercutLayer7.dxf

LasercutLayer8.dxf

Step 3: Glueing

First, we Glue the pieces of wood together, I recommend gluing to the bottom 2 layers together. Then the 3rd to 6th layer together (not attaching it to the first 2 layers). And gluing the 7th and 8th layer together as well. I recommend gluing everything together as the final step as you won't be able to get to some parts of the build after gluing it together. The hollow square in the middle can also be glued together leaving out the top cover. Leave everything to dry for at least 2 hours in a dry place at room temperature.
For the piece of Plexiglas, we're going to apply the reflective foil, it is recommended you get someone to help you as this is a very hard process and you can only mess up so many times before the foil has permanent cracks (and that $hlT expensive!). Royally soap one side of your Plexiglas and remove the protective layer from the foil to reveal the glued side. try to get it on nice and smooth, use a credit card or something flat to push out all the air pockets that have formed. (it is recommended to put the square you cut out earlier back in to make the surface flatter). Cut away the excess foil and leave to dry for at least one hour. (preferably overnight)

Step 4: LEDs Make Some Strips!

On the 4 small wood slats, we're going to glue the led strips. You can use the 3m tape provided on the back of most of these strips. If not hot glue or anything else will suffice so long as it sticks. Cut the led strip to size and glue to all 4 sides. (don't forget the middle square!) on both the middle square and one wood slat there are some holes, leave some room around this as we'll be routing cables through them. After you've glued the LED strips you can solder them together. This should be one big led strip so everything should be soldered in series! Even the middle square.

Step 5: But! Tons... Lets Wire Them

For the capacitive buttons just follow the diagram I provided. The terminated ends will go to the Arduino on one side and to your actual buttons on the other side. Don't forget to use some aluminum or copper tape on the surface (the larger you make the piece of tape the more sensitive your button gets!). The buttons should be on the top cover of the middle square.

Step 6: Wi're We Doing This?

All that is left is to wire in power, just cut off the dc plug end of your adapter and solder a 1000uF capacitor between the ground and 5v wire. Then connect this to your setup as shown in the previous diagram. You can also connect the wires from the led strip (there should be just 3) to the Arduino.

Step 7: HACKERTIME

The code I've provided should work flawlessly (you might want to play with the input button layout if you've plugged your wires differently)
So just copy, paste and upload!

// Code by Jael van Rossum | Student Nr. 3032611
// ITTT Project: Smart Infinity Mirror

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include

//Creating space in memory for LED_Strip Setup #define NUM_LEDS 151 #define DATA_PIN 6

//Declaring Variables and creating Addressable LED_Strip CRGB leds[NUM_LEDS]; int LED_Hue = 0; int LED_Saturation = 255; int LED_Brightness = 255; int LED_Brightness_Right = LED_Brightness; int LED_Brightness_Top = LED_Brightness; int LED_Brightness_Left = LED_Brightness; int LED_Brightness_Bottom = LED_Brightness; int LED_Color = CRGB(255,0,0); CHSV hsv_Val(LED_Hue, LED_Saturation, LED_Brightness);

void setup() { Serial.begin(9600);

//Declaring pinModes not declaring the LED_pin as that has been done above by defining DATA_PIN as 6 pinMode(7, INPUT); pinMode(8, INPUT); pinMode(9, INPUT); pinMode(10, INPUT); pinMode(11, INPUT); pinMode(12, INPUT); //Creating Addressable LED_Strip FastLED.addLeds(leds, NUM_LEDS); CHSV LED_Color = CHSV(LED_Hue, LED_Saturation, LED_Brightness); fill_solid(leds, NUM_LEDS, LED_Color); FastLED.show(); }

void loop() { int Button_Bottom = digitalRead(8); int Button_Middle = digitalRead(9); int Button_Left = digitalRead(10); int Button_Top = digitalRead(11); int Button_Right = digitalRead(12); if (Button_Middle == HIGH) { LED_Hue = LED_Hue +1; CHSV LED_Color = CHSV(LED_Hue, LED_Saturation, LED_Brightness); fill_solid(leds, NUM_LEDS, LED_Color); FastLED.show(); } if (Button_Right == HIGH) { if (LED_Brightness_Right > 0) { LED_Brightness_Right = LED_Brightness_Right - 1; CHSV LED_Color_Right = CHSV(LED_Hue, LED_Saturation, LED_Brightness_Right); fill_solid(leds,28,LED_Color_Right); fill_solid(leds+116,10,LED_Color_Right); FastLED.show(); } else{ LED_Brightness_Right = 255; } }

if (Button_Top == HIGH) { if (LED_Brightness_Top > 0){ LED_Brightness_Top = LED_Brightness_Top -1; CHSV LED_Color_Top = CHSV(LED_Hue, LED_Saturation, LED_Brightness_Top); fill_solid(leds+28,28,LED_Color_Top); fill_solid(leds+126,10,LED_Color_Top); FastLED.show(); } else { LED_Brightness_Top = 255; } }

if (Button_Left == HIGH) { if (LED_Brightness_Left > 0) { LED_Brightness_Left =LED_Brightness_Left-1; CHSV LED_Color_Left = CHSV(LED_Hue, LED_Saturation, LED_Brightness_Left); fill_solid(leds+56,28,LED_Color_Left); fill_solid(leds+136,10,LED_Color_Left); FastLED.show(); } else { LED_Brightness_Left = 255; } }

if (Button_Bottom == HIGH) { if (LED_Brightness_Bottom > 0) { LED_Brightness_Bottom =LED_Brightness_Bottom-1; CHSV LED_Color_Bottom = CHSV(LED_Hue, LED_Saturation, LED_Brightness_Bottom); fill_solid(leds+84,27,LED_Color_Bottom); fill_solid(leds+111,5,LED_Color_Bottom); fill_solid(leds+146,5,LED_Color_Bottom); FastLED.show(); } else { LED_Brightness_Bottom = 255; } } }

Step 8: The Finale

Now all that's left to do is to put everything together (don't forget to test it though before putting it together).
Glue all the pieces of wood together that haven't been glued (even the Arduino inside the middle square) and hope Murphy didn't show up at the worst (or best) possible time.
Your Arduino should work once you plug the power cord into the wall and the mirror should be functioning as shown in the videos.

Step 9: You're Done!

Well done! You've completed the instructable! Go get yourself a cookie, you can be proud of yourself considering you've completed an instructable written for the first time by a freshman student! Go have lots of fun and don't forget to post what you made!

Share

    Recommendations

    • Sweet Treats Challenge

      Sweet Treats Challenge
    • Remix Contest

      Remix Contest
    • Build a Tool Contest

      Build a Tool Contest

    3 Discussions

    Thanks! At our school, we have a ''makerspace'' facility, this features all kinds of laser cutters, 3d printers and cnc machines. I used a laser cutter from BRMLasers, the model number is 100160 if you're interested.