Proyek jam digital berbasis Arduino menjadi salah satu proyek edukasi yang banyak diminati. Selain berguna untuk menampilkan waktu secara real-time, proyek ini juga mengajarkan bagaimana mengintegrasikan modul waktu nyata (RTC) dan tampilan LCD ke dalam satu sistem. Dalam proyek ini kita akan menggunakan RTC DS3231 dan LCD 16×2 dengan modul I2C.
Modul RTC DS3231 memiliki akurasi tinggi dan tetap menyimpan data waktu meskipun Arduino dimatikan, karena dilengkapi baterai backup. Sedangkan LCD I2C dipilih agar hemat pin, cukup menggunakan dua kabel untuk komunikasi data (SDA dan SCL). Proyek ini cocok untuk display ruangan, jam dinding digital, atau sistem pengatur waktu otomatis.
Program menggunakan library RTClib dari Adafruit dan LiquidCrystal_I2C, sehingga instalasi mudah dan coding menjadi ringkas. Waktu akan ditampilkan dalam format tanggal, hari, dan jam secara terus menerus di LCD.
Komponen yang Digunakan
- 1x Arduino Uno / Nano
- 1x Modul RTC DS3231
- 1x LCD 16×2 + I2C backpack
- Kabel jumper secukupnya
- Breadboard (opsional)
Skema Rangkaian

Koneksi Rangkaian
Komponen | Arduino |
---|---|
VCC RTC | 5V |
GND RTC | GND |
SDA RTC | A4 |
SCL RTC | A5 |
VCC LCD I2C | 5V |
GND LCD I2C | GND |
SDA LCD I2C | A4 |
SCL LCD I2C | A5 |
📝 Catatan: Koneksi ini berlaku untuk Arduino Uno & Nano. Untuk Mega, pin SDA = 20 dan SCL = 21.
Library yang Harus ditambahkan
Catatan: Semua library bisa juga diinstal melalui Arduino IDE lewat Sketch → Include Library → Manage Libraries…
Kode Program Lengkap
//PROGRAM INI DI BUAT OLEH : MANFAHBOT INDUSTRIAL AUTOMATION
//HAK CIPTA PROGRAM/CODING : LUKMAN HAKIM A.
//WEBSITE : http://manfahbot.cc
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h>
RTC_DS3231 rtc;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C bisa juga 0x3F
char namaHari[7][12] = {"Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"};
void setup() {
Wire.begin();
lcd.begin();
lcd.backlight();
rtc.begin();
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
lcd.setCursor(0, 0);
lcd.print(" JAM DIGITAL ");
delay(1500);
lcd.setCursor(0, 1);
lcd.print(" LABELEKTRONIKA ");
delay(1500);
lcd.clear();
}
void loop() {
DateTime now = rtc.now();
lcd.setCursor(0, 0);
lcd.print(namaHari[now.dayOfTheWeek()]);
lcd.print(", ");
printAngka(now.day());
lcd.print("-");
printAngka(now.month());
lcd.print("-");
lcd.print(now.year());
lcd.setCursor(3, 1);
printAngka(now.hour());
lcd.print(":");
printAngka(now.minute());
lcd.print(":");
printAngka(now.second());
delay(1000);
}
void printAngka(int digits) {
if (digits < 10) {
lcd.print("0");
}
lcd.print(digits);
}
Penjelasan Singkat Program
- Menggunakan
LiquidCrystal_I2C
untuk komunikasi dua kabel antara Arduino dan LCD. - RTC DS3231 dikontrol menggunakan
RTClib
. - Fungsi
printAngka()
digunakan untuk menambahkan nol di depan angka < 10. - Tanggal ditampilkan dalam format
Hari, dd-mm-yyyy
. - Jam ditampilkan dalam format
hh:mm:ss
di baris kedua.
Kesimpulan
Proyek jam digital ini sangat ideal untuk belajar mikrokontroler dan tampilan waktu. Dengan penggunaan RTC DS3231 dan LCD I2C, sistem menjadi lebih efisien, rapi, dan hemat pin. Proyek ini dapat dikembangkan menjadi jam alarm otomatis, pengontrol relay berdasarkan waktu, atau bahkan jam berbasis IoT.