Module RTC DS3231 adalah salah satu jenis modul yang berfungsi sebagai Real Time Clock atau pengatur waktu berbasis IC AT24C32.
Interface untuk mengakses modul ini hanya menggunakan 2 Data (SDA dan SCL) dan 2 pin Power (VCC dan GND).
![]() |
Gambar: Pin Out RTC DS3231 - by lastminuteengineers.com |
Berikut ini adalah spesifikasi dari Modul RTC DS3231
- Real Time Clock menghitung Detik, Menit, Jam, Hari, Tanggal, Bulan, dan Tahun.
- Kecepatan data transfer adalah 400kHz.
- Low Power Operation memperpanjang masa baterai.
- Tegangan operasi: 3,3 - 5 Volt DC.
- Ketepatan Jam: Kisaran 0-40, akurasi 2ppm, kesalahannya sekitar 1 menit.
- Ukuran: 38mm (panjang) * 22mm (W) * 14mm (tinggi)
Hardware
Berikut ini beberapa komponen yang harus disiapkan:
- Arduino Uno.
- Module RTC DS3231.
- Kabel jumper.
- Komputer + Software Arduino IDE
Skematik
Rangkailah komponen diatas seperti gambar berikut:
![]() |
Gambar: Skema Rangkaian Modul RTC DS3231 |
Dibawah ini terdapat link download Library yang dibutuhkan.
library Sodaq_DS3231 - Download
Sebelum memasukan program waktu otomatis, harus terlebih dahulu memasukan library Sodaq_DS3231 yang dapat di download di link diatas:
Baca:
Program
Setelah merangkai komponen seperti diatas dan sudah memaskkan library RTC, selanjutnya upload program dibawah ini ke Arduino.
Program_Atur_Waktu_RTC_Otomatis.ino - Download
#include <EEPROM.h>
#include <Wire.h>
#include <Sodaq_DS3231.h>
#define alamatRTC 0x68
#define alamatEEPROMCekToken 0
#define tokenRTC 0xAA //<== rubah token jika ingin nilai baru
void setup() {
Serial.begin(9600);
Serial.println("Set waktu RTC otomatis dengan arduino");
Serial.println("http://www.hestech.id/");
Serial.println();
Wire.begin();
if (EEPROM.read(alamatEEPROMCekToken) != tokenRTC)
{
//Waktu compiler
char bulan[12];
byte indexBulan;
int jam, menit, detik, tanggal, tahun;
char *namaBulan[12] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
sscanf(__TIME__, "%d:%d:%d", &jam, &menit, &detik);
sscanf(__DATE__, "%s %d %d", bulan, &tanggal, &tahun);
for (indexBulan = 0; indexBulan < 12; indexBulan++) {
if (strcmp(bulan, namaBulan[indexBulan]) == 0)
break;
}
uint8_t wday = hariDariTanggal(tanggal, indexBulan + 1, tahun);
DateTime dt(tahun, indexBulan + 1, tanggal, jam, menit, detik, wday);
rtc.setDateTime(dt);
EEPROM.write(alamatEEPROMCekToken, tokenRTC);
Serial.println("RTC sudah otomatis di setting (Sekali saja)");
}
}
uint32_t old_ts;
void loop() {
String strNamaHari[] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};
DateTime now = rtc.now(); //get the current date-time
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.date(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(' ');
Serial.print(strNamaHari[now.dayOfWeek()-1]);
Serial.println();
while (1);
}
byte hariDariTanggal(byte tanggal, byte bulan, uint16_t tahun)
{
uint16_t jumlahHariPerBulanMasehi[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
if (tahun >= 2000)
tahun -= 2000;
uint32_t jumlahHari = tahun * 365;
uint16_t tahunKabisat = tahun / 4;
for (byte i = 0; i < tahun; i++)
{
if (!(i % 4))
{
jumlahHari++;
}
}
jumlahHari += jumlahHariPerBulanMasehi[bulan - 1];
if ( (bulan >= 2) && !(tahun % 4))
{
jumlahHari++;
}
jumlahHari += tanggal;
return ((jumlahHari + 5) % 7) + 1;
}
Setelah selesai menuliskan program diatas, kemudian compile program untuk memastikan tidak ada eror. Jika tidak ada permasalahan maka akan menampilkan tulisan done compile dan program siap untuk diupload.
![]() |
Program RTC DS3231 Siap di Upload |
Setelah terupload, kemudian buka serial monitor. Maka akan menampilkan jam yang telah tersinkron dengan PC/laptop. Tetapi pastikan jam dan tanggal pada PC/laptopnya sudah cocok
![]() |
Tampilan Timer pada Serial Monitor |
Selesai
comment 0 komentar
more_vert