
Tutorial Arduino: Cara Membuat Timer Hitung Mundur Digital (Digital Countdown Timer) Dilengkapi Buzzer Alarm, Indikator LED Status, & Tombol Kontrol pada Simulator WOKWI
Pada bagian ini akan dibahas pembuatan proyek timer hitung mundur digital interaktif (Digital Countdown Timer System) berbasis mikrokontroler Arduino Uno / ESP32, layar LCD 16×2 I2C, 4 buah push button (untuk pengaturan waktu naik/turun, tombol start, dan tombol stop/reset dengan fitur tekan lama), piezo buzzer untuk alarm melodi saat waktu habis, lampu LED indikator status (LED Set dan LED Run), serta platform simulasi WOKWI. Skematik rangkaian ditunjukkan pada Gambar 1, program Arduino yang sudah dirapikan pada Kode 1, dan video pembuatan pada tautan Video 1. Sistem memungkinkan pengguna mengatur durasi menit secara fleksibel, menjalankan timer dengan transisi tampilan detik berkedip secara real-time, menghentikan sementara (pause), serta mereset timer kembali ke durasi awal secara otomatis maupun manual.
Gambar 1. Skematik rangkaian sistem
List Pin:
- Modul Tombol Kontrol (Push Button dengan Konfigurasi Input Pull-Up)
Tombol Tambah Waktu (BTN_UP) => Digital Pin 2
Tombol Kurang Waktu (BTN_DOWN) => Digital Pin 3
Tombol Mulai / Start (BTN_START)=> Digital Pin 4
Tombol Stop / Reset (BTN_STOP) => Digital Pin 5 - Aktuator Output Audio & Indikator LED
Piezo Buzzer Alarm (BUZZER) => Digital Pin 6
LED Indikator Mode Set (LED_SET)=> Digital Pin 7 (Dilengkapi Resistor 220 Ohm ke GND)
LED Indikator Mode Run (LED_RUN)=> Digital Pin 8 (Dilengkapi Resistor 220 Ohm ke GND) - Layar LCD Display I2C (16×2 LiquidCrystal_I2C)
SDA => Pin SDA (A4 pada Arduino Uno / GPIO 21 pada ESP32)
SCL => Pin SCL (A5 pada Arduino Uno / GPIO 22 pada ESP32)
VCC => 5V / 3.3V
GND => GND
List Virtual PIN:
- Proyek ini dirancang sebagai perangkat timer digital mandiri (standalone/offline) pada platform WOKWI menggunakan layar LCD, tombol push button, buzzer, dan LED tanpa koneksi modul Wi-Fi/Cloud ESP32. Oleh karena itu, pemetaan Virtual Pin Blynk tidak diterapkan pada modul proyek ini.
// ============================================================================
// PROYEK: TIMER DIGITAL DENGAN ALARM & INDIKATOR LED MENGGUNAKAN BUTTON
// PLATFORM: ARDUINO / SIMULATOR WOKWI
// ============================================================================
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Definisi Pin Tombol (Push Button) dengan Pull-Up Internal
#define BTN_UP 2 // Tombol untuk menambah menit
#define BTN_DOWN 3 // Tombol untuk mengurangi menit
#define BTN_START 4 // Tombol untuk memulai timer
#define BTN_STOP 5 // Tombol untuk pause (tekan singkat) atau reset (tahan 2 detik)
// Definisi Pin Output (Buzzer & LED Indikator)
#define BUZZER 6 // Pin untuk buzzer alarm suara
#define LED_SET 7 // LED menyala saat mode pengaturan waktu (Set)
#define LED_RUN 8 // LED menyala saat timer sedang berjalan (Running)
// Inisialisasi Objek LCD I2C (Alamat: 0x27, Lebar: 16 kolom, Tinggi: 2 baris)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variabel Waktu dan Penghitung
unsigned long lastUpdate = 0; // Variabel penyimpan waktu millis terakhir untuk jeda 1 detik
unsigned long stopPressTime = 0; // Variabel untuk menghitung durasi tahan tombol stop (long press)
bool isRunning = false; // Status apakah timer sedang berjalan (true/false)
bool isSetting = true; // Status apakah sistem sedang dalam mode pengaturan waktu
bool stopButtonHeld = false; // Status pengecekan tombol stop sedang ditekan
bool colonState = true; // Status kedipan titik dua (:) pada LCD setiap detik
int minutes = 0; // Nilai variabel menit saat ini
int seconds = 0; // Nilai variabel detik saat ini
int initMinutes = 0; // Menyimpan nilai awal menit untuk keperluan reset otomatis
void setup() {
// Konfigurasi pin tombol sebagai INPUT dengan pull-up internal (aktif LOW)
pinMode(BTN_UP, INPUT_PULLUP);
pinMode(BTN_DOWN, INPUT_PULLUP);
pinMode(BTN_START, INPUT_PULLUP);
pinMode(BTN_STOP, INPUT_PULLUP);
// Konfigurasi pin aktuator sebagai OUTPUT
pinMode(LED_SET, OUTPUT);
pinMode(LED_RUN, OUTPUT);
pinMode(BUZZER, OUTPUT);
// Kondisi awal saat perangkat dinyalakan
digitalWrite(LED_SET, HIGH); // LED Set menyala (siap diatur)
digitalWrite(LED_RUN, LOW); // LED Run mati
digitalWrite(BUZZER, LOW); // Buzzer mati
// Inisialisasi layar LCD
lcd.init();
lcd.backlight();
updateDisplay(); // Tampilkan menu awal di layar LCD
}
void loop() {
// Membaca dan memproses input dari tombol-tombol
handleButtons();
// Logika hitung mundur (Countdown) berjalan jika isRunning bernilai TRUE dan sudah lewat 1 detik (1000 ms)
if (isRunning && millis() - lastUpdate >= 1000) {
lastUpdate = millis(); // Perbarui waktu referensi terakhir
if (seconds > 0 || minutes > 0) {
if (seconds == 0) {
if (minutes > 0) {
minutes--; // Kurangi 1 menit jika detik habis
seconds = 59; // Reset detik menjadi 59
}
} else {
seconds--; // Kurangi 1 detik
}
colonState = !colonState; // Ubah status kedipan titik dua setiap detik
updateDisplay(); // Segarkan tampilan LCD
} else {
// --- KONDISI KETIKA TIMER SELESAI (WAKTU HABIS) ---
isRunning = false; // Hentikan timer
playTune(); // Mainkan melodi alarm buzzer
flashLED(LED_RUN, 5); // Kedipkan LED Run sebanyak 5 kali
// Kembalikan ke mode pengaturan awal
digitalWrite(LED_SET, HIGH);
digitalWrite(LED_RUN, LOW);
isSetting = true;
minutes = initMinutes; // Kembalikan waktu ke durasi awal
seconds = 0;
colonState = true;
updateDisplay();
}
}
}
// Fungsi untuk menangani seluruh aksi tombol (Button Handlers)
void handleButtons() {
// 1. Tombol Tambah Waktu (BTN_UP)
if (!digitalRead(BTN_UP)) {
delay(200); // Debounce sederhana
if (isSetting) {
minutes = min(minutes + 1, 99); // Tambah 1 menit, maksimal 99 menit
initMinutes = minutes; // Perbarui waktu awal
updateDisplay();
}
}
// 2. Tombol Kurang Waktu (BTN_DOWN)
if (!digitalRead(BTN_DOWN)) {
delay(200); // Debounce sederhana
if (isSetting && minutes > 0) {
minutes--; // Kurangi 1 menit, minimal 0 menit
initMinutes = minutes; // Perbarui waktu awal
updateDisplay();
}
}
// 3. Tombol Mulai / Start (BTN_START)
if (!digitalRead(BTN_START)) {
delay(200); // Debounce sederhana
if ((minutes > 0 || seconds > 0) && !isRunning) {
isRunning = true; // Mulai jalankan timer
isSetting = false; // Keluar dari mode set
lastUpdate = millis(); // Catat waktu mulai
colonState = true;
digitalWrite(LED_SET, LOW); // Matikan LED Set
digitalWrite(LED_RUN, HIGH);// Nyalakan LED Run
}
}
// 4. Tombol Stop / Reset (BTN_STOP) dengan fitur Long Press (> 2 Detik)
if (!digitalRead(BTN_STOP)) {
if (!stopButtonHeld) {
stopPressTime = millis(); // Catat waktu awal tombol ditekan
stopButtonHeld = true;
} else {
// Jika tombol ditahan selama 2 detik atau lebih -> RESET TOTAL
if (millis() - stopPressTime >= 2000) {
isRunning = false;
isSetting = true;
minutes = initMinutes; // Kembalikan durasi ke awal
seconds = 0;
colonState = true;
digitalWrite(LED_RUN, LOW);
digitalWrite(LED_SET, HIGH);
updateDisplay();
stopButtonHeld = false;
delay(500);
}
}
} else {
// Jika tombol dilepas sebelum 2 detik -> PAUSE / JEDAKAN TIMER
if (stopButtonHeld && (millis() - stopPressTime < 2000)) {
if (isRunning) {
isRunning = false; // Pause timer
digitalWrite(LED_RUN, LOW);
}
}
stopButtonHeld = false;
}
}
// Fungsi untuk memperbarui tampilan teks dan angka pada layar LCD 16x2
void updateDisplay() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(isSetting ? "Set Timer:" : "Running:"); // Menampilkan status mode
// Menampilkan format waktu MM:SS dengan tambahan angka nol di depan (leading zero)
lcd.setCursor(0, 1);
lcd.print(minutes < 10 ? "0" : "");
lcd.print(minutes);
lcd.print(colonState ? ":" : " "); // Kedip titik dua setiap detik
lcd.print(seconds < 10 ? "0" : "");
lcd.print(seconds);
}
// Fungsi untuk mengedipkan LED indikator sebanyak 'times' kali
void flashLED(int pin, int times) {
for (int i = 0; i < times; i++) {
digitalWrite(pin, HIGH);
delay(200);
digitalWrite(pin, LOW);
delay(200);
}
}
// Fungsi untuk membunyikan melodi alarm buzzer saat timer selesai
void playTune() {
int melody[] = {1047, 1319, 1568, 2093, 0, 2093}; // Frekuensi nada (Hz)
int noteDurations[] = {200, 200, 200, 400, 100, 400}; // Durasi setiap nada (ms)
for (int i = 0; i < 6; i++) {
int note = melody[i];
int duration = noteDurations[i];
if (note == 0) {
noTone(BUZZER); // Jeda tanpa suara
} else {
tone(BUZZER, note); // Bunyikan nada sesuai frekuensi
}
delay(duration);
noTone(BUZZER);
delay(50);
}
}
Kode Arduino 1. Kode Program

Video 1. Video tutorial pembuatan
TAG:
timer digital arduino, countdown timer wrokwi, alarm timer push button, lcd 16×2 i2c arduino, buzzer melodi alarm, led indikator timer, tutorial arduino uno, jam hitung mundur digital, library liquidcrystal i2c, pinout push button arduino, fungsi millis delay arduino, long press stop button arduino, pin digital arduino uno, i2c lcd display arduino, navigasi set timer running, fungsi up down start stop, array melodi buzzer c++, tutorial wokwi indonesia, simulasi iot timer digital, pengaturan waktu digital, lcd screen display timer, datastream lcd display, smart timer appliances, proyek teknik elektro kreatif, mekatronika timer digital, tugas akhir arduino lcd, skripsi iot countdown timer, ide proyek mikrokontroler timer, skematik timer digital arduino, diagram rangkaian button lcd buzzer, source code timer digital oled, program arduino lcd timer, simulasi iot tanpa hardware, platform simulasi wokwi, wokwi arduino countdown timer, alat timer berbasis mikrokontroler, telemetry data lcd screen, proyek sains elektro, portofolio mikrokontroler timer, praktikum arduino uno, modul lcd 16×2 i2c, pinout arduino button buzzer, indikator status led run set, grafik hitung mundur lcd, timer konsol digital mini, efisiensi waktu elektronik, panduan arduino lcd display, belajar mikrokontroler online, simulator komponen elektronik, wokwi custom chip timer, internet of things indonesia, iot smk teknik elektro, iot universitas teknik, prototipe timer lcd arduino, alat pengatur waktu otomatis, smart timer project, arduino ide programming, tutorial arduino pemula, proyek elektro timer digital, panduan lengkap wokwi lcd, sensor button tekan akurat, sistem animasi layar lcd, logika hitung mundur detik menit, notifikasi suara alarm buzzer, sistem kendali interaktif, otomatisasi timer elektronik, proyek mekatronika elektro, simulasi hardware countdown timer, sistem timer digital arduino, proyek arduino populer, kodingan timer otomatis, liquidcrystal library arduino, rangkaian button dan buzzer, tutorial mikrokontroler pemula, wawasan teknik elektro, aplikasi lcd display timer, konsol timer mini arduino, koding logika millis hitung mundur, pemantauan status waktu real time, arduino timer management system
