Interface RTC DS3231 dengan Arduino dan I2C LCD

Menampilkan pembacaan waktu dan tanggal pada serial monitor

1. RTC DS3231 dihubungkan ke Arduino, koneksi pin dapat dilihat pada tabel di bawah ini:

Tabel 1. koneksi antara DS3231 dengan Arduino

koneksi ds3231 dengan arduino

2. Supaya lebih jelas, koneksi RTC DS3231 dengan Arduino Uno dapat dilihat pada gambar di bawah ini:

rtc ds3231 dengan arduino

Gambar 1. Arduino Uno interface dengan DS3231

3. Download library RTC DS3231, melalui link di bawah ini.

DS3231

4. Masukkan library tersebut dengan cara: klik sketch > include library > add .ZIP library…, lalu pilih file .ZIP yang sudah didownload.

5. Buat file baru di IDE Arduino, lalu ketikkan sintaks di bawah ini:

//Blog: pauzan.com
//Youtube: Muhammad Pauzan
//ini adalah koding untuk cek waktu saat ini di RTC DS3231, ditampilkan pada serial monitor

// Koneksi ke Arduino Uno:
// ----------------------
// DS3231: SDA pin ke A4 atau pada pin SDA
// SCL pin ke A5 atau pada pin SCL

#include <DS3231.h>

// menginisiasi DS3231
DS3231 rtc(SDA, SCL);

void setup()
{
  // Koneksi serial pada rate 115200
  Serial.begin(115200);

  // jika pakai arduino leonardo, hilangkan komen while di bawah ini
  // menginisiasi objek RTC
  rtc.begin();
}

void loop()
{
  // mengirimkan hari ke serial monitor
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");

  // mengirim tanggal ke serial monitor
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // mengirim waktu ke serial monitor
  Serial.println(rtc.getTimeStr());

  // tunggu 1 detik sebelum perulangan
  delay (1000);
}

6. Upload ke board Arduino
7. Klik sebelah kanan atas pada serial monitor, maka akan muncul tanggal dan waktu seperti pada gambar di bawah ini:

menampilkan waktu di serial monitor arduino

Gambar 2. Menampilkan waktu dan tanggal di serial monitor

Mengatur waktu pada RTC DS3231

Terkadang waktu yang terbaca pada DS3231 tidak sama dengan waktu yang kita inginkan, untuk mengatasi hal tersebut lakukan langkah-langkah berikut ini:
1. Koneksi DS3231 dengan Arduino seperti pada gambar 1 di atas.
2. Ingat library RTC DS3231 sudah dimasukkan ke IDE Arduino
3. Masukkan juga library RTClib, silahkan download pada link berikut ini:

RTClib

dan masukkan juga library I2C LCD, silahkan download di postingan saya disini.

4. Buat file baru di IDE Arduino dan ketikkan kode berikut ini:

//Blog: pauzan.com
//Youtube: Muhammad Pauzan

#include <DS3231.h>
/*
* koneksi
* SDA ke A4
* SCL ke A5
*/

#include "RTClib.h"

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); //0x27 adalah alamat i2c di LCD
#include <Wire.h>

RTC_DS3231 rtc;

char daysOfTheWeek[7][4] = {"Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"};

int Day;
int Month;
int Year;
int Secs;
int Minutes;
int Hours;

String dofweek; // hari

String myDate;
String myTime;

void setup ()
{
  Serial.begin(9600);
  lcd.begin();
  delay(2000); // delay 2 detik

  if (! rtc.begin()) {
  Serial.println("tidak menemukan RTC");
  while (1);
}

  if (rtc.lostPower()) {
  Serial.println("daya RTC hilang, set waktu");

  // Comment out below lines once you set the date and time.
  //Following line sets the RTC to the date and time this sketch was compiled
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

  // Following line sets the RTC with an explicit date and time
  // for example to set January 27 2017 at 12:56 you would call:
  // rtc.adjust(DateTime(2017, 1, 27, 12, 56, 0));
}
}

