Introduction: Arduino Countdown Timer

Picture of Arduino Countdown Timer

The Arduino Countdown Timer is a fun weekend project for beginners who wants to move on to something slightly more advanced. The timer controls two 7-segment displays which count down from 99 to 0, and can be stopped and started using a button. When the timer reaches 0, the display flashes and a buzzer beeps. This project is ideal for timing any life activity that happens in 99 seconds or less.

An interesting thing about this project is that the two displays collectively have 16 pins which are used, but the Arduino is able to control both using only 9 pins thanks to a technique called mulitplexing. This technique allows only one light to be on at any given time by connecting them together and then letting the Arduino control which display gets connected to ground. Even though only one light can be controlled at a time, thanks to the phenomenon of persistence of vision, if both lights are flickered on and off in series fast enough, we perceive them to both be on all the time. While this may seem complicated, this is actually a commonplace technique for controlling LED displays.

Get experimenting and see for yourself by building your own!

Step 1: Materials

Picture of Materials

You will need:

(x1) Arduino Uno (Radioshack #276-128)
(x2) 7-segment display (Radioshack #276-075)
(x1) SPST momentary pushbutton switch (Radioshack #275-646)
(x1) M-type coaxial power plug (Radioshack #274-1569)
(x2) 220 ohm 1/4 watt resistor (Radioshack #271-1313)
(x1) 10K ohm 1/4 watt resistor (Radioshack #271-1335)
(x1) Grid-Style PC Board (Radioshack #276-149)
(x1) Piezo element (Radioshack #273-073)
(x1) 9v snap connector (Radioshack #270-324)
(x1) 9V Battery (Radioshack #23-853)
(x1) 5" x 2.5" x 2" project enclosure (Radioshack #270-1803)
(x1) 22awg solid core wire (Radioshack #278-1221)

Step 2: Attach the Display

Picture of Attach the Display

Center the two 7-segment displays side by side on the PC Board. Hold them in place by soldering each of the display's corner pins.

Step 3: Resistors

Picture of Resistors

Solder a 220 ohm resistor to the common cathode pin (pin 4) on the lefthand 7-segment display, and another 220 ohm resistor to the common cathode pin (pin 12) on the righthand 7-segment diplay.

Step 4: Solder Together

Picture of Solder Together

Solder together all of the anode pins from one of the 7-segment displays, to the corresponding anode pins on the other 7-segment display.

For instance, pin 1 from the lefthand display should be connected to pin 1 from the righthand display. This process should be repeat for pins 2, 6, 7, 8, 13, and 14.

Step 5: Attach Wires

Picture of Attach Wires

Attach a black wire to each of the end of the 220 ohm resistors not connected to the displays.

Solder a red wire to each individual pair of connected anode pins. There should be seven red wires in total.

Step 6:

Picture of

Place a piece of tape over the front of the 7-segment displays. Rub over them with a pencil until a solid outline appears.

Step 7: Tape

Picture of Tape

Place the tracing centered upon the enclosure lid.

Step 8: Drill

Picture of Drill

Using a 1/8" drill bit, make holes in each of the inside corners of the tracing.

Step 9: Cut

Picture of Cut

Insert the blade of a coping saw through one of the holes in the lid and use it to cut out the square outline.

Step 10: Clean

Picture of Clean

Remove the tape and file the edges of the square until the 7 segment display fits snugly.

Step 11: Battery Plug

Picture of Battery Plug

Twist off the casing for the M-type plug and slide it onto the battery snap connector's wires.

Solder the red wire to the center terminal of the M-type plug and the black wire to the outer barrel terminals .

Twist the casing back onto the plug.

Step 12: Drill

Picture of Drill

Drill a 1/8" pilot hole in the center of one of the 2" x 2.5" side of the enclosure.

Widen the pilot hole using a 1/2" spade bit.

Step 13: Wire

Picture of Wire

Solder a 10K ohm resistor to a 6" green wire, and then solder the other end of the resistor to one of the terminals of the pushbutton switch.

Next, solder a 6" green wire to the same terminal on the pushbutton switch as the resistor.

Finally, solder a 6" red wire to the opposite terminal of the pushbutton switch.

Step 14: Insert

Picture of Insert

Pass the pushbutton switch through the 1/2" hole in the enclosure and fasten it in place with its mounting nut.

Step 15: Program

Picture of Program
Program the Arduino with the following code:

Step 16: Wire It Up

Picture of Wire It Up
Plug the 7-segment display board into the Arduino as follows:

7 Segment<--->Arduino
     
anode pin 13<---> D2
anode pin 14<---> D3
anode pin 8<---> D4
anode pin 1<---> D5
anode pin 2<---> D6
anode pin 7<---> D7
anode pin 6<---> D8
cathode pin 12
(righthand display)
<---> D9
cathode pin 4
(lefthand display)
<---> D10

Step 17: Wire the Switch

Picture of Wire the Switch

Insert the red wire from the switch into the 5V socket on the Arduino.

Insert the black wire into the ground socket on the Arduino

Connect the green wire to digital pin 12 on the Arduino.

Step 18: Wire the Alarm (optional)

Picture of Wire the Alarm (optional)

Connect the piezo's red wire to digital pin 11 on the Arduino.

Connect the piezo's black wire to one of the ground sockets on the Arduino..

Step 19: Plug In

Picture of Plug In

Snap together the battery connector and the 9V battery, and plug the battery into the Arduino's power socket.

Step 20: Glue

Picture of Glue

Hot glue the circuit board to the inside of the lid such that the 7-segment display is sitting snugly in the square cutout.

Step 21: Case Closed

Picture of Case Closed

Close the lid on the enclosure and fasten it shut with the included screws.

Step 22: How to Use

Picture of How to Use

To start the timer, press the button once.

To pause the timer, simply press the button again.

To restart the timer, press the button 3 times quickly in less than one second.

Comments

dancopy (author)2017-04-07

I would
like to take advantage of the same circuit for a countdown from 9999 to
0000 with Buzzer - what should be changed in the code? Thank you all

JohnnyK26 (author)2017-01-08

i want tomake a 3 year countdown timer what can i change to acive that?

micmac (author)2014-10-19

I just completed a version of this. Mine is AC powered and is designed to count down in six minute increments for six hours - it's for sleeping exactly six hours from the time you get in bed. It flashes an LED and activates a buzzer when the counter hits 00.

I used a toggle switch instead of a button to avoid all the debouncing nonsense and because mine only has two states - actively counting down or waiting to be activated. Thanks for the inspiration. When we stand on the shoulders of giants, we can reach amazing heights.

shawnf2 (author)micmac2016-12-13

Can you post an instruction for this? It is very similar to what I'd like to do.

Thank you!

RussellB48 (author)2016-09-14

Hi, Could you please help me. I am very new to arduino. Just purchased an arduino leonardo several weeks ago and have not been able to get a project up and running. I have been using codebender and breadboards to prepare circuits. I love this project but am adding a relay to the buzzer trigger and need to count down from 30 seconds. How do I modify program for 30 seconds.

Best Regards

Russell

tarun laxkar (author)2016-06-16

how to make this 99 second timer to upto 99 minutes timer using same buttons and alarm.?

Please help

randofo (author)tarun laxkar2016-06-17

I wrote this so long ago I don't 100% recall what is happening.

I believe you change y=50 in the loop to y=3000.

That should more or less do it I think.

rohank26 (author)2016-06-16

sir,in my project of smart sprinkler ,the sprinkler should automatically get on for a set duration(for ex- if i set the timer on for 5-6 am everyday the sprinkler should get on automatically on the assigned days.)So, can it be done using this project or i have to separately use a RTC (real time clock module for arduino.)??

puffmunk made it! (author)2016-01-17

This was a very good beginners project! Helped me learn how to use push buttons with the Arduino, use 7 segment displays and learn how multiplexing works.

Soldering those tiny connections on a PCB was kind of a pain, though.... Need to learn better soldering skills ahaha. >_<

sumitsmt (author)2015-03-25

How can I modify the code to countdown from 99 min? and how to attache with relay????plz riply...

amielv (author)2015-02-15

how can i modify the code that countdown from 24? please help

abu_seif1 (author)2013-11-23

which language did you use for the programming part?

aquasource83 (author)abu_seif12013-12-29

please dont laugh, but i have the timer all together and it just lights up with the number 99.
i copied and pasted the code then verified,went over my wiring but stiil the same outcome. can u tell me where ive made a mistake.

hello did you ever figure this out i built it and is doing the same

diytransistor (author)2015-01-15

How can I modify the code to countdown from 59? Also, nice 'ible. Thinking about making it.

JánM3 (author)2014-10-08

Great counter! And what I suposed to change in code if I want to countdown other time? Like 40 second and so on?

steinie44 (author)2014-04-14

Need an on/off switch or your battery will be dead in about 24 hours. At least turn off the LEDs and put the Arduino to sleep when not in use.

PunqRot (author)2014-03-19

I understand your concern, but the RadioShack flyer specifically cites this Instructable and the web page directs here.

They could have done a better job referencing the Radio Shack connection like, "this can be seen at your local Radio Shack" or something to cite both sides.

jsuptic (author)2014-01-13

I wanted to leave a quick message about all the digitalWrite() commands that were done in the code. There is a better way! I am in no way knocking how you did it, I just learned this way a couple days ago. Arduino has what is called port manipulation (http://arduino.cc/en/Reference/PortManipulation). What this allows is a single line to control digital pins 0-7 and another for 8-13. The command to write is:

DDRD for 0-7 and DDRB for 8-13. For example:

DDRD = B10011011; //Set pins 0,1,3,4,7 to high and 2,5,6 to low.

The format is littleEndian meaning the right most bit is the 0 or 8 pin and left most bit is the 7 or 13.

By utilizing this technique two important actions happen. First: Each bit is set simultaneously, thus saving clock cycles and eliminated any possible flicker (which would not be noticeable to human eyes anyways). Second: In projects that deal with a lot of port/pin manipulation -- such as the one presented here -- it can eliminate literally tens to hundreds of lines of code/copy and paste. As well it can eliminate a lot of pin setup code since DDRD and DDRB are builtins

Once again I encourage everyone to read further on this, as I just learned it this week and as such cannot fully explain it.

Also @ranofo, again great project! I am utilizing your wiring scheme to make a life counter/virtual dice and had not thought of or understood multiplexing well before. Bravo Zulu for a job well done!

J.

mmbasha (author)2013-10-28

hello cqn you please help me with the codes of
a counter down timer of 10min and 59 sec which will be running on a seven segment led
with two button for (stop/resume) also one for reset
it will count down until it reaches 00:00 when it reaches zero it has to gives a buzzer sound for just three second

Asics (author)2013-10-09

Thank you I had fun building this project. Nice directions and I'm nearing completion now. This is my 2nd instructable. I'm going to make the mystery book next!

techbitar (author)2013-10-08

Super!

dmacasae (author)2013-10-07

this is exactly what I was looking for for my archery timer... well kind of... is it easy to modify so it can count down for 3 digits? (more 999 seconds?) thanks in advance!

HockleyDawg (author)2013-10-07

Needs an on/off switch, or add code to turn off the LEDs after a period of inactivity to save battery (turn back on when you hit the button). Good work on the multiplexing to make the most of your pins.

Aud1073cH (author)2013-10-06

Do you work for radioshack?

pimpdoubt (author)2013-10-06

Way cool, just dont leave it in public :P

Aud1073cH (author)pimpdoubt2013-10-06

Oh no! A clock! whatever will we do!!! -oh, look at the time.

or take it on a plane

MakerMastery (author)2013-10-06

Excellent Instructible! Great step-by-step details. A great tip on how to cut a square hole in a project box.

HavocRC (author)2013-10-06

How do you get a perfectly white background?

randofo (author)HavocRC2013-10-06

A combination of shooting on a photo sweep, good lighting and photoshop.

HavocRC (author)randofo2013-10-06

Yes please!!!

Thanks!

randofo (author)randofo2013-10-06

I should post an Instructable one of these days.

carlos66ba (author)2013-10-04

Very nicely built and a good project. One suggestion for future improvements (in terms of learning new stuff, not in terms of functionality itself---which is fine with the device as-is) is to program most timing and events using timer interrupts and event interrupts (i.e. detect the button press). It is more challenging to do but very interesting to learn. I am still having trouble dealing with some interrupt calls but it is a very important programming skill.

randofo (author)carlos66ba2013-10-04

I figured this was more a beginner's project and did not want to make it more complicated than it already was. This is a good suggestion though for making the code a bit more robust.

About This Instructable

180,134views

314favorites

License:

Bio: My name is Randy and I founded the Instructables Design Studio. I'm also the author of the books 'Simple Bots,' and '62 Projects to ... More »
More by randofo:Build a RobotSimple MachinesAdjustable Bookshelf
Add instructable to: