Sabtu, 30 Juli 2016

Jam dinding Arduino 1

Dalam kesempatan kali ini akan dilakukan percobaan membuat jam dengan mikrokontroller Arduino Uno. Mungkin jika sudah jadi bisa di tempel didinding atau disimpan di meja belajar.
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.
---------------------------------------------------------------------------------

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  // RS,E,D4,D5,D6,D7

#include "Wire.h"
#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;

 baris1=hari+ " "+ String (tg) +"-"+ String (bl)+"-"+ String (th) ;
  baris2= "Jam : "+String (j1)+String (j2) +":"+ String (m1)+String (m2)+":"+String (d1)+String (d2) ;

// 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);
}

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.
   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;

 baris1=hari+ " "+ String (tg) +"-"+ String (bl)+"-"+ String (th) ;
  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]



 

Tidak ada komentar:

Posting Komentar