Apa itu RTC (Real Time Clock)?
RTC atau yang biasa disebut dengan "Real Time Clock" merupakan sebuah modul yang sering kali dipakai untuk memberikan masukan atau nilai waktu secara nyata pada mikrokontroller/sejenisnya, modul ini memiliki baterai koin yang digunkan untuk menjaga modul dalam keadaan ON meski mikrokontroller dimatikan.RTC memiliki keluaran nilai berupa : Tahun, Bulan, Tanggal, Hari, Jam, Menit, dan Detik yang bisa dimanfaatkan untuk memetakan hasil suatu kegiatan yang dilakukan oleh mikrokontroller ke dalam waktu yang nyata. Berikut ini adalah langkah - langkah yang harus dilakukan :
1. Cara Merangkai Arduino dan Modul RTC DS1307 / DS3231
Sebelum membuat rangkaian, pastikan semua bahan sudah ada dan dalam kondisi baik, sehingga memudahkan proses perakitan dan uji coba, perhatikan gambar di bawah ini.
Setelah semua komponen terhubung dengan baik dan benar langkah selanjutnya adalah membuat kode program untuk menjalankan perintah agar modul RTC dapat diambil nilainya mulai dari Tahun, Bulan, Tanggal, Hari, Jam, Menit, dan Detik. Berikut ini adalah kode programnya.
2. Kode Program Arduino dan Modul RTC (Real Time Clock) DS1307 / DS3231
#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68
//Konvesri nilai nomor desimal ke biner
byte decToBcd(byte val)
{
return( (val/10*16) + (val%10) );
}
// Konversi Biner ke Desimal
byte bcdToDec(byte val)
{
return( (val/16*10) + (val%16) );
}
void setup()
{
Wire.begin();
Serial.begin(9600);
// Pengaturan waktu da di bawah ini
// DS3231 Detik, menit, jam, hari, tanggal, bulan, tahun
setDS3231time(30,42,16,5,13,10,19);
}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
// Pengaturan waktu dn tanggal modul RTC
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0);
Wire.write(decToBcd(second)); // pengaturan detik
Wire.write(decToBcd(minute)); // pengaturan menit
Wire.write(decToBcd(hour)); // pengaturan jam
Wire.write(decToBcd(dayOfWeek)); // pengaturan hari dari (Minggu - Sabtu)
Wire.write(decToBcd(dayOfMonth)); // Pengaturan tanggal dari (1-31)
Wire.write(decToBcd(month)); // Pengaturan Bulan
Wire.write(decToBcd(year)); // Pengaturan dari (0 - 99)
Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
// Meminta 7 byte data dari modul RTC untuk memulai register 00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
void displayTime()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// Mengambil data dari modul RTC
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
&year);
// Mengirim hasil nilai ke Serial Monitor
Serial.print(hour, DEC);
// Mengkonversi variabel byte ke dalam nilai desimal
Serial.print(":");
if (minute<10)
{
Serial.print("0");
}
Serial.print(minute, DEC);
Serial.print(":");
if (second<10)
{
Serial.print("0");
}
Serial.print(second, DEC);
Serial.print(" ");
Serial.print(dayOfMonth, DEC);
Serial.print("/");
Serial.print(month, DEC);
Serial.print("/");
Serial.print(year, DEC);
Serial.print(" Day of week: ");
switch(dayOfWeek){
case 1:
Serial.println("Sunday");
break;
case 2:
Serial.println("Monday");
break;
case 3:
Serial.println("Tuesday");
break;
case 4:
Serial.println("Wednesday");
break;
case 5:
Serial.println("Thursday");
break;
case 6:
Serial.println("Friday");
break;
case 7:
Serial.println("Saturday");
break;
}
}
void loop()
{
displayTime(); // Menampilkan data RTC pada Serial Monitor
delay(1000); // Setiap Detik
}
3. Uji coba
Berikut ini adalah gambar hasil uji coba menampilkan nilai dari modul RTC ke dalam Serial Monitor.
apabila temen-temen mengalami kesulitan saat melakukan perangkaian atau pembuatan kode program modul RTC DS3231 / DS1307 dengan Arduino, langsung saja tulis di dalam kolom komentar atau menghubungi saya via Telegram di @mazatlumm
3 Comments
untuk pengkabelan bgmn bang..dan bgmna klo kta mnmpilkna ke layar panel p10?
ReplyDeletepengkabelan bisa dilihat di gambar skematik fritzing diatas bang, lain kali saya buatkan tutorial agar bisa tampil di layar panel p10
DeletePermisi mas, mau tanya. Kalau untuk rtds1307 mengakses di esp32 bagaimana ya ?
ReplyDelete