Arduino Countdown Timer




สมาชิกผู้จัดทำ


      ตัวจับเวลาคือนาฬิกาประเภทหนึ่งที่ใช้สำหรับการวัดช่วงเวลา ตัวจับเวลามีสองประเภท คือหนึ่งนับจากศูนย์ สำหรับการวัดเวลาที่ผ่านไป เรียกว่านาฬิกาจับเวลา และสองนับถอยหลังจากระยะเวลาที่กำหนดโดยผู้ใช้ โดยทั่วไปเรียกว่าตัวจับเวลาถอยหลัง

      ในบทช่วยสอนนี้ เราจะแสดงวิธีสร้างตัวจับเวลาถอยหลังโดยใช้ Arduino ในที่นี้เราไม่ได้ใช้โมดูลนาฬิกาเรียลไทม์ (RTC) เพื่อรับเวลา ผู้ใช้เป็นผู้กำหนดระยะเวลาโดยใช้ปุ่มกดและจอ LCD ขนาด 16x2 และเมื่อตัวจับเวลาถึงศูนย์ เสียงเตือนจะดังขึ้นด้วยความช่วยเหลือของ Buzzer

Material Required

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


Arduino Countdown Timer Circuit Diagram

      ใช้ Arduino Uno เป็นตัวควบคุมหลัก ปุ่มกดใช้สำหรับป้อนระยะเวลาและใช้จอ LCD 16*2 เพื่อแสดงการนับถอยหลัง ปุ่มกดใช้เพื่อเริ่มเวลา ตรวจสอบที่นี่วิธีการเชื่อมต่อปุ่มกด 4x4 กับ Arduino และ LCD 16x2 กับ Arduino


Arduino Countdown Timer Code and Explanation

      การทำงานของ Arduino Countdown Timer นี้เรียบง่าย แต่โค้ดซับซ้อนเล็กน้อย ในตอนแรกมันจะพิมพ์ “Arduino Timer” บนจอ LCD จนกว่าคุณจะกดปุ่ม ทันทีที่คุณกดปุ่ม เครื่องจะขอให้ป้อนระยะเวลานับถอยหลังโดยเรียกใช้ฟังก์ชัน "setFeedingTime" จากนั้นคุณสามารถป้อนระยะเวลาด้วยปุ่มกดKeypad จากนั้นคุณจะต้องกด 'D' เพื่อบันทึกเวลาและเริ่มจับเวลาถอยหลัง ในฟังก์ชัน void loop() เราได้ทำการคำนวณบางอย่างเพื่อลดเวลาวินาทีต่อวินาที และเพื่อแสดงค่าที่เหมาะสมของชั่วโมง นาที และวินาที (HH:MM:SS) ตามเวลาที่เหลือ

      เมื่อตัวจับเวลาถึงศูนย์ เสียงสัญญาณจะเริ่มส่งเสียงบี๊บและไฟLEDจะกะพริบ เสียงบี๊บจะดัง 100 ครั้งเท่านั้น (ตามรหัส) หากต้องการหยุดเสียงกริ่ง ให้กดปุ่มค้างไว้ คุณสามารถใช้ปุ่มกดได้ตลอดเวลาเพื่อหยุดตัวจับเวลาระหว่างการนับ



Code

// Arduino Countdown Timer Code
#include
#include
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;}
}
}
}
}
}


แหล่งอ้างอิง