Pendahuluan
Pada tutorial ini, kita akan membahas cara menggunakan modul RTC DS3231 dengan Arduino UNO dan menampilkan data waktu pada LCD 16×2 menggunakan I2C. RTC (Real-Time Clock) merupakan komponen penting untuk menyimpan dan mengakses informasi waktu secara akurat, dan modul DS3231 adalah salah satu yang populer karena akurasinya yang tinggi.
Komponen Yang Digunakan
Berikut adalah daftar komponen yang digunakan dalam proyek ini beserta link pembelian di Golite Store:
- Arduino UNO – Beli Disini
- Modul RTC DS3231 – Beli Disini
- LCD 16×2 I2C – Beli Disini
- Kabel Jumper – Beli Disini
Skema Sistem

Konfigurasi Pinout
- Arduino UNO -> Modul RTC DS3231
- 5V -> VCC
- GND -> GND
- A4 -> SDA
- A5 -> SCL
- Arduino UNO -> LCD 16×2 I2C
- 5V -> VCC
- GND -> GND
- A4 -> SDA
- A5 -> SCL
Pada skema di atas, terlihat koneksi antara Arduino UNO dan modul RTC DS3231 menggunakan pin SDA dan SCL untuk komunikasi I2C. Koneksi antara Arduino UNO dan LCD 16×2 dilakukan melalui jalur I2C dengan bantuan kabel jumper.
Program Arduino
Program Set Data Tanggal di Modul RTC
#include <Wire.h> #include <TimeLib.h> #include <DS1307RTC.h> const char *monthName[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; tmElements_t tm; void setup() { bool parse = false; bool config = false; // get the date and time the compiler was run if (getDate(__DATE__) && getTime(__TIME__)) { parse = true; // and configure the RTC with this info if (RTC.write(tm)) { config = true; } } Serial.begin(115200); while (!Serial) ; // wait for Arduino Serial Monitor delay(200); if (parse && config) { Serial.print("DS1307 configured Time="); Serial.print(__TIME__); Serial.print(", Date="); Serial.println(__DATE__); } else if (parse) { Serial.println("DS1307 Communication Error :-{"); Serial.println("Please check your circuitry"); } else { Serial.print("Could not parse info from the compiler, Time=\""); Serial.print(__TIME__); Serial.print("\", Date=\""); Serial.print(__DATE__); Serial.println("\""); } } void loop() { } bool getTime(const char *str) { int Hour, Min, Sec; if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false; tm.Hour = Hour; tm.Minute = Min; tm.Second = Sec; return true; } bool getDate(const char *str) { char Month[12]; int Day, Year; uint8_t monthIndex; if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false; for (monthIndex = 0; monthIndex < 12; monthIndex++) { if (strcmp(Month, monthName[monthIndex]) == 0) break; } if (monthIndex >= 12) return false; tm.Day = Day; tm.Month = monthIndex + 1; tm.Year = CalendarYrToTm(Year); return true; }
Program Pembacaan Data Tanggal dan Tampil di LCD
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <TimeLib.h> #include <DS1307RTC.h> LiquidCrystal_I2C lcd (0x27, 16, 2); const char *monthName[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; void setup() { Serial.begin(115200); lcd.init(); lcd.backlight(); lcd.setCursor(0,0); lcd.print(" Jam Arduino "); lcd.setCursor(0,1); lcd.print(" RTC DS3231 "); delay(3000); lcd.clear(); Serial.println("DS1307RTC Read"); Serial.println("-------------------"); } void loop() { tmElements_t tm; if (RTC.read(tm)) { Serial.print("Ok, Time = "); print2digits(tm.Hour); Serial.write(':'); print2digits(tm.Minute); Serial.write(':'); print2digits(tm.Second); Serial.print(", Date (D/M/Y) = "); Serial.print(tm.Day); Serial.write('/'); Serial.print(monthName[tm.Month - 1]); Serial.write('/'); Serial.print(tmYearToCalendar(tm.Year)); Serial.println(); lcd.setCursor(0,0); lcd.print(" "); lcd.print(tm.Day); lcd.print("/"); lcd.print(monthName[tm.Month - 1]); lcd.print("/"); lcd.print(tmYearToCalendar(tm.Year)); lcd.setCursor(0,1); lcd.print(" "); lcd.print(tm.Hour); lcd.print(":"); lcd.print(tm.Minute); lcd.print(":"); lcd.print(tm.Second); lcd.print(" "); } else { if (RTC.chipPresent()) { Serial.println("The DS1307 is stopped. Please run the SetTime"); Serial.println("example to initialize the time and begin running."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } delay(9000); } delay(1000); } void print2digits(int number) { if (number >= 0 && number < 10) { Serial.write('0'); } Serial.print(number); }
Library yang harus di download :
Penjelasan Program
- Program Set Data Tanggal di Modul RTC:
- Menggunakan library Wire, TimeLib, dan DS1307RTC.
- Setup mencoba membaca tanggal dan waktu dari compiler.
- Jika berhasil, konfigurasi RTC dengan informasi ini.
- Program Pembacaan Data Tanggal dan Tampil di LCD:
- Menggunakan library Wire, LiquidCrystal_I2C, TimeLib, dan DS1307RTC.
- Setup menginisialisasi LCD dan menampilkan pesan pembuka.
- Loop membaca data tanggal dan waktu dari RTC dan menampilkannya di Serial Monitor dan LCD.
Pengujian


Pada pengujian, data tanggal dan waktu berhasil ditampilkan dengan benar pada LCD.
Kesimpulan
Dengan mengikuti tutorial ini, Kita telah berhasil menggunakan modul RTC DS3231 dengan Arduino UNO dan menampilkan data waktu pada LCD 16×2. Proyek ini dapat diperluas dengan menambahkan fitur-fitur tambahan atau digunakan sebagai dasar untuk proyek-proyek lain yang melibatkan waktu dan tanggal. Selamat mencoba dan eksplorasi lebih lanjut!