void loop ()
{
  DateTime now = rtc.now();
  lcd.clear();
  Day = now.day();
  Month = now.month();
  Year = now.year();
  Secs = now.second();
  Hours = now.hour();
  Minutes = now.minute();
  dofweek = daysOfTheWeek[now.dayOfTheWeek()]; 

  myDate = myDate +dofweek+ ", "+ Day + "/" + Month + "/" + Year ;
  myTime = myTime + Hours +":"+ Minutes +":" + Secs ;
  // send to serial monitor
  Serial.println(dofweek);
  Serial.println(myDate);
  Serial.println(myTime);
  //Print on lcd
  lcd.setCursor(0,0);
  lcd.print(myDate);
  lcd.setCursor(0,1);
  lcd.print("Jam: "+myTime);
  myDate = "";
  myTime = "";
  delay(1000);
}

5. Pada line ke-50 adalah kode untuk mengatur waktu, waktu disesuaikan dengan waktu yang ada di computer. Berikut kodenya:

rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //kode untuk set waktu, waktu sama dengan waktu di komputer

6. Upload ke board Arduino, lihat hasilnya pada serial monitor.
7. Jika waktu sudah sesuai, disable kode pada line 50 seperti di bawah ini:

//rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //kode untuk set waktu, waktu sama dengan waktu di komputer

8. Upload ulang, selesai.

Interface RTC DS3231 dengan I2C LCD dan Arduino

Selanjutnya kita tampilkan waktu hari bulan dan tahun dari DS3231 ke LCD, langkah-langkahnya sebagai berikut:
1. Buat rangkaian seprti pada tabel di bawah ini:

Tabel 2. Koneksi antara DS3231, Arduino Uno dan I2C LCD

Koneksi ds3231 dengan arduino dan lcd

Supaya lebih jelas, dapat dilihat rangkaian di bawah ini:

rtc dengan lcd dan arduino

Gambar 3. Koneksi DS3231 dengan Arduino dan I2C LCD

2. Buka file baru pada IDE Arduino, jangan lupa masukkan dahulu library I2C LCD, caranya dapat dilihat pada postingan saya ini.
3. Ketikkan kode program di bawah ini:

//Blog: pauzan.com
//Youtube: Muhammad Pauzan

#include <DS3231.h>
/*
* koneksi
* SDA ke A4
* SCL ke A5
*/

#include "RTClib.h"

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); //0x27 adalah alamat i2c di LCD
#include <Wire.h>

RTC_DS3231 rtc;

char daysOfTheWeek[7][4] = {"Min", "Sen", "Sel", "Rab", "Kam", "Jum", "Sab"};

int Day;
int Month;
int Year;
int Secs;
int Minutes;
int Hours;

String dofweek; // hari

String myDate;
String myTime;

void setup ()
{
  Serial.begin(9600);
  lcd.begin();
  lcd.setCursor(2,0);
  lcd.print("WELCOME TO");
  lcd.setCursor(2,1);
  lcd.print("pauzan.com");
  delay(2000); // delay 2 detik
  lcd.clear();

  if (! rtc.begin()) {
  Serial.println("tidak menemukan RTC");
  while (1);
}

  if (rtc.lostPower()) {
  Serial.println("daya RTC hilang, set waktu");

  // Comment out below lines once you set the date and time.
  // Following line sets the RTC to the date & time this sketch was compiled
  //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

  // Following line sets the RTC with an explicit date and time
  // for example to set January 27 2017 at 12:56 you would call:
  // rtc.adjust(DateTime(2017, 1, 27, 12, 56, 0));
}
}

void loop ()
{
  DateTime now = rtc.now();
  lcd.clear();
  Day = now.day();
  Month = now.month();
  Year = now.year();
  Secs = now.second();
  Hours = now.hour();
  Minutes = now.minute();
  dofweek = daysOfTheWeek[now.dayOfTheWeek()]; 

  myDate = myDate +dofweek+ ", "+ Day + "/" + Month + "/" + Year ;
  myTime = myTime + Hours +":"+ Minutes +":" + Secs ;
  // send to serial monitor
  Serial.println(dofweek);
  Serial.println(myDate);
  Serial.println(myTime);
  //Print on lcd
  lcd.setCursor(0,0);
  lcd.print(myDate);
  lcd.setCursor(0,1);
  lcd.print("Jam: "+myTime);
  myDate = "";
  myTime = "";
  delay(1000);
}

4. Upload ke Arduino, tampilannya seperti pada gambar 4 di bawah ini:

arduino dengan ds3231 dan lcd


Gambar 4. Waktu ditampilkan pada layar LCD

KE DAFTAR ISI

Leave a Reply

Your email address will not be published. Required fields are marked *