Bahan bahan yang diperlukan dalam praktek kali ini adalah
Arduino Uno
Kabel secukupnya
LCD 20x4 Karakter
Modul RTC
Coba perhatikan gambar di atas. yaaa.. itulah rangkaian yang akan kita program.. RTC dan LCD yang dihubungkan dengan Mikrokontroller Arduino Uno abal abal alias versi Kloningan. tapi jangan kuatir tetap berjalan dengan baik koooo..
Untuk sementara abaikan rangkaian saklar pada gambar di atas. Rangkaian saklar kita akan gunakan pada latihan step selanjutnya yaitu pemrograman jam tingkat lanjut.
Pada prinsipnya cara kerja dari program yang dirancang kali ini adalah kita mengambil data waktu dari Modul RTC dan data waktu tersebut kita tampilkan di layar LCD. Data yang ditampilkan adalah jam dan tanggal.
Tampilan Jam yang akan ditampilkan di layar Lcd adalah seperti di bawah ini.
List Program di bawah adalah Program jam yang kita prasktekan sekarang.
---------------------------------------------------------------------------------
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // RS,E,D4,D5,D6,D7
#define DS1307_ADDRESS 0x68
byte zero = 0x00; //workaround for issue #527
int t1,t2,t3,j,mn,d,tg,bl,th,hk;
String hari;
String b1,b2,baris1,baris2;
int j1,j2,m1,m2,d1,d2;
void setup() {
Wire.begin();
lcd.begin(16,2);
pinMode (18,OUTPUT); digitalWrite(18,0); // Untuk Memberi Tegangan 0 Volt ke RTC
pinMode (19,OUTPUT); digitalWrite(19,1); // Untuk Memberi Tegangan 5 Volt ke RTC
}
void loop() {
Wire.beginTransmission(DS1307_ADDRESS);
byte zero = 0x00;
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
d = bcdToDec(Wire.read());
mn = bcdToDec(Wire.read());
j = bcdToDec(Wire.read() & 0b111111); //24 hour time
hk = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
tg = bcdToDec(Wire.read());
bl = bcdToDec(Wire.read());
th = bcdToDec(Wire.read());
if (hk == 1) hari="Minggu" ;
if (hk == 2) hari="Senin" ;
if (hk == 3) hari="Selasa" ;
if (hk == 4) hari="Rabu" ;
if (hk == 5) hari="Kamis" ;
if (hk == 6) hari="Jum'at" ;
if (hk == 7) hari="Saptu" ;
j1= j/10; j2=j%10; m1=mn/10; m2=mn%10; d1=d/10; d2=d%10;
baris2= "Jam : "+String (j1)+String (j2) +":"+ String (m1)+String (m2)+":"+String (d1)+String (d2) ;
if(b1!= baris1 || b2!=baris2 ) {
b1= baris1 ; b2=baris2 ;
lcd.clear() ;
lcd.setCursor(0,0); lcd.print(b1);
lcd.setCursor(0,1); lcd.print(b2); }
delay (100);
}
byte bcdToDec(byte val) {
// Convert binary coded decimal to normal decimal numbers
return ( (val/16*10) + (val%16) );
}
byte decToBcd(byte val){
// Convert normal decimal numbers to binary coded decimal
return ( (val/10*16) + (val%10) );
}
---------------------------------------------------------------------------------
Marilah coba kita teliti programnya
Dari Wire.beginTransmission(DS1307_ADDRESS); sampai Wire.requestFrom(DS1307_ADDRESS, 7);
adalah untuk bagian RTC.. Intinya adalah mengaktipkan RTC untuk kemudian dibaca datanya.Dari Wire.beginTransmission(DS1307_ADDRESS); sampai Wire.requestFrom(DS1307_ADDRESS, 7);
d = bcdToDec(Wire.read());
mn = bcdToDec(Wire.read());
j = bcdToDec(Wire.read() & 0b111111); //24 hour time
hk = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
tg = bcdToDec(Wire.read());
bl = bcdToDec(Wire.read());
th = bcdToDec(Wire.read());
Baris program di atas adalah membaca data detik menyimpannya di variabel d, data menit dimasukan ke variabel mn. dan seterusnya ( j = jam, hk = hari, tg = tanggal, bl = bulan, th = tahun )
Data yang tersimpan di variabel hk adalah data hari dimulai dari nilai nol sampai enam, nol berarti minggu, satu artinya senin dan seterusnya sampai enam artinya Sabtu. Nah data inilah kita transfer menjadi nama hari melalui seleksi if. coba perhatikan list program di bawah.
if (hk==1) hari="Minggu" ; if (hk==2) hari="Senin" ;
if (hk==3) hari="Selasa" ; if (hk==4) hari="Rabu" ;
if (hk==5) hari="Kamis" ; if (hk==6) hari="Jum'at" ; if (hk==7) hari="Saptu" ;
Data hari, jam dan tanggal dapat kita tampilkan di layar LCD seperti gambar di bawah.
Data jam bernilai dari 0 (Jam 12 Malam) sampai jam 23, data menit dan detik dari 0 sampai 59 . Coba perhatikan jika jam menunjukan pukul 12 malam lewat 1 menit dan 2 detik maka akan di tampilkan Jam: 0:1:2 . Nah akan terasa tidak nyaman bukan, seharusnya yang ditampilkan adalah Jam: 00:01:02
Nah oleh karena itulah perlu di modifikasi seperti di bawah ini :
j1= j/10; j2=j%10; m1=mn/10; m2=mn%10; d1=d/10; d2=d%10;
baris2= "Jam : "+String (j1)+String (j2) +":"+ String (m1)+String (m2)+":"+String (d1)+String (d2) ;
Untuk menapilkan di layar Lcd list nya adalah
/ Menampilkan jam di layar LCD
if(b1!= baris1 || b2!=baris2 ) {
b1= baris1 ; b2=baris2 ;
lcd.clear() ;
lcd.setCursor(0,0); lcd.print(b1);
lcd.setCursor(0,1); lcd.print(b2); }
delay (100);
}
Fungsi if di atas adalah agar layar lcd hanya akan berganti tampilan bila data berubah. jadi tampilan akan berganti satu detik sekali sesuai dengan perubahan detik. jika kita terlalu sering berganti tampilan layar lcd maka layar akan berkedip kedip. nanti jika sering berlatih saudara juga akan mengalaminya dan lebih faham lagi tentunya. program selesai dech.........
Nah marilah kita kembangkan latihan di atas menjadi jam yang lebih baik lagi. ayo ikuti Link di bawah ini yaaa......
Latihan membuat Jam Yang dapat di atur.
Latihan membuat jadwal Shalat Abadi dengan Arduino
Latihan membuat Jam Yang dapat di atur Plus alarm. [Maap Belum Jadi]