3 Langkah - Tutorial Belajar Arduino RTC (Real Time Clock) DS1307 DS3231

www.tutorialiot.com

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

Terimakasih sudah membaca tutorial ini semoga bermanfaat, jangan lupa bagikan ke teman-teman kalian tentang apa yang sudah kalian dapat saat ini...

Post a Comment

3 Comments

  1. untuk pengkabelan bgmn bang..dan bgmna klo kta mnmpilkna ke layar panel p10?

    ReplyDelete
    Replies
    1. pengkabelan bisa dilihat di gambar skematik fritzing diatas bang, lain kali saya buatkan tutorial agar bisa tampil di layar panel p10

      Delete
  2. Permisi mas, mau tanya. Kalau untuk rtds1307 mengakses di esp32 bagaimana ya ?

    ReplyDelete