Ever since my addressable RGB LED strips (WS2812B) came from Aliexpress, I've been fascinated with LED projects. Following up on my success with my Charlieplexed LED clock, I wanted to create something with more Jazz..

While browsing google images, I came across an instructable for an Arduino Infinity Mirror and the brain cells started working in overdrive. Why shouldn't I make an infinity mirror, that's also a clock !!


  1. Works like a clock - the colours of the hands are user-programmable over bluetooth
  2. Has an IR sensor to sense if someone is coming near the mirror. Switches off the LEDs, so that this can be used as a normal mirror :-)
  3. Shows a rainbow effect every 15 minutes (time is user adjustable)
  4. Has a touch button to toggle between clock and rainbow effects
  5. Switches to night mode between midnight and 7:00 AM - can be changed in the code.
  6. Can be programmed over bluetooth - so you do not need to take it off the wall if you need to update the code
Remove these adsRemove these ads by Signing Up

Step 1: Electronics

  1. A Standalone Arduino: OR Arduino mini pro:
  2. RTC Module – DS1302:
  3. LM2596 Step Down Adjustable Power Supply Module 1.3V-35V:
  4. 1m 60LEDs/M Addressable RGB LED Strip (WS2812B):
  5. HC-05 Bluetooth module:
  6. IR Proximity Sensor: 4 IR LEDs; 1 IR LED detector:
  7. Touch Pad:
  8. 9V – 2A Adapter
  9. CP2102 USB-to-TTL (the RST pin on the CP2102 is not for resetting the arduino – you have to solder a wire to the DTR pad on the PCB – which sends a reset signal to program the arduino. This has to be connected to the DTR pin on the Arduino
1-40 of 129Next »
dushu (author) 10 days ago

I had a small soldering problem with my 7805 (cold solders :-( ) causing the LEDs to blink erratically - so I removed it - now the arduino and the LED strips work off only the LM2596.

It seems I didn't really need the two power supplies...

dushu (author) 1 month ago

Just realised, the set_time doesn't function correctly, please replace with the following:

void set_time(){

DateTime now =;

Serial.println("IN SETTIME");

uint8_t hr = (uint8_t)atoi(;

uint8_t minu = (uint8_t)atoi(;

uint8_t sec = (uint8_t)atoi(;



Format for setting time TIME h m s

e.g. TIME 10 12 00

ivanyd4 days ago

hi i was wondering what the jp1 was in the drawing of the schematics? also im using a Arduino uno and was wondering if i am able to leave out the circuits at pb6-pb7 and pc6 as they are only needed for a stand alone arduino?

Could anyone please post an image showing the circuit connections in detail??


dushu (author)  inifinityone10 days ago

Please see image in Step 2 - it can't get any more detailed than that. The circuit is actually very simple - with only a few connections required.

Could anyone please post an image showing the circuit connections in detail??


judas7928 days ago

Neat project but I was getting errors all day while trying to compile; like the following:

Infinity_Mirror_v1:22: error: 'CRGBPalette16' does not name a type
Infinity_Mirror_v1:23: error: 'TBlendType' does not name a type
Infinity_Mirror_v1.ino: In function 'void setup()':
Infinity_Mirror_v1:42: error: 'currentPalette' was not declared in this scope

about 20 more errors of the same nature. It was caused by using these versions:

Then I spotted the link below in the comment section and all is well.

Hope this helps anybody that gets stuck as I did

rafam1 month ago

hello when i try the code it gives me

avrdude: stk500_recv(): programmer is not responding

any ideas how to fix it?

I'm guessing you've got a mismatch of what your Arduino IDE is set to and what the board you're programming actually is. If you're building it outside of the Arduino, you need to remove the ATMEGA 328 chip from the Arduino itself before using "Arduino as ISP" setting AND choosing exactly what chip/board you are programming.

If it your hardware isn't in the dropdown, you need to add it.

Oh right, the reason; you can't have 2 different chips on the TX and RX pins of the Arduino board, which is already wired to its own ATMEGA 328.

dushu (author)  rafam1 month ago

Just found out that the arduino mini pro is programmed at a different speed - if you're using one - you will have to change the speed of the Bluetooth module to 57,600 instead of 115,200

dushu (author)  rafam1 month ago

Did you connect pin 32 from the HC-05 to the reset pin as mentioned in step 2?

rafam1 month ago
I'm having I'm having trouble getting the lights to turn on. When I connect the LM25 to the lights they glow for a second then stop. Any idea?
15, 5:02 PM.jpg
dushu (author)  rafam1 month ago

These LEDs will not work without a microcontroller - they need data to switch on. Please connect the arduino and load one of the test sketches in the FastLED Library

How would you go about making this without the clock portion just the infinity mirror and an IR sensor?

dushu (author)  whynotdotoday21 month ago

That should be easy - just delete the portions of the code that have the clock functions and replace them with the rainbow functions.

Is it necessary to use the 7805 if im using the arduino uno?

dushu (author)  inifinityone1 month ago

No, just ensure that the LED strips are not powered through the arduino. The LED strips should have a separate power.

inifinityone2 months ago

the rgb led strip that i bought online has a circuit similar to this

how do i go about the connections? please help

dushu (author)  inifinityone1 month ago

You can use this to build one of these:

whoa looks pretty coool man! awesome stuff!
My addressable leds arrived just today! lets hope that im able to complete this project! *fingers crossed*

dushu (author)  inifinityone2 months ago

This looks like a 12V RGB strip - I don't think this is addressable. You need an addressable rgb strip for this project.

rafam1 month ago
So it is possible to use a simple flat glass and not a convex one?
dushu (author)  rafam1 month ago

There is no convex glass in this build. The back and front mirrors are flat.

rafam1 month ago
Is the touchpad a necessary item to this built?
dushu (author)  rafam1 month ago

No - you can leave it out - but you will have to modify the code slightly

rafam1 month ago
Does the glass have to be a convex glass of can it just be a normal flat glass?
A-Bomb962 months ago
(removed by author or community request)
A-Bomb96 A-Bomb962 months ago
(removed by author or community request)
dushu (author)  A-Bomb962 months ago

Yes - this should work. You should stick it on the inside face of the glass. An alternative would be a two-way mirror.

GrosSinge2 months ago

Hello, I'm facing issues with the code. I recieve the following message when I try to compile:

noise.cpp:24: error: expected initializer before 'const'
noise.cpp:50: error: expected initializer before 'grad16'

This is with the FastLED library. If I remove noise.cpp the code will compile but the software will only display "Status:" in the Serial Monitor and will eventually freeze up.

I've tried uploading to a Stand Alone Arduino (Uno) and an Arduino Nano and I get the same results. This is also with the latest software as well.

Any thoughts?

dushu (author)  GrosSinge2 months ago

Which version of FastLED and arduino IDE are you using? I believe v3.0 has some issues with the arduino IDE 1.5.7 or later.

GrosSinge dushu2 months ago

FastLED was version 3.0.3, but I found the problem which was the Arduino IDE. I had an old version. The code compiles and the clock works with the serial monitor commands. Except I'm having trouble with setting the time and date. Do I preset the DS1302 before hand?

inifinityone2 months ago

Hey, im sorry! I'm still a beginner and this is my first project
Just wanted to know some basic things
Whats the use of standalone arduino? how exactly does it help? I have an arduino uno! can i use it directly?

dushu (author)  inifinityone2 months ago
You can directly use an uno. A standalone is simply cheaper.
jo.werner.5682 months ago
hi, what's the thickness of the steel plate please?
dushu (author)  jo.werner.5682 months ago

The plate is just a couple of mm thick. but as it is convex - the height in the center is 10mm

pgupta313 months ago

Hi, I want to know exact command syntex for time setting if I set time it get disturbed then again I have to run ds1307 sketch to set it. like TIME -----------

dushu (author)  pgupta313 months ago

You can use rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

The format for __DATE__ is Mmm dd yyyy (Nov 07 2014)

The format for __TIME__ is hh:mm:ss (21:06:19)

pgupta31 dushu2 months ago

can I push this command directly through Bluetooth(without sketch)

1-40 of 129Next »