Jam Digital dengan Relay Time Clock RTC DS1307
Kali ini saya akan membahas mengenai Relay Time Clock atau biasa disebut disingkat dengan RTC yang akan digunakan sebagai logger untuk mencatat nilai sensor berdasarkan waktu sehingga dengan demikian, kita bisa tahu catatan logger setiap hari realtime. Data time series akan digunakan untuk analisis tingkat lanjut.
Ada banyak jenis yang bisa kita gunakan seperti module RTC DS3231. Kebetulan saya hanya punya RTC DS1307 dengan Interface atau antarmuka untuk mengakses modul ini yaitu menggunakan i2c atau two wire (SDA dan SCL). Sehingga apabila diakses menggunakan mikrontroler misal Arduino Uno pin yang dibutuhkan 2 pin saja dan 2 pin power. RTC DS1307 ini pada umumnya sudah tersedia dengan battery CR2032 3V yang berfungsi sebagai back up RTC apabila catudaya utama mati. RTC Ds1307 sangat irit daya sekali, saya sudah gunakan hampir 2 tahun tapi tidak pernah ganti baterai.
- Arduino
- Modul RTC DS1307
- kabel jumper secukupnya
Library :
Download library RTC DS1307 di sini (sumber adafruit)
Komunikasi RTC DS1307 denga Arduino menggunakan komunikasi I2C, pin yang digunakan pin SDA dan SCL.untuk lebih jelasnya sebagai berikut :
RTC DS1307 | Arduino |
SCL | A5 |
SDA | A4 |
VCC | +5V |
GND | Gnd |
Setting Jam berdasarkan Komputer
Contents
Jadi sebelum kita gunakan, kita harus setting RTC agar diset dengan jam yang ada dikomputer, caranya sebagai berikut
#include <Wire.h> #include "RTClib.h" RTC_DS1307 rtc; char namaHari[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"}; void setup () { Serial.begin(9600); if (! rtc.begin()) { Serial.println("RTC TIDAK TERBACA"); while (1); } if (! rtc.isrunning()) { Serial.println("RTC is NOT running!"); rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));//update rtc dari waktu komputer } } void loop () { }
jadi setelah kita setting untuk pertama kali, maka RTC tersebut akan mengikuti jam yang ada dikomputer. Nah selanjutnya kita bisa flash ulang menggunakan kode berikut
#include <Wire.h> #include "RTClib.h" RTC_DS1307 rtc; char namaHari[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"}; void setup () { Serial.begin(9600); rtc.begin(); } void loop () { DateTime now = rtc.now(); Serial.print(namaHari[now.dayOfTheWeek()]); Serial.print(','); Serial.print(now.day(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.year(), DEC); Serial.print(" "); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); delay(3000); }
Sambungkan dengan LCD 16×2. Agar tampilan lebih menarik, maka kita butuh LCD 2×16 untuk menampilkan jam digital diatas.
Cara mengakses modul display LCD 16×2
Spesifikasi dari LCD 16×2
Adapun fitur – fitur yang tersedia antara lain
- Terdiri dari 16 kolom dan 2 baris
- Dilengkapi dengan back light
- Mempunyai 192 karakter tersimpan
- Dapat dialamati dengan mode 4-bit dan 8-bit
- Terdapat karakter generator terprogram
Pin – pin LCD 16×2 dan keterangannya
Keterangan :
- GND : catu daya 0Vdc
- VCC : catu daya positif
- Constrate : untuk kontras tulisan pada LCD
- RS atau Register Select :
- High : untuk mengirim data
- Low : untuk mengirim instruksi
- R/W atau Read/Write
- High : mengirim data
- Low : mengirim instruksi
- Disambungkan dengan LOW untuk pengiriman data ke layar
- E (enable) : untuk mengontrol ke LCD ketika bernilai LOW, LCD tidak dapat diakses
- D0 – D7 = Data Bus 0 – 7
- Backlight + : disambungkan ke VCC untuk menyalakan lampu latar
- Backlight – : disambungkan ke GND untuk menyalakan lampu latar
Wiring nya yaitu
- Pin V0 pada LCD disambungkan ke kaki tengah potensiometer, sementara masing-masing kaki potensiometer yang ada di pinggir disambungkan ke VCC dan GND.
Jika nanti tampilan tulisannya kurang jelas, silakan putar-putar potensiometernya. - Pin R/W pada LCD disambungkan ke GND
- Pin RS pada LCD disambungkan ke pin 12 pada Arduino
- Pin E pada LCD disambungkan ke pin 11 pada Arduino
- Pin untuk data (D4 – D7) pada LCD disambungkan ke pin 5, 4, 3, 2, pada Arduino
- D4 ke pin no 5
- D5 ke pin no 4
- D6 ke pin no 3
- D7 ke pin no 2
- VDD dan A pada LCD disambungkan ke +5v
- VSS dan K pada LCD disambungkan ke GND
Lebih jelasnya kalian bisa melihat disini
Maka untuk menampilkan jam digitalnya gunakan kode berikut
#include <Wire.h> #include "RTClib.h" #include <LiquidCrystal.h> RTC_DS1307 rtc; char namaHari[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"}; LiquidCrystal lcd(12,11,5,4,3,2); void setup() { lcd.begin(16, 2); lcd.setCursor(00,00); //set pada baris 1 dan kolom 1 rtc.begin(); Serial.begin(9600); pinMode(13, OUTPUT); delay(1000); // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));//update rtc dari waktu komputer // if (! rtc.begin()) { // Serial.println("RTC TIDAK TERBACA"); // while (1); // } // // if (! rtc.isrunning()) { // Serial.println("RTC is NOT running!"); // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));//update rtc dari waktu komputer // } } void loop() { //tidak melakukan apa-apa DateTime now = rtc.now(); Serial.print(namaHari[now.dayOfTheWeek()]); Serial.print(','); Serial.print(now.day(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.year(), DEC); Serial.print(" "); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); lcd.print(now.hour(),DEC); lcd.print(":"); lcd.print(now.minute(),DEC); lcd.print(":"); lcd.print(now.second(),DEC); delay(500); lcd.clear(); }
Jadi ketika catu daya arduino dicabut, RTC DS1307 akan tetap berjalan seperti layaknya CMOS di motherboard karena RTC DS1307 sudah dilengkapi dengan baterai tersendiri.
ref:
http://www.labelektronika.com/2018/02/cara-program-rtc-ds1307-menggunakan-Arduino.html
https://www.nyebarilmu.com/cara-mengakses-modul-display-lcd-16×2/