Mirror Mirror

Mirror Mirror is a wall lamp that lights up when people pass by. The color changes according to the weekdays – Monday is blue, Tuesday is green, Wednesday is yellow….



1 piece of bronze mirror acrylic (12” L x 12” W x ⅛”D)

2 pieces of black acrylic (24” L x 12” W x ⅛”D)


Electronic Components:

Adafruit Arduino kit

Adafruit LEDs strip

PIR (motion) sensor

5V power supply



Silicone Cement

Hot Glue Gun

Soldering station


1-1Step One: Sketch out your ideal mirror shape on paper and cut it out. Put LEDs strip on the paper to see if it fits.

I personally wanted to build a pebble-shaped mirror.


Step Two: Scale your mirror so it fits into a 12” square. Draw the mirror in Adobe Illustrator and save it as an .ai file.

We will use this file to laser cut the bronze mirror acrylic. (Provide template)


Step Three: Draw the boxes that will house the Arduino board, breadboard and PIR sensor so that they fit into a 24” x 12” sheet of acrylic.

These files will be used to laser cut the black acrylic. (Provide template)

4-2 4-1

Step Four: Laser cut the bronze and black acrylic. Here is one space where you could laser cut your files, if you don’t have a lasercutter handy: http://nyclasercut.com/.

5-2 5-3 5-5

Step Five: Use silicone to glue the acrylic together and glue the LED strip around the outside edge of your mirror.

Warning: Be careful – acrylic is easily scratched and silicone cement always gets everywhere.


Step Six: Cut 3 pieces of 3 inch long wire and solder them onto the neopixel strip.



Step Seven:The Neopixel Strip “IN” wire [the white wire coming off of the Neopixel strip] needs to be connected to Pin 6 on the Arduino. The VCC wire, which supplies power to the Neopixel strip, and is colored red, needs to be connected to the 5V power supply on the Arduino and the black wire from the Neopixel strip “GND” needs to be connected to the Arduino ground.



Step Eight: Use the tiny breadboard to wire up the motion sensor to Arduino Pin A0. Be sure to connect a resistor to the circuit as shown in the diagram below.


Step Nine: Turn on your computer to upload the code onto the Arduino board to make it work.

Download three Arduino libraries – a Neopixel library, a time library and an alarm library.

Neopixel library: www.github.com/adafruit/Adafruit_NeoPixel

Time library: www.pjrc.com/teensy/td_libs_Time.html

Alarm library: www.pjrc.com/teensy/td_libs_Time.html

(I will provide the code later!!!)

This project is inspired by the monthly mood cube and which is where time code comes from.

Before putting all the parts into the box, upload the program onto the Arduino by connecting it to a computer. The Arduino program keeps track of the time, changes the color of the LEDs and fades them to black when people leave.


Step Ten: Place your Arduino board into acrylic box.

11-1 11-2 11-3

Step Eleven: Hang Mirror Mirror on the wall and plug it in!!!

View this post on Instagram

Mirror mirror! #svapod #arduino #neopixel

A post shared by Wan Long Hung (@longlonghong) on

Key Reminder by Long



My inspiration is from my neighbor Mike. He has a light remote control. When he has visitors, he will ask them to wave their hands and he will turn on the light. It’s his little trick. After halloween, he start to use a wand to play that trick… Thus, I came out an idea of magic mirror. When someone step on the mat, the lights will turn on.


Pressure-Sensitive conductive sheet
Neopixel Ring – 12x WS2812 5050 RGB LED

First Part – Switch


螢幕快照 2014-11-06 下午5.26.48




Roya helped me!

Second Part – Neopixel Ring


My boyfriend helped me!

Third Part – Combine them together


Boris helped me!

Finally – Key Reminder



#include <Adafruit_NeoPixel.h>

#define PIN 6

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino 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(60, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

int sensorPin = A0;    // select the input pin for the potentiometer

int sensorValue = 0;  // variable to store the value coming from the sensor

void setup() {
  strip.show(); // Initialize all pixels to 'off' 
  pinMode(A0, INPUT_PULLUP);

void loop() {
  int value = analogRead(sensorPin);

if (value < 16){
  // turn the ledPin on
  theaterChaseRainbow(50); }

  // stop the program for  milliseconds:
  // turn the ledPin off: 
  // stop the program for for  milliseconds:


// 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);

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));

// 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));

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, 0);        //turn every third pixel off

// 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) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else if(WheelPos < 170) {
    WheelPos -= 85;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);