Big, Auto Dim, Room Clock (using Arduino and WS2811)




First Hello instructables.

This is my first contact with :

  • Instructables
  • Arduino
  • Programmable LED's

So please don't trow rocks at me for noobish mistakes.

Keeping that in mind I'm waiting to read your comments with grate interest and I'm open to any suggestion

Features :

  • big digits ( each digit is approximately the size of a A4 paper).
  • slim in order to fit in a photo frame (a big one).
  • auto dim the light depending on the light in the room.
  • dedicated DST button.

Step 1: Prerequisites

Things I used for this project :

Electronics :

  1. Arduino nano V3.0 (sadly since I can't afford an original arduino I used a chinese clone, for showing my support I donated 2.9 $ to arduino) - 2.9$ on ebay
  2. Digital Light Intensity Sensor Module Photo Resistor for Arduino - 0.99$ on ebay

  3. DS3231 AT24C32 IIC Module Precision Real Time Clock Quare Memory for Arduino - 0.99$ on ebay

  4. DC-DC Buck Converter Step Down Module LM2596 Power Output 1.23V-30V - 0.90$ on ebay

  5. 4m WS2811 led strip 30 leds/m - 12 $ on aliexpress (1 WS2811 IC control 3 LED Chip)

Total cost of electronics : 17.78 $ (without arduino donation)

Miscellaneous :

  1. Heat Shrink Tubing - 7.99$ ebay (assortment, it total 33m)

  2. 20 pcs 5 x 7 cm prototype pcb - 3$ ebay

  3. 3 pcs Micro Switch - 1$ locally bought

  4. Solder - 1$ locally bought

  5. Flux - 1$ locally bought
  6. UTP cable (individual wires used for various connections)
  7. LCD font ( - free
  8. Cardboard - free loacal supermarket
  9. Polystyrene board - 1.50$ locally bought

Various tools.

Step 2: Preparing - Digit Template

  1. download and install LCD font (
  2. open word or similar editor and make a template similar to the image (first img)
    • font size ~800,
    • white font color black outline,
    • gray boxes where led strip fits
  3. Print and cut the gray strips with a exacto knife (second img)

Step 3: Preparing - Cut Cardboard and Led Strip

Using the digit template cut the cardboard to size (don't forget to leave space for the dots between hours and minutes)

If your LED strips came with connectors at each end (like mine did) desolder the connector and cut them in sets of 3.

Step 4: Stick the LED Strips

Using the template stick the LED strip on the cardboard.

It's not mandatory but I used a pencil to mark where the LED strips should be placed, this way I got to see the final form before attaching the LED's. It was a good thing since this is how I noticed I left two much space for those dots in the middle, as a result I had stuck the LED strips a little closer.

Step 5: Solder LED Strips

Now starts a long soldering session.

Solder the LED strips in order to form a continues strip.

Notice the order in which to solder the strips in the picture.

For the middle dots I used a single LED strip and covered the middle LED with duct tape.

I used the following color code

  • Blue for ground
  • Green for data
  • Red for Vcc (12v)

Step 6: Wire Arduino on Breadbord

I tried doing a sketch in fritzing but I can't find all the parts :( , Sorry

So here is a list with all the connections and another picture with the setup on a breadboard

Step 7: Test LED's

Before loading this sketch (for which I assume no credit) don't forget to add FastLED library.

If everything went OK the LED's should cycle trough colors. If you have any problems first check your soldered points.

Step 8: Program the Clock

After struggling a little I managed to get a working clock that covers all my needs. I'm sure there is room for improvement.

The code is very commented, if you have any questions please feel free to ask. Also if you have any suggestions, please do tell.

All debugging messages are commented as well.

In order to change the color used you must modify the variable at line 22 ( int ledColor = 0x0000FF; // Color used (in hex)). You can find a list of colors at the bottom of this page:

If you have problems downloading the code file from instructables here is a mirror :

Step 9: Make Digits Form Using Polystyrene

Cut each segment in the template printed at the beginning.
Form each digit in the polystyrene using a exacto knife (very hard) or a Hot Wire Cutter.

You can see how I made mine in the pictures.

If you don't have a guitar string you can use just about any thin STEEL wire.

In order to power the Hot Wire Cutter I used the 12v LED power supply.

Also there is a picture with a cut digit. (sorry I forgot to take pictures in the process).

Step 10: Glue Digits and Adding Diffuser

After cutting all 4 digits and the dots glue all of them on the cardboard with the LED strips. (for this process I used
double sided adhesive tape).

In order to diffuse the LED light I used 2 paper sheets on top of the polystyrene. For convenience and aesthetics I used a single A2 size paper folded in two.

Also for finishing touches I've put the entire assembly in a large picture frame.

Time Contest

Second Prize in the
Time Contest

17 People Made This Project!


  • Pie Contest

    Pie Contest
  • Build a Tool Contest

    Build a Tool Contest
  • Epilog X Contest

    Epilog X Contest

207 Discussions


1 year ago

Hi everyone,

I have replicated this project with some additions. Here you will find my code:

I have added Dallas sensor for measuring outside temperatures. Positive temperature are working good but I am not success with negative temperatures. Might be someone can help me with this. I do not know how to light up minus and corectly diplay negative temperatures. Thanks

12 replies

Reply 15 days ago

I implemented the project with three pixels per segment. I use your code. Would you help me how to change the code so it works with 87 pixels (21x4) +3.
Thank you in advance!!!


Reply 15 days ago

Which one strip you have used? As i remember correctly you must correctly define digitising of digits.
For example digit 0
WS2811 : {0,1,1,1,1,1,1}
WS2812 : {0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
Try it again.


Reply 15 days ago

Thank you for your answer, sir !!! I will try again !!!


Reply 1 year ago

Already made working code. You can use it from github.


Reply 1 year ago

RaimisS tell me please, how are the LEDs in this project arranged for your sketch?


Reply 12 months ago

I am not quite sure that I understood what you mean by that - leds are not anyhow arranged - they are on the strip and goes one after another.


Reply 12 months ago

I thank . I already collected the project. I meant connecting to Arduino, but everything is clear. Thanks for the sketch.


Reply 7 weeks ago

Hello, can someone add a few lines, so that the temperature is displayed in a different color depending on the temperature?


Question 22 days ago

I've been having some troubles with the code. I didn't make any changes to it other than defining my LED strip as WS2812 rather than your WS2811 and all it does with everything hooked up correctly is light up a few dozen LED's a weird color and a few of them blink in no particular order. Other than that, nothing. If you have any suggestions on how to fix this that would be amazing

3 answers

Answer 21 days ago

The initial project uses WS2811 witch has 3 LED / controller, WS2812 has one led / controller you must adjust the led digit arrays accordingly.
For example digit 0
WS2811 : {0,1,1,1,1,1,1}
WS2812 : {0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}

P.S. Keep in mind that in my code the dots are controlled by a single LED controller if you use ws2812 you must account for 2 LED's

you can try RaimisS code at witch is designed for ws2812


Reply 21 days ago

Thank you for your reply, and I did look into it and learned a lot. I've read your code over and over again and I guess I'm still confused about some numbers that are being brought up. For example, within the TimeToArray() function, you move the cursor a lot and I think that's where I am messing up, also all of you for(int k=0; k <= 6; k++), what is the 6 from?

I looked into RaimisS code and it looks like he has 4 LED's per segment, so 28 LEDs for each full 7 segment display, and that confused me a bit more.

I guess my main questions are 1. How do you know what to set the cursor to in between each digit, and 2. How do you find the numbers for all your for() and if() within the TimeToArray()


Reply 20 days ago

In time to array an create an array that will eventually determine witch LED's are off or on ( off LED's are 0x000000 and on LED's are "ledColor")
The array length is the total number of LED that you have, more specific is the total number of LED's controllers.
If you have 3 LED's for each segment than you have 21 LED's for each digit, therefore you have the following situation
1-21 = leds in digit 1
22-42 = leds in digit 2
43,44 = leds represents the dots ( : )
45-65 = leds in digit 3
66-87 = leds in digit 4

You must iterate trough all the 4 digits (line 144 in RaimisS code) and after that for each digit trough all the led in it (example for first digit at line 154 in RaimisS code)

Hope that helped :D

Question 11 months ago

Hello everyone,

Can you tell me please, what did you put in front of the leds to create the feelling of a single led/ per segment? What kind of material?



1 answer

Answer 21 days ago

in order to difuse the light I've used 2 sheets of paper