Picture of Make A Digital Clock From Scratch
 In some point in the life of every electronics hobbyist the need to make a clock is borned, in my case it was about a month after I soldered my first part on a board, but back then I didn't have the right tools, parts and knowledge to do such a thing.
But after about 2 years I got all the things I didn't have back then and I was ready to make my first digital clock, and with all the LEDs I had left over from my 8x8x8 LED cube project I decided to make my own custom LED clock.

So join me and build your own custom LED digital clock powered by our favorite little micro-controller the Arduino.

Remove these adsRemove these ads by Signing Up

Step 1: What Do We Need?

Picture of What Do We Need?
 Here is what tools you will need to make this:
  1) Soldering Iron.
  2) Some solder wire.
  3) Small needle nose plier
  4) Small cuter
  5) Wire striper

I made my clock with a stand alone arduino without the original board because I wanted to make a finished project.

Now here are the parts you will need to make the clock:
  1) 130 LEDs.
  2) 15 2N4401 transistors.
  3) 20 1K resistors.
  4) about 10 resistors for the current protection(more detail in step 2). I used 150Ohms.
  5) DS1307 real time clock IC.
  6) one coin cell battery holder.
  7) 4 Tact switches.
  8) Prefboard (you would like to get along one for the display about 8inch*3inch)
  9) ATMega328 with arduino bootloader.
  10) A programmer for programing the chip. 
  11) 7805 voltage regulator.
  12) 16MHz crystal.
  13) two 22pF caps.
  14) 28 pin IC socket for the ATMega328.
  15)10 uF cap.
  16)0.1 uF cap.
  17) 4017 counter
  18) 32.768KHz crystal

Step 2: The Seven Segment Display

Picture of The Seven Segment Display
The clock is made of six seven segment displays which make up the display.
Each digit made of seven segments and every segment made of 3 LEDs in parallel.
So a simple calculation gives that there are 21 LEDs in each seven segment display.
And all six digits take 126 LEDs.
But as I said In the parts list you will need 130 LEDs and the other 4 LEDs are going to be used as dots that separate the hours, minutes and the seconds.
I made a common cathode display which means the all the negatives leads are connected together.

Now you will need to choose the right resistor for current limiting to 3 LEDs in parallel.
The calculation is simple and gos like this : 
R= the resistor value
Vcc = The voltage that is supplied
Vled = the forward voltage on the LED
Iled =the current the LED takes

You should always take a value a little bit bigger then the one in your calculation just to be on the safe side.

Step 3: So How It Works?

Picture of So How It Works?
This kind of display calls for a large amount of pins to power it out so a special technique is needed.
I used multiplexing.
Multiplexing works by switching between the digits one by one very fast and by so creating a illusion that all of the displays are working in the same time.
This works by connecting each segment to the same one on a different digit  and by so you will have only seven segments that are all the same for all the digits.
And you can choose what digit you want to power by connecting the negative leads of the display to ground and sending the data to the positive segment leads.

The scanning of the display is accomplished by the 4017  decade counter because I wanted to save some pins on the arduino, to control it you will need just 2 arduino pins.
The 4017 connects the grounds one by one and by so it scan the display.

Step 4: The schematics

Picture of The schematics
I did the best as I could to make a good schematic, I hope you will understand it.
(Note  : That I forgot to add the resistor to the reset pin in the schematic so you will need to add a 1K resistor  to the reset pin and Vcc)
To see the schematic better download it.
Some things I didn't added in there and they are the connection of the transistors to the display.
Now for the transistors that are connected to the 4017: There are just one unused pin in there and thats the collector and you need to connect it the ground of the seven segment display, each resistor is for one digit.

The transistors the are connected to the micro-controller has the emitter pin unused and you need to connect is to the segments via a current limiting resistor, each segment gets one transistor.

The 2 transistors that have a LED connected to them represent the 4 dots in the display you can see how to connect in the display picture.

Look at all the pictures in this step to know what goes where.

Step 5: The program

Picture of The program
Now it's time to program you ATmega chip.
But first install all 3 libraries that I have given like so.
Take your chip and put it in the arduino board and put the program I have added with this step.
The program is a bit messy but I did as best as I could to make it clean.
You ca set time and date in this clock so no time setting is needed when you program.

Time setting mode:
Press the "start/end setting mode" button, use the up and down buttons to set the time and the "next" button to move to the next part( it goes like this : hours, minutes,days, mouths ,years).
when you are done press the "start/end setting mode" button again.

Just press the "date/next" button.

There is no comments in the code, I will add them latter on.

Step 6: Your Done

Picture of Your Done
 Now you have your own working clock to tell you the time and date.
Now you can make or buy a nice box to close all the wires and make a cool finished project.

1-40 of 164Next »
SuntiratN1 month ago

Can you send me complete source code, please


didod3 months ago

i have a problem, error

RTC.get(rtc,true);//get the data form the RTC IC

download failed

DS1307 and More.zip291 KB

how do that ?

CristobalD5 months ago

I have mounted the circuit 7 displays business segments and transistors are 2N2222A.

The problem is that lack luster to segments.

CristobalD5 months ago

Tengo montado el circuito con displays de 7 segmentos comerciales y los transistores son 2n2222A.

El problema esta en que falta brillo a los segmentos.

KusalW5 months ago

i have used blue LEDs,To work 4 leds need 12v so can i give 12v through that transistor.

simbrose2 years ago
Having some problems with the finished clock. The first time I powered it up, I set the time and date, and it ran great. After an hour though, it seemed to reset itself and displayed the zero digit on each of the six numbers (like it was before I first set the time and date). Now whenever I set the time again, it runs for about 4 seconds then resets to zeroes again. Sometimes, it won't display the time or date after it has been set.

Anyone having a similar problem? any suggestions on how this could be fixed? I've tried disconnecting the reset pin from the circuit, but that didn't make any difference.
CP LED simbrose7 months ago

i have the same problem ..n i used the uno board but the things went good for the first time n next time it doesnt store time it just diplays 000000 and notinhgs goes on n wen i set the time it take all input but wen pressing setting butoon the display shows the same 000000 ... any solution u found

simbrose CP LED7 months ago
try taking out the button battery, i think that worked for me. It seemed to run fine with just the 9V
Try putting pull up resistors to the DS1307's data lines.
2.2kohm, read datasheet for further ado.
CP LED7 months ago

used the uno board but the things went good for the first time n next time it doesnt store time it just diplays 000000 and notinhgs goes on n wen i set the time it take all input but wen pressing setting butoon the display shows the same 000000 ... any solution my problem n if i use stnad alone arduino it just show zero on the first digit...

plz help i have to it do it by dis year 2014 or else it will affect my grades....

jasper5007 months ago

you could save a digital output by connecting pin 5, the Q6 output of the 4017 counter directly to its reset pin 15. This creates a 1 of 6 counter.

just wondering what is the approximate cost of this project?

KaarelRohtla8 months ago


A problem bumped up when I started programming. When compiling I get next error message:
This report would have more information with

"Show verbose output during compilation"

enabled in File > Preferences.

Arduino: 1.0.6 (Windows 7), Board: "Arduino NG or older w/ ATmega8"

C:\Users\Kaarel\Documents\Arduino\libraries\DS1307\DS1307.cpp: In member function 'void DS1307::read()':

C:\Users\Kaarel\Documents\Arduino\libraries\DS1307\DS1307.cpp:48: error: 'class TwoWire' has no member named 'write'

C:\Users\Kaarel\Documents\Arduino\libraries\DS1307\DS1307.cpp:61: error: 'class TwoWire' has no member named 'read'

C:\Users\Kaarel\Documents\Arduino\libraries\DS1307\DS1307.cpp: In member function 'void DS1307::save()':

C:\Users\Kaarel\Documents\Arduino\libraries\DS1307\DS1307.cpp:74: error: 'class TwoWire' has no member named 'write'

C:\Users\Kaarel\Documents\Arduino\libraries\DS1307\DS1307.cpp:82: error: 'class TwoWire' has no member named 'write'

I am currently using USBasp programmer to program the circuit, Also I use new DS1307 library a good man provided in comments but I still can't make it work. I anyone able to help me with that problem?

SudiartoHsu10 months ago

sir i have a problem using arduino 022. are you have a sketch for arduino 1.0.5? thanks.

rmaduki made it!1 year ago

I have a problem! if I look at the date, one dot LED is not lit .. but when back to clock mode, the LED dot lights up


Would you mind sharing the PCB design you used? I am having troubles getting my cad software to work. Any response is appreciated.

Thanks, Adam

pepy rmaduki1 year ago

check your wiring...may be 'short' with others segment. use your multimeter

CP LED1 year ago

in the above circuit diaram where does the pin of clicok ic goes ......

do we have to cinnect all the small boxex or we have to just leave those pin as it is

CP LED1 year ago

in the above circuit diaram where does the pin of clicok ic goes ......

do we have to cinnect all the small boxex or we have to just leave those pin as it is

pepy made it!1 year ago

i saw this tutorial for few years ago, and i want to built it, but i don't know what i'm doing. i don't know about microcontroller. and i learn about it, and now i'm made it!!! thanks for the tutorial...i change the LEDs to seven segment and different display. on the left side i use common cathode seven segment, and the right side i use commond anode 4x seven segment with 2pcs smallest seven segment display..... :)

Steve251 year ago

Got it working, but there is one problem left. The dots keep flikkering like every second. Any idea what could cause this?

Steve251 year ago

Do you have to connect you're DS1307 to the 5V? It isn't connected in the drawning

Oliverhall1 year ago

Nice clock! and nice tutorial!

Have a look at this website, they are selling the DS1307 real time clock: http://voltatek.com/en/sensors/34-i2c-rtc-ds1307-a...

jz02bdn made it!1 year ago

I made it..... use Arduino-0022 to upload the program you can download here


in the code, there is a line - " pinmode = SET.read();If it was pressed you will exit the while loop "

In front of the "if" needs two slashes, like so, pinmode = SET.read();//If it was pressed you will exit the while loop

Yea I figured it out already but thanks

this is my project ... i did it by follow schematics and sketch from this page... if your project doesn't work... double check your wiring and parts


hai, bagaimana cara merubah sketch nya?? punya saya error spt gambar d bawah ini

asketch npp error.png

hi, how to change this sketch?? I got an error like d picture below

upload your sketch with arduino-0022 program... try to read all comment in this page...

ok it looks like it should be compiled with Arduino 0022, and this seems to be successful. probably because the DS1307 Library here is not matched with the latest Arduino IDE. okay thanks for the reply

sketch berhasil.png

I'm not even started yet. Im low on spare time at this time but i will build it

did you finish your project?

No im not started yet

Steve251 year ago

In a lot of guides people are using 10K pull up resistors. What's the advantage of 10k ohms instead of 1k?

Steve251 year ago

Does anybody have the new DS1307 library because the one in this guide isn't working anymore

Steve251 year ago
I have an error when im compiling the program:
In file included from LEDclock.ino:4:
C:\Users\Stefan\Documents\Arduino\libraries\DS1307/DS1307.h:47: error: 'boolean' has not been declared
C:\Users\Stefan\Documents\Arduino\libraries\DS1307/DS1307.h:48: error: 'boolean' has not been declared
C:\Users\Stefan\Documents\Arduino\libraries\DS1307/DS1307.h:55: error: 'byte' does not name a type

Does someone has an idea what the problem could be?
robot7974 years ago
i has a question do you mind if i rebuild this using vfd tubes?
Syst3mX (author)  robot7974 years ago
I don't mind at all, you can do anything you like.
Good luck with that mate!
i only have one problem
can you put the code with comments up soon
then i can reprogram it easyer
Syst3mX (author)  robot7974 years ago
OK I will try to update the code by tomorrow.
1-40 of 164Next »