RTC DS3231 merupakan sebuah jenis modul yang dapat menghasilkan waktu digital secara realtime dengan tambahan sebuah baterai tipe kancing 3.3V yang berfungsi menyimpan data waktu ketika supply padam. Jenis ini dinilai yang paling akurat dibanding jenis lainnya seperti DS1302 dan DS1307. Untuk dapat menggunakannya pada Arduino kita hanya membutuhkan 2 buah pin yatitu pin SDA dan SCL, sisanya merupakan supply VCC dan GND. Di bawah ini akan dibahas lebih lengkapnya.
Alat dan bahan :
- Arduino Uno R3, BELI
- RTC DS3231 + Batreai CR2032, BELI
- Kabel jumper male to female, BELI
- Library RTClib untuk DS3231, download
Rangkaian :

Konfigurasi pin :
- Pin SCL dihubungkan ke A5
- Pin SDA dihubungkan ke A4
- VCC dihubungkan ke 3.3V
- GND dihubungkan ke GND
Sketch program :
#include <Wire.h> #include "RTClib.h" RTC_DS3231 rtc; char daysOfTheWeek[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"}; void setup () { Serial.begin(9600); delay(3000); if (! rtc.begin()) { Serial.println("RTC tidak terbaca"); while (1); } if (rtc.lostPower()) { //atur waktu sesuai waktu pada komputer rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //atur waktu secara manual // January 21, 2019 jam 10:30:00 // rtc.adjust(DateTime(2019, 1, 25, 10, 30, 0)); } } void loop () { DateTime now = rtc.now(); Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);//hari Serial.print(", "); Serial.print(now.day(), DEC); //tanggal Serial.print('/'); Serial.print(now.month(), DEC); //bulan Serial.print('/'); Serial.print(now.year(), DEC); //tahun Serial.print(' '); Serial.print(now.hour(), DEC); //jam Serial.print(':'); Serial.print(now.minute(), DEC); //tanggal Serial.print(':'); Serial.print(now.second(), DEC); //detik Serial.println(); delay(1000); }
Penggunaan :
- Silahkan rangkai alat dan bahan sesuai keterangan di atas.
- Buka Arduino IDE, masukkan library RTClib yang sudah didownload. Caranya masuk ke menu Sketch > Include librari > add .ZIP library > silahkan pilih file library RTClib > klik Open
- Upload sketch program di atas.
- jika sudah selesai, silahkan beri tanda komentar “//” tanpa tanda petik pada sketch
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); - sehingga menjadi seperti ini

- Kemudian upload kembali sketch programnya.
- dan silahkan buka Serial Monitor dengan baudrate 9600
Hasil :
Maka hasilnya akan seperti di bawah ini

Demikian pembahasan tentang mengakses RTC DS3231 semoga bermanfaat.
min kok gagal ya hasilnya
baik tahun jam tanggal detik menit
semuanya 165
itu kenapa min
coba cek koneksi I2C-nya (SDA/SCL)
Min, kok waktunya meleset ya? Ketika saya setting manual waktunya tidak berubah? Bagaimana cara meresetnya ya?
buka komentar (karakter ‘//’) pada baris program 21, sesuaikan waktunya, kemudian running sekali aja. Habis itu jadikan komentar lagi
izin bantu menjawab min
bikin line baru om di bawa perintah if (rtc.lstpower) sama persis kaya perintah di if soalnya kalo masih yang didialam di ubah cuman bakal keganti if rtc nya loss power
kaya gini
void setup () {
Serial.begin(9600);
delay(3000);
if (! rtc.begin()) {
Serial.println(“RTC tidak terbaca”);
while (1);
}
if (rtc.lostPower()) {
//atur waktu sesuai waktu pada komputer
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//atur waktu secara manual
// January 21, 2019 jam 10:30:00
// rtc.adjust(DateTime(2019, 1, 25, 10, 30, 0));
}
//nah set nya dari line ini jangan dari ynag atas
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//atur waktu secara manual
// January 21, 2019 jam 10:30:00
// rtc.adjust(DateTime(2019, 1, 25, 10, 30, 0));
}
kalo udah beres seperti bisa kasih tanda strip lagi om
semoga membantu hehehe
ok, terima kasih
min ko detiknya gak konsisten yaa, ngelongkapngelongkap, kondisi saya gabungin sama kodingan lain
coba bikin script khusus utk rtc aja, jangan digabungin dengan yang lain. Kemudian dianalisa hasilnya
min mau tanya, kalau untuk pembacaan di lcd 16×2 I2C coding yg harus ditambahin apa ya?
sudah instal library-nya, blm?