Simple, pre-programmed Countdown Timer

Hi there!

I would like to make a kind of countdown timer - preferably with a large 7-segment display, and a buzzer.

I am going to use it when I'm brewing beer, and would like to be able to program it just once, before I start the boil. I want to enter all the times before I start the boil, and then just hit a button when the boil start. And the alarm wil buzz (a certain signal?) when it's time to add the first hops, second hops (and so on) and finally at the end, when the boil is over.

Will this be possible for a beginner? Anyone know of a project similar, that I can just modify to my needs? I have tried googling, but I can't find anything other than automated Arduino Brewing computers and stuff like that.

I have a UNO available, in addition to a couple of Pro Micros and Pro Minis. I also have a 2x16 LCD laying around, but for the timer clock, I would really like a large 7-segment or something - so I can mount it at a highly visible spot on my garage wall.

Any ideas where I should head to get into this project?

I’d strongly advise you to get a 1602 display, rather than just a plain 7 segment display. Firstly it will allow you to add some meaningful text to your output (such as “add hops”) and it’s (IMHO) Simpler to implement.

Common Anode 7-segment display, use TPIC6B595 shift registers to sink current & light segments up. Good for higher voltage displays & higher current.

I offer a board that can drive up to 12 digits (designed for driving 12V LED strips), so will need current limit resistor per segment.

No multiplexing - just simple SPI.transfer() to send out the bytes.

byte fontArray[] = { 0b00111111, // 0 1 = segment on - DP,g,f,e,d,c,b,a 0b00000110, // 1 a : f b : g 0b01101111, // 9 e c }; // d

update your times as needed: digit0 = whatever, say onesSeconds; digit1 = tensSeconds; digit2 = onesMinutes; digit3 = tensMinutes;

then digitalWrite (ssPin, LOW); SPI.transfer(fontArray[digit0]); SPI.transfer(fontArray[digit1]); SPI.transfer(fontArray[digit2]); SPI.transfer(fontArray[digit3]); digitalWrite (ssPin, HIGH); // outputs update on this rising edge

Piece of cake.

Harhalv: I have a UNO available, in addition to a couple of Pro Micros and Pro Minis. I also have a 2x16 LCD laying around, but for the timer clock, I would really like a large 7-segment or something - so I can mount it at a highly visible spot on my garage wall.

Any ideas where I should head to get into this project?

The timing routines should be relatively easy to create.

But instead of the "large 7-segment" which may be very complicated for a beginner (hardware+software) to control, I'd rather suggest to use "something" else.

With the Arduino platform it is relatively easy to control WS2812 LEDs. So what about that setting:

You can use your Arduino board with the 2x16 LCD and a stripe of let's say 10 or 20 LEDs in a row. The LEDs then could be programmed as a "large progress bar".

I.e. if you want a 20 minute timing, each of the 20 LEDs may represent 1 minute. If you want a one hour timing, each LED may represent 5 minutes. If you want a 20 hour timing, each LED may represent 1 hour.

If your timing is for long times and you want a high timer resolution, you could easily have two or three LED progress bars: One progress bar for hours, one for minutes, one for seconds.

Nearly any amount of WS2812 LEDs can be controlled using just one digital pin of the arduino.

As an addition perhaps a piezo sounder for an alarm signal, and a button to switch off the alarm signal.

CrossRoads: Common Anode 7-segment display, use TPIC6B595 shift registers to sink current & light segments up. Good for higher voltage displays & higher current.

I offer a board that can drive up to 12 digits (designed for driving 12V LED strips), so will need current limit resistor per segment.

No multiplexing - just simple SPI.transfer() to send out the bytes.

byte fontArray[] = { 0b00111111, // 0 1 = segment on - DP,g,f,e,d,c,b,a 0b00000110, // 1 a : f b : g 0b01101111, // 9 e c }; // d

update your times as needed: digit0 = whatever, say onesSeconds; digit1 = tensSeconds; digit2 = onesMinutes; digit3 = tensMinutes;

then digitalWrite (ssPin, LOW); SPI.transfer(fontArray[digit0]); SPI.transfer(fontArray[digit1]); SPI.transfer(fontArray[digit2]); SPI.transfer(fontArray[digit3]); digitalWrite (ssPin, HIGH); // outputs update on this rising edge

Piece of cake.

lcd.print(WhateverYouWant) is simpler :)

I concur with all of the above except Crossroads. However, there are times when LED is a better option.

You might find this useful. It deals with common cathode LEDs and is derived from the Arduino playground.

I agree. For some applications, nothing beats a bright 7-SEGMENT LED display (or alphanumeric display, especially if it scrolls !)

PAROLA

Get some 2.3", 4" common anode digits, be real easy to see vs a little LCD display: http://www.kingbrightusa.com/category.asp?catalog_name=LED&category_name=KC1%2DDigit+7%2DSegment+Thru%2DHole+Display&Page=1 My board will drive 12 digits and a buzzer no problem.