Minggu, 01 Maret 2015

Proyek Jam dengan RTC


Ini adalah latihan dasar mikrokontroller arduino, kita akan mencoba menghubungkan arduino Uno dengan RTC. Untuk menghubungkan Arduino Uno dengan RTC cobalah lihat gambar dibawah ini



Gambar diatas diambil dari forum arduino. mohon maap karena mencari yang mudah ya digunakanlah gogle dengan kata kunci " arduino RTC" dan muncullah banyak gambar. ya diambil salah satu. dari gambar di atas hubungkanlah kaki modul rtc dengan Arduino seperti gambar, untuk kaki ds tidak perlu dihubungkan, abaikan saja.

Untuk menghubungkan Arduino dengan LCD 16x2 lihatlah gambar dibawah ini.







cobalah listing program dibawah ini dan lihat hasilnya

**************************************************************************

#include "Wire.h"
#define DS1307_ADDRESS 0x68
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup(){
  Wire.begin();
//  Serial.begin(9600);
  lcd.begin(16,2); 
  }

void loop(){
  Wire.beginTransmission(DS1307_ADDRESS);
  byte zero = 0x00;
  Wire.write(zero);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_ADDRESS, 7);
  int detik = bcdToDec(Wire.read());
  int menit = bcdToDec(Wire.read());
  int jam = bcdToDec(Wire.read() & 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  int bulan = bcdToDec(Wire.read());
  int tanggal = bcdToDec(Wire.read());
  int tahun = bcdToDec(Wire.read());

  delay (133);
lcd.clear();
lcd.setCursor(0,0);
  lcd.print(tanggal);
  lcd.print("-");
  lcd.print(bulan);
  lcd.print("-");
  lcd.print(tahun);
  lcd.print(" ");
  lcd.print(jam);
  lcd.print(":");
  lcd.print(menit);
  lcd.print(":");
  lcd.print(detik);
 
lcd.setCursor(0,1);
lcd.print(" Percobaan  ");
delay(200);
}

byte bcdToDec(byte val)  {
// Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}

**************************************************************************

Nah sekarang marilah rekan kembangkan program di atas sesuai imajinasi rekan rekan. Cobalah modifikasi programnya agar menampilkan jam saja. Atau coba agar baris pertama menampikan jam dan baris ke dua menampilkan hari dan tanggal. Ayo terus berlatih dengan semangat



Setting RTC

Lanjutan dari halaman Proyek Jam dengan RTC


Halaman ini adalah lanjutan dari praktek Mikrokontroller Arduino membuat jam dengan RTC. Modul RTC yang digunakan adalah Ds 1307 . Pada dasarnya ada dua praktek dalam percobaan Membuat Jam dengan RTC yaitu menampilkan jam yang ada di RTC dan merubah jam yang ada di RTC bila jam tidak sesuai tentunya (ngaco). Untuk merubah jam yang ada di RTC dilakukan melalui mikrokontroller Arduino. programnya adalah sebagai berikut. Coba perhatikan list Program di bawah ini.


---------------------------------------------------------------------------------------------
#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00; //workaround for issue #527
void setup(){
    pinMode (18,OUTPUT); pinMode (19,OUTPUT);
  digitalWrite(19,HIGH);
  digitalWrite (18,LOW);

  Wire.begin();
  Serial.begin(9600);
  setDateTime(); //MUST CONFIGURE IN FUNCTION
}

void loop(){
  printDate();
  delay(1000);
}

void setDateTime(){

  byte second =      41; // Detik diisi dengan nilai 0-59
  byte minute =      30; //  Menit diisi dengan nilai0-59
  byte hour =        8; //  Jam diisi dengan nilai 0-23
  byte weekDay =     2; // Hari diisi dengan nilai 1-7 (1=Minggu, 2 Senin Dst)
  byte monthDay =    2; // Tanggal diisi dengan nilai 1-31
  byte month =       3; //  Bulan diisi dengan nilai 1-12
  byte year  =       15; // Tahun diisi dengan nilai  0-99

  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero); //stop Oscillator

  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekDay));
  Wire.write(decToBcd(monthDay));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));

  Wire.write(zero); //start

  Wire.endTransmission();

}

byte decToBcd(byte val){
// Convert normal decimal numbers to binary coded decimal
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val)  {
// Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}

void printDate(){

  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.write(zero);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.read());
  int minute = bcdToDec(Wire.read());
  int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday
  int monthDay = bcdToDec(Wire.read());
  int month = bcdToDec(Wire.read());
  int year = bcdToDec(Wire.read());

  //print the date EG   3/1/11 23:59:59
  Serial.print(month);
  Serial.print("/");
  Serial.print(monthDay);
  Serial.print("/");
  Serial.print(year);
  Serial.print(" ");
  Serial.print(hour);
  Serial.print(":");
  Serial.print(minute);
  Serial.print(":");
  Serial.println(second);

}


---------------------------------------------------------------------------------------------
Untuk merubah jam Rtc perhatikan nilai jam yang ada di bagian Setup. isilah second dengan nilai detik yang akan di input. nilai minute dengan nilai menit , hour dengan nilai jam. dan nilai seterusnya. ketika program di Uploud ke Mikrokontroller maka mikrokontroller akan menuliskannya ke RTC. Sebagai Catatatn bahwa setelah program di Uploud maka data akan berubah dan jam  sudah sesuai dengan waktu yang berlaku, maka kita harus mengaploud program untuk menampilkan jam saja. contohnya Uploud saja program pada percobaan sebelunya. Kenapa demikian .........?   . Jawabannya adalah akan terjadi masalah ketika Mikrokontroller di matikan. sebagai contoh kita akan membetulkan nilai jam yang ada di Modul RTC yang tidak sesuai. Pada saat itu menunjukan Jam 5 sore pas dan tanggal pada saat itu adalah tanggal 1 Januari 2015. Tentunya kita memasukan nilai tersebut di bagian setup kemudian alat kita biarkan menyala sampai jam 6 sore dan kita matikan. pada saat Jam 7 malam kita nyalakan kembali mikrokontrollernya dan jam yang akan tampil adalah jam 5 sore dan bukan jam 7 malam. Hal ini dikarenakan pada saat mikrokontroller dihidupkan Modul Rtc kembali di rubah data waktunya seperti nilai yang tertulis di bagian setup. Nah oleh karena itu maka setelah program ini di uploud harus segera di ganti dengan program tampilan jam saja.

Mungkin kita akan membayangkan bahwa membuat jam dengan modul RTC adalah tidak praktis yaaa.. bagaiman jamnya bila di pakai oleh pengguna yang tidak mengerti mikrokontroller sama sekali. tentunya bilai jam nya ngaco maka tidak dapat di betulkan sendiri. Untuk itulah kita perlu mengembangkan program ini agar jam dan cara membetulkan jamnya bisa bergabung dan tidak perlu menggunakan komputer dalam mengatur jamnya. Ikutilah Ling berikut Untuk latihan membuat jam lanjutan