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