{"id":663,"date":"2026-11-09T04:23:14","date_gmt":"2026-11-09T04:23:14","guid":{"rendered":"https:\/\/kuliahelektro.org\/?p=663"},"modified":"2026-11-09T04:23:15","modified_gmt":"2026-11-09T04:23:15","slug":"tutorial-arduino-cara-membuat-timer-hitung-mundur-digital-digital-countdown-timer-dilengkapi-buzzer-alarm-indikator-led-status-tombol-kontrol-pada-simulator-wokwi","status":"publish","type":"post","link":"https:\/\/kuliahelektro.org\/?p=663","title":{"rendered":"Tutorial Arduino: Cara Membuat Timer Hitung Mundur Digital (Digital Countdown Timer) Dilengkapi Buzzer Alarm, Indikator LED Status, &amp; Tombol Kontrol pada Simulator WOKWI"},"content":{"rendered":"\n<p>Pada bagian ini akan dibahas pembuatan proyek timer hitung mundur digital interaktif (Digital Countdown Timer System) berbasis mikrokontroler Arduino Uno \/ ESP32, layar LCD 16&#215;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.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.youtube.com\/watch?v=oiY1cREDO_M&amp;lc=UgzTGyz7q0s7n_4YoXN4AaABAg\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"710\" src=\"https:\/\/kuliahelektro.org\/wp-content\/uploads\/2026\/11\/image-22-1024x710.png\" alt=\"\" class=\"wp-image-665\" style=\"aspect-ratio:1.4422535211267606;width:573px;height:auto\" srcset=\"https:\/\/kuliahelektro.org\/wp-content\/uploads\/2026\/11\/image-22-1024x710.png 1024w, https:\/\/kuliahelektro.org\/wp-content\/uploads\/2026\/11\/image-22-300x208.png 300w, https:\/\/kuliahelektro.org\/wp-content\/uploads\/2026\/11\/image-22-768x532.png 768w, https:\/\/kuliahelektro.org\/wp-content\/uploads\/2026\/11\/image-22.png 1105w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure><\/div>\n\n\n<p class=\"has-text-align-center\"><strong>Gambar 1. Skematik rangkaian sistem<\/strong><\/p>\n\n\n\n<p><strong>List Pin:<\/strong><\/p>\n\n\n\n<ul>\n<li>Modul Tombol Kontrol (Push Button dengan Konfigurasi Input Pull-Up)<br>Tombol Tambah Waktu (BTN_UP) =&gt; Digital Pin 2<br>Tombol Kurang Waktu (BTN_DOWN) =&gt; Digital Pin 3<br>Tombol Mulai \/ Start (BTN_START)=&gt; Digital Pin 4<br>Tombol Stop \/ Reset (BTN_STOP) =&gt; Digital Pin 5<\/li>\n\n\n\n<li>Aktuator Output Audio &amp; Indikator LED<br>Piezo Buzzer Alarm (BUZZER) =&gt; Digital Pin 6<br>LED Indikator Mode Set (LED_SET)=&gt; Digital Pin 7 (Dilengkapi Resistor 220 Ohm ke GND)<br>LED Indikator Mode Run (LED_RUN)=&gt; Digital Pin 8 (Dilengkapi Resistor 220 Ohm ke GND)<\/li>\n\n\n\n<li>Layar LCD Display I2C (16&#215;2 LiquidCrystal_I2C)<br>SDA =&gt; Pin SDA (A4 pada Arduino Uno \/ GPIO 21 pada ESP32)<br>SCL =&gt; Pin SCL (A5 pada Arduino Uno \/ GPIO 22 pada ESP32)<br>VCC =&gt; 5V \/ 3.3V<br>GND =&gt; GND<\/li>\n<\/ul>\n\n\n\n<p><strong>List Virtual PIN:<\/strong><\/p>\n\n\n\n<ul>\n<li>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.<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ ============================================================================\r\n\/\/ PROYEK: TIMER DIGITAL DENGAN ALARM &amp; INDIKATOR LED MENGGUNAKAN BUTTON\r\n\/\/ PLATFORM: ARDUINO \/ SIMULATOR WOKWI\r\n\/\/ ============================================================================\r\n\r\n#include &lt;Wire.h>\r\n#include &lt;LiquidCrystal_I2C.h>\r\n\r\n\/\/ Definisi Pin Tombol (Push Button) dengan Pull-Up Internal\r\n#define BTN_UP     2   \/\/ Tombol untuk menambah menit\r\n#define BTN_DOWN   3   \/\/ Tombol untuk mengurangi menit\r\n#define BTN_START  4   \/\/ Tombol untuk memulai timer\r\n#define BTN_STOP   5   \/\/ Tombol untuk pause (tekan singkat) atau reset (tahan 2 detik)\r\n\r\n\/\/ Definisi Pin Output (Buzzer &amp; LED Indikator)\r\n#define BUZZER     6   \/\/ Pin untuk buzzer alarm suara\r\n#define LED_SET    7   \/\/ LED menyala saat mode pengaturan waktu (Set)\r\n#define LED_RUN    8   \/\/ LED menyala saat timer sedang berjalan (Running)\r\n\r\n\/\/ Inisialisasi Objek LCD I2C (Alamat: 0x27, Lebar: 16 kolom, Tinggi: 2 baris)\r\nLiquidCrystal_I2C lcd(0x27, 16, 2);\r\n\r\n\/\/ Variabel Waktu dan Penghitung\r\nunsigned long lastUpdate = 0;     \/\/ Variabel penyimpan waktu millis terakhir untuk jeda 1 detik\r\nunsigned long stopPressTime = 0;  \/\/ Variabel untuk menghitung durasi tahan tombol stop (long press)\r\nbool isRunning = false;           \/\/ Status apakah timer sedang berjalan (true\/false)\r\nbool isSetting = true;            \/\/ Status apakah sistem sedang dalam mode pengaturan waktu\r\nbool stopButtonHeld = false;      \/\/ Status pengecekan tombol stop sedang ditekan\r\nbool colonState = true;           \/\/ Status kedipan titik dua (:) pada LCD setiap detik\r\n\r\nint minutes = 0;                  \/\/ Nilai variabel menit saat ini\r\nint seconds = 0;                  \/\/ Nilai variabel detik saat ini\r\nint initMinutes = 0;              \/\/ Menyimpan nilai awal menit untuk keperluan reset otomatis\r\n\r\nvoid setup() {\r\n  \/\/ Konfigurasi pin tombol sebagai INPUT dengan pull-up internal (aktif LOW)\r\n  pinMode(BTN_UP, INPUT_PULLUP);\r\n  pinMode(BTN_DOWN, INPUT_PULLUP);\r\n  pinMode(BTN_START, INPUT_PULLUP);\r\n  pinMode(BTN_STOP, INPUT_PULLUP);\r\n\r\n  \/\/ Konfigurasi pin aktuator sebagai OUTPUT\r\n  pinMode(LED_SET, OUTPUT);\r\n  pinMode(LED_RUN, OUTPUT);\r\n  pinMode(BUZZER, OUTPUT);\r\n\r\n  \/\/ Kondisi awal saat perangkat dinyalakan\r\n  digitalWrite(LED_SET, HIGH);    \/\/ LED Set menyala (siap diatur)\r\n  digitalWrite(LED_RUN, LOW);     \/\/ LED Run mati\r\n  digitalWrite(BUZZER, LOW);      \/\/ Buzzer mati\r\n\r\n  \/\/ Inisialisasi layar LCD\r\n  lcd.init();\r\n  lcd.backlight();\r\n  updateDisplay();                \/\/ Tampilkan menu awal di layar LCD\r\n}\r\n\r\nvoid loop() {\r\n  \/\/ Membaca dan memproses input dari tombol-tombol\r\n  handleButtons();\r\n\r\n  \/\/ Logika hitung mundur (Countdown) berjalan jika isRunning bernilai TRUE dan sudah lewat 1 detik (1000 ms)\r\n  if (isRunning &amp;&amp; millis() - lastUpdate >= 1000) {\r\n    lastUpdate = millis();        \/\/ Perbarui waktu referensi terakhir\r\n\r\n    if (seconds > 0 || minutes > 0) {\r\n      if (seconds == 0) {\r\n        if (minutes > 0) {\r\n          minutes--;              \/\/ Kurangi 1 menit jika detik habis\r\n          seconds = 59;           \/\/ Reset detik menjadi 59\r\n        }\r\n      } else {\r\n        seconds--;                \/\/ Kurangi 1 detik\r\n      }\r\n      colonState = !colonState;   \/\/ Ubah status kedipan titik dua setiap detik\r\n      updateDisplay();            \/\/ Segarkan tampilan LCD\r\n    } else {\r\n      \/\/ --- KONDISI KETIKA TIMER SELESAI (WAKTU HABIS) ---\r\n      isRunning = false;          \/\/ Hentikan timer\r\n      playTune();                 \/\/ Mainkan melodi alarm buzzer\r\n      flashLED(LED_RUN, 5);       \/\/ Kedipkan LED Run sebanyak 5 kali\r\n      \r\n      \/\/ Kembalikan ke mode pengaturan awal\r\n      digitalWrite(LED_SET, HIGH);\r\n      digitalWrite(LED_RUN, LOW);\r\n      isSetting = true;\r\n      minutes = initMinutes;      \/\/ Kembalikan waktu ke durasi awal\r\n      seconds = 0;\r\n      colonState = true;\r\n      updateDisplay();\r\n    }\r\n  }\r\n}\r\n\r\n\/\/ Fungsi untuk menangani seluruh aksi tombol (Button Handlers)\r\nvoid handleButtons() {\r\n  \/\/ 1. Tombol Tambah Waktu (BTN_UP)\r\n  if (!digitalRead(BTN_UP)) {\r\n    delay(200);                   \/\/ Debounce sederhana\r\n    if (isSetting) {\r\n      minutes = min(minutes + 1, 99); \/\/ Tambah 1 menit, maksimal 99 menit\r\n      initMinutes = minutes;      \/\/ Perbarui waktu awal\r\n      updateDisplay();\r\n    }\r\n  }\r\n\r\n  \/\/ 2. Tombol Kurang Waktu (BTN_DOWN)\r\n  if (!digitalRead(BTN_DOWN)) {\r\n    delay(200);                   \/\/ Debounce sederhana\r\n    if (isSetting &amp;&amp; minutes > 0) {\r\n      minutes--;                  \/\/ Kurangi 1 menit, minimal 0 menit\r\n      initMinutes = minutes;      \/\/ Perbarui waktu awal\r\n      updateDisplay();\r\n    }\r\n  }\r\n\r\n  \/\/ 3. Tombol Mulai \/ Start (BTN_START)\r\n  if (!digitalRead(BTN_START)) {\r\n    delay(200);                   \/\/ Debounce sederhana\r\n    if ((minutes > 0 || seconds > 0) &amp;&amp; !isRunning) {\r\n      isRunning = true;           \/\/ Mulai jalankan timer\r\n      isSetting = false;          \/\/ Keluar dari mode set\r\n      lastUpdate = millis();      \/\/ Catat waktu mulai\r\n      colonState = true;\r\n      digitalWrite(LED_SET, LOW); \/\/ Matikan LED Set\r\n      digitalWrite(LED_RUN, HIGH);\/\/ Nyalakan LED Run\r\n    }\r\n  }\r\n\r\n  \/\/ 4. Tombol Stop \/ Reset (BTN_STOP) dengan fitur Long Press (> 2 Detik)\r\n  if (!digitalRead(BTN_STOP)) {\r\n    if (!stopButtonHeld) {\r\n      stopPressTime = millis();   \/\/ Catat waktu awal tombol ditekan\r\n      stopButtonHeld = true;\r\n    } else {\r\n      \/\/ Jika tombol ditahan selama 2 detik atau lebih -> RESET TOTAL\r\n      if (millis() - stopPressTime >= 2000) {\r\n        isRunning = false;\r\n        isSetting = true;\r\n        minutes = initMinutes;    \/\/ Kembalikan durasi ke awal\r\n        seconds = 0;\r\n        colonState = true;\r\n        digitalWrite(LED_RUN, LOW);\r\n        digitalWrite(LED_SET, HIGH);\r\n        updateDisplay();\r\n        stopButtonHeld = false;\r\n        delay(500);\r\n      }\r\n    }\r\n  } else {\r\n    \/\/ Jika tombol dilepas sebelum 2 detik -> PAUSE \/ JEDAKAN TIMER\r\n    if (stopButtonHeld &amp;&amp; (millis() - stopPressTime &lt; 2000)) {\r\n      if (isRunning) {\r\n        isRunning = false;        \/\/ Pause timer\r\n        digitalWrite(LED_RUN, LOW);\r\n      }\r\n    }\r\n    stopButtonHeld = false;\r\n  }\r\n}\r\n\r\n\/\/ Fungsi untuk memperbarui tampilan teks dan angka pada layar LCD 16x2\r\nvoid updateDisplay() {\r\n  lcd.clear();\r\n  lcd.setCursor(0, 0);\r\n  lcd.print(isSetting ? \"Set Timer:\" : \"Running:\"); \/\/ Menampilkan status mode\r\n\r\n  \/\/ Menampilkan format waktu MM:SS dengan tambahan angka nol di depan (leading zero)\r\n  lcd.setCursor(0, 1);\r\n  lcd.print(minutes &lt; 10 ? \"0\" : \"\");\r\n  lcd.print(minutes);\r\n  lcd.print(colonState ? \":\" : \" \"); \/\/ Kedip titik dua setiap detik\r\n  lcd.print(seconds &lt; 10 ? \"0\" : \"\");\r\n  lcd.print(seconds);\r\n}\r\n\r\n\/\/ Fungsi untuk mengedipkan LED indikator sebanyak 'times' kali\r\nvoid flashLED(int pin, int times) {\r\n  for (int i = 0; i &lt; times; i++) {\r\n    digitalWrite(pin, HIGH);\r\n    delay(200);\r\n    digitalWrite(pin, LOW);\r\n    delay(200);\r\n  }\r\n}\r\n\r\n\/\/ Fungsi untuk membunyikan melodi alarm buzzer saat timer selesai\r\nvoid playTune() {\r\n  int melody&#91;] = {1047, 1319, 1568, 2093, 0, 2093}; \/\/ Frekuensi nada (Hz)\r\n  int noteDurations&#91;] = {200, 200, 200, 400, 100, 400}; \/\/ Durasi setiap nada (ms)\r\n\r\n  for (int i = 0; i &lt; 6; i++) {\r\n    int note = melody&#91;i];\r\n    int duration = noteDurations&#91;i];\r\n    if (note == 0) {\r\n      noTone(BUZZER);             \/\/ Jeda tanpa suara\r\n    } else {\r\n      tone(BUZZER, note);         \/\/ Bunyikan nada sesuai frekuensi\r\n    }\r\n    delay(duration);\r\n    noTone(BUZZER);\r\n    delay(50);\r\n  }\r\n}<\/code><\/pre>\n\n\n\n<p class=\"has-text-align-center\"><strong>Kode Arduino 1. Kode Program<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.youtube.com\/watch?v=oiY1cREDO_M&amp;lc=UgzTGyz7q0s7n_4YoXN4AaABAg\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"575\" src=\"https:\/\/kuliahelektro.org\/wp-content\/uploads\/2026\/11\/image-21-1024x575.png\" alt=\"\" class=\"wp-image-664\" srcset=\"https:\/\/kuliahelektro.org\/wp-content\/uploads\/2026\/11\/image-21-1024x575.png 1024w, https:\/\/kuliahelektro.org\/wp-content\/uploads\/2026\/11\/image-21-300x169.png 300w, https:\/\/kuliahelektro.org\/wp-content\/uploads\/2026\/11\/image-21-768x431.png 768w, https:\/\/kuliahelektro.org\/wp-content\/uploads\/2026\/11\/image-21-1536x863.png 1536w, https:\/\/kuliahelektro.org\/wp-content\/uploads\/2026\/11\/image-21.png 1917w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><strong>Video 1. Video tutorial pembuatan<\/strong><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">TAG:<\/h1>\n\n\n\n<p class=\"has-text-align-left\">timer digital arduino, countdown timer wrokwi, alarm timer push button, lcd 16&#215;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&#215;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<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pada bagian ini akan dibahas pembuatan proyek timer hitung mundur digital interaktif (Digital Countdown Timer System) berbasis mikrokontroler Arduino Uno \/ ESP32, layar LCD 16&#215;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),&#8230;<\/p>\n","protected":false},"author":3,"featured_media":664,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"_links":{"self":[{"href":"https:\/\/kuliahelektro.org\/index.php?rest_route=\/wp\/v2\/posts\/663"}],"collection":[{"href":"https:\/\/kuliahelektro.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kuliahelektro.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kuliahelektro.org\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/kuliahelektro.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=663"}],"version-history":[{"count":1,"href":"https:\/\/kuliahelektro.org\/index.php?rest_route=\/wp\/v2\/posts\/663\/revisions"}],"predecessor-version":[{"id":666,"href":"https:\/\/kuliahelektro.org\/index.php?rest_route=\/wp\/v2\/posts\/663\/revisions\/666"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kuliahelektro.org\/index.php?rest_route=\/wp\/v2\/media\/664"}],"wp:attachment":[{"href":"https:\/\/kuliahelektro.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=663"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kuliahelektro.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=663"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kuliahelektro.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}