ข้ามไปที่เนื้อหาหลัก

Arduino Based Countdown Timer

Arduino Based Countdown Timer

ARDUINO
ByPankaj Khatri 7
Arduino based Countdown TimerArduino based Countdown Timer
A timer is a type of clock used for the measurement of time intervals. There are two types of timer, one which counts upwards from zero, for the measurement of the elapsed time, called as Stopwatch. And, the second one counts down from a specified time duration provided by the user, generally called as Countdown Timer.
Here, in this tutorial we will show you how to make a Countdown Timer using Arduino. Here we are not using any Real Time Clock (RTC) module for getting the time. The time duration is provided by the user with the help of Keypad and 16x2 LCD. And when the timer reaches to Zero, alert sound will be produced with the help of Buzzer.

Material Required

  • Arduino UNO
  • LCD 16*2
  • 4*4 matrix keypad
  • Buzzer
  • Pushbutton
  • Potentiometer (10k)
  • Resistor (10k, 100 ohm)
  • Connecting wires

Circuit Diagram

 Arduino based Countdown Timer Circuit Diagram
Arduino Uno is used here as main controller. A keypad is used for feeding the time duration and a 16*2 LCD is used to display the countdown. The pushbutton is used to start the time. Check here how to interface 4x4 Keypad with Arduino and 16x2 LCD with Arduino.

Code and Explanation

Complete Arduino Timer code is given at the end of this Project.
In this code below, we are initializing libraries for keypad and LCD and the variables used in the code.
#include <LiquidCrystal.h>
#include <Keypad.h>

long int set1;
long int set2;
long int set3;
long int set4;
long int j;
int t1, t2, t3, t4, t5, t6;
int r1, r2, r3;
char key;
String r[8];
String hours;
String minutes;
String seconds;

Now, in the below code we are initializing the no. of rows and columns for defining the matrix for keypad.
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns

char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};

For connecting the 4*4 matrix keypad with Arduino we have to define the pins for the rows and columns. So in below code we have defined pins for Keypad as well as 16x2 LCD.
byte rowPins[ROWS] = { 6, 7, 8, 9 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins
byte colPins[COLS] = { 10, 11, 12, 13 };// Connect keypad COL0, COL1 and COL2 to t

LiquidCrystal lcd(A0, A1, 5, 4, 3, 2); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)

The below code is used for making the keypad,
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
In the void setFeedingTime() function code, after pressing the pushbutton we are able to enter the time for timer, then after entering the timer time duration, we have to Press D to begin the countdown.
 void setFeedingTime()
{
  feed = true;
   int i=0;

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Set feeding Time");
  lcd.clear();
  lcd.print("HH:MM:SS");
  lcd.setCursor(0,1);

  while(1){
    key = kpd.getKey();
    char j;

  if(key!=NO_KEY){
    lcd.setCursor(j,1);
    lcd.print(key);   
    r[i] = key-48;
    i++;
    j++;

    if (j==2 || j == 5)
    {
      lcd.print(":"); j++;
    }
    delay(500);
  }

  if (key == 'D')
  {key=0; break; }
  }
 lcd.clear();
}

In void setup() function, we have initialized the LCD and serial communication, and defined the pins as INPUT and OUTPUT in the below code.
 void setup()
 {
  lcd.begin(16,2);
  Serial.begin(9600);
  pinMode(A0, OUTPUT);
  pinMode(A1, OUTPUT);
  pinMode(A3, INPUT);
  pinMode(A4, OUTPUT);
}

Working of this Arduino Timer is simple but the code is a little complex. The code is explained by the comments in the code.
Initially, it will print “Arduino Timer” on the LCD display until you press the pushbutton. As soon as you press the pushbutton, it will ask to enter countdown time duration by calling the “setFeedingTime” function. Then you can enter the time duration with the help of Keypad. Then you need to press ‘D’ to save the time and begin the countdown timer. Here in void loop() function, we have done some calculation to decrement the time second by second and to show the proper values of Hour, Minutes and Seconds (HH:MM:SS) according to the remaining time. All the code is well explained by comments. You can check the complete code and Demonstration video below.
Arduino based Countdown Timer in action
As the timer reaches to zero, the buzzer starts beeping and beeps for 100 times only (as per the code). To stop the buzzer, press and hold the pushbutton. You can use the Pushbutton anytime to stop the timer in between counting.
Arduino based Countdown Timer ringing
Code
#include <LiquidCrystal.h>
#include <Keypad.h>
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns
long int set1;
long int set2;
long int set3;
long int set4;
long int j;
String hours;
String minutes;
String seconds;
// Define the Keymap
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = { 6, 7, 8, 9 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins
byte colPins[COLS] = { 10, 11, 12, 13 };// Connect keypad COL0, COL1 and COL2 to t
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
LiquidCrystal lcd(A0, A1, 5, 4, 3, 2); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7)
 int t1, t2, t3, t4, t5, t6;
 int r1, r2, r3;
 
boolean feed = true; // condition for alarm
 char key;
 String r[8];
 void setFeedingTime()
{
  feed = true;
   int i=0;
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Set feeding Time");
  lcd.clear();
  lcd.print("HH:MM:SS");
  lcd.setCursor(0,1);
  
  while(1){
    key = kpd.getKey();
    char j;
    
  if(key!=NO_KEY){
    
    lcd.setCursor(j,1);
    
    lcd.print(key);
    
    r[i] = key-48;
    i++;
    j++;
    if (j==2 || j == 5)
    {
      lcd.print(":"); j++;
    }
    delay(500);
  }
  if (key == 'D')
  {key=0; break; }
  }
 lcd.clear();
}
 
 void setup() 
 { 
  lcd.begin(16,2);
  Serial.begin(9600);
  pinMode(A0, OUTPUT);
  pinMode(A1, OUTPUT);
  pinMode(A3, INPUT);
  pinMode(A4, OUTPUT);
 } 
 
 void loop() 
 { 
      lcd.setCursor(0,0);
      lcd.print("Arduino Timer");
      //Serial.println(A3);
      if (digitalRead(A3)==1) //
      {
      lcd.clear();
      setFeedingTime(); 
      for(int i = 0; i < 6; i++)  // this for loop is used to get the value of the feeding time and print it serially
      {
       Serial.print(r[i]);
       Serial.println();
      }
      
   hours = String (r[0]) + String (r[1]) ; //combining two separate int values of r[0] and r[1] into one string and save it to "hours" 
   minutes = String (r[2]) + String (r[3]) ;  //combining two separate int values of r[2] and r[3] into one string and save it to "minutes" 
   seconds = String (r[4]) + String (r[5]) ;  //combining two separate int values of r[4] and r[5] into one string and save it to "seconds" 
  
  set1 = (hours.toInt()*3600); //converting hours into seconds
  set2 = (minutes.toInt() * 60);  //converting minutes into seconds
  set3 = seconds.toInt();
  set4 = (hours.toInt() * 3600)+ (minutes.toInt() * 60) + seconds.toInt(); //adding set1, set2 and set3 together in set4
  Serial.print("set4");
  Serial.print(set4);
  Serial.println();
  lcd.setCursor(0,0);
  lcd.print("Countdown begins");
  delay(1000);
  lcd.clear();
  
  for(long int j = set4; j >= 0; j--) // this for loopis used to decrease the total time in seconds
  {
  Serial.println(j);
  
  lcd.setCursor(0,0);
  lcd.print("HH:MM:SS");
  
  long int HH = j / 3600; // converting the remaining time into remaining hours
  lcd.setCursor(0,1);
  Serial.println(HH);
  if (HH < 10) { lcd.print('0');  }
  lcd.print(HH);
  lcd.print(":");
  
  long int MM = (j - (HH*3600))/60 ; //converting the remaining time into remaining minutes
  lcd.setCursor(3,1);
  Serial.println(MM);
  if (MM < 10) { lcd.print('0');  }
  lcd.print(MM);
  lcd.print(":");
  
  long int SS = j - ((HH*3600)+(MM*60)); //converting the remaining time into remaining seconds
  lcd.setCursor(6,1);
  Serial.println(SS);
  if (SS < 10) { lcd.print('0');  } 
  lcd.print(SS);
  delay(1000);
  if (digitalRead(A3)==1){break;} 
   if (j == 0)
    
    {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Timer Stop");
      lcd.setCursor(2,1);
      lcd.print("-Ring-Ring-");
      
    for(int k =0; k<= 100; k++) //this for loop is used for the buzzer to beep 100 time as the timer reaches zero
      {
        digitalWrite(A4,HIGH);
        delay(300);
        digitalWrite(A4,LOW);  
        delay(300); 
        if (digitalRead(A3)==1){break;}  
      }
    }
   }
  }
}       

COMMENTS

  • Gondola karan's picture
    Gondola karan
    Apr 18, 2018
    It's const byte COLS = 4; // four columns
  • mohamed's picture
    mohamed
    Apr 21, 2018
    thank u good project
  • SRQPoppi's picture
    SRQPoppi
    Jun 24, 2018
    I can't seem to find the Keypad code, could you please attach or send me to the website to download.
    Thanks....
  • Silas's picture
    Silas
    Jul 07, 2018
    I really like this project but for some reason I can´t put the code into my arduino
  • Larry's picture
    Larry
    Aug 30, 2018
    Me too and error appear below.
    "Error compiling for board Arduino/Genuino Uno"

LOG IN OR REGISTER TO POST COMMENT

Sumo
125
Shares
Pinterest99Facebook26Twitter

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

Pic1

Arduino Real Time Clock Tutorial using DS1307

DHT11 Humidity Sensor on Arduino