Lou – Infinity Mirror Table

This tutorial will teach you how to make an Infinity Mirror Table. This table will light up objects that are placed on it, giving you a beautiful backdrop for your objects, but also force you to clean everything up before you leave the room, because the light will only goes off ones there is nothing left on the table. A one-way plexiglass mirror reflects LEDs into a two-sided plexiglass mirror, giving off the illusion of an infinite tunnel of lights.

IMG_5824 IMG_5829 IMG_5859

Tools Used
– CNC Router Machine
– Miter Saw
– Sandpaper (120 grits)
– Soldering iron & solder
– Helping Hands
– Cordless Power Drill

Materials Used
– One-way plexiglass mirror (diameter: 22”)
– Two-sided plexiglass mirror (diameter: 22”)
– PLY wood & MDF wood (diameter: 22-3/8”)
– Metal Sheet (2 sheets of 24”x36”)
– Screws (#16 x 1-1/4”)
– Wood glue

Circuit
– 1 Arduino Uno
– 1 Piezo with wires: http://www.adafruit.com/product/1740
– Adafruit NeoPixel Digital RGB LED Strip – Black 60 LED – BLACK – 2 meters: http://www.adafruit.com/products/1461
– 1 Lithium Ion Polymer Battery – 3.7v 2500mAh: https://www.adafruit.com/products/328
– 1 Adafruit PowerBoost 500 Shield – Rechargeable 5V Power Shield: https://www.adafruit.com/products/2078

Wiring the Arduino
The NeoPixel LEDs are composed of 3 different outputs: Ground, 5V and Din. The NeoPixels LEDs need to be connected to Pin 6 on the Arduino board and the Piezo has to be connected to Analog 2. You will need to download files to get your library to work on the following website (this website will also explain you how to change the colors of the LEDs and more): https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library
The Piezo convert vibration to voltage or voltage to vibration. That means you can use this as a buzzer for making beeps, tones and alerts AND you can use it as a sensor, to detect fast movements like knocks. In simple terms, the vibration of an object being set on the table will trigger the Piezo sensor, a switch capable of detecting fast movements. Once the piezo is set off, the NeoPixel Digital RGB LED strip will turn white lights.

IMG_5114

Building the Table
This next paragraph is will describe how I built my circular table. However, this technique can work with tables of any dimension and shape.
To create the tabletop I created a double-lipped ring. I used the CNC router to cut one 22-3/8” diameter ring, and two 22” diameter rings with 22-3/8” lips. Then I glued them together with wood glue and clamps. The lips are for the plexiglass mirrors to sit apart from each other and to create space in between for the LED strip.
The base of the table is made up of two 22-3/8” diameter wood circles and eight 2”x4”x13-3/4” PLY wood slats. The slats are sandwiched between the two wood circles, creating a solid structure to support the tabletop.

plan2

 

MVI_5316.00_00_10_01.Image fixe003 MVI_5316.00_00_21_00.Image fixe006 MVI_5316.00_00_30_23.Image fixe008 MVI_5316.00_00_31_20.Image fixe009 MVI_5316.00_00_43_02.Image fixe011 MVI_5316.00_01_11_05.Image fixe014 MVI_5316.00_01_26_15.Image fixe015 MVI_5316.00_01_35_00.Image fixe017 MVI_5316.00_01_45_12.Image fixe018 MVI_5316.00_01_46_18.Image fixe020

Code
// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library
#include <Adafruit_NeoPixel.h>
// Which pin on the Arduino is connected to the NeoPixels?
#define PIN           6
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS     104
// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter–see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int sensePin = 2;
int delayval = 10; // delay for half a second
int onOff = 0;
int value =250;
void setup() {
pixels.begin(); // This initializes the NeoPixel library.
Serial.begin(9600);
}
void loop() {
// For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.
if((analogRead(sensePin)>value) && onOff==0)
{
for(int i=0;i<NUMPIXELS;i++){
// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor(i, pixels.Color(127,127,127)); // Moderately bright green color.
pixels.show(); // This sends the updated pixel color to the hardware.
Serial.println(analogRead(2));
delay(delayval); // Delay for a period of time (in milliseconds).
}
onOff = 1;
}
if((analogRead(sensePin)>value) && onOff==1)
{
for(int i=0;i<NUMPIXELS;i++){
// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor(i, pixels.Color(0,0,0)); // Moderately bright green color.
pixels.show(); // This sends the updated pixel color to the hardware.
Serial.println(analogRead(2));
delay(delayval); // Delay for a period of time (in milliseconds).
}
onOff = 0;
}
//Serial.println(analogRead(2));
delay(100);
}

Videos
Final project: http://youtu.be/xtd8KePI0e4

Construction: https://www.youtube.com/watch?v=msG-dIrd3Sk

Instructables: http://www.instructables.com/id/Infinity-Mirror-Table/