Professional Documents
Culture Documents
Anggota Kelompok:
Dalam proyek ini, kami merancang Arduino berbasis Real Time Clock dengan alarm. Jam Real Time atau
RTC adalah jam bertenaga baterai yang mengukur waktu meskipun tidak ada daya eksternal.
RTC menampilkan jam dan kalender dengan semua fungsi ketepatan waktu. Baterai yang terhubung ke
RTC terpisah dan tidak terkait atau terhubung ke power supply.
Saat daya di hidupkan, RTC menampilkan waktu sebenarnya meskipun dayanya sebelumnya telah
dimatikan.
Kebanyakan mikrokontroler dan mikroprosesor telah dibangun di timer untuk menghemat waktu. Tapi
mereka bekerja hanya saat mikrokontroler terhubung dengan power supply.
Bila daya dinyalakan, timer internal akan mereset ke 0. Oleh karena itu, chip RTC terpisah disertakan
dalam aplikasi seperti data logger misalnya, yang tidak diatur ulang ke 0 saat daya dimatikan atau diatur
ulang.
Jam Real Time sering berguna dalam aplikasi data logging, alarm, timer, jam, dll. Dalam proyek ini, Real
Time Clock, yang menampilkan waktu dan tanggal yang akurat beserta fitur alarm dirancang.
Salah satu IC RTC yang sering digunakan DS1307 digunakan dalam proyek ini bersama Arduino. Sirkuit,
desain dan kerja dijelaskan pada bagian berikut.
Rangkaian :
Komponen :
Arduino UNO – 1
Push Buttons – 3
Buzzer – 1
10 KΩ – 2
10 KΩ POT – 1
Deskripsi Komponen :
1. DS1307
DS1307 adalah IC time clock (RTC) yang sering digunakan untuk jam dan kalender. Fungsi jam
menyediakan detik, menit dan jam sementara fungsi kalender menyediakan nilai hari, tanggal, bulan dan
tahun.
Jam dapat beroperasi dalam 12 jam dengan indikasi AM / PM atau format 24 jam. Baterai cadangan 3V
harus terhubung ke RTC sehingga IC dapat secara otomatis beralih ke persediaan cadangan jika terjadi
kegagalan daya.
Sebuah 32.768 KHz kristal dihubungkan ke terminal osilator DS1307 untuk osilasi 1 Hz.
2. Circuit Design
Komunikasi antara mikrokontroler dan RTC IC DS1307 adalah bus dua arah I2C. Protokol I2C adalah
metode komunikasi antara perangkat yang lebih cepat (Microcontroller atau Arduino dalam kasus ini)
dalam mode master dan perangkat yang lebih lambat (RTC) dalam mode slave.
Ada dua pin pada Arduino untuk komunikasi I2C. Analog pin 4 dan 5 akan bertindak sebagai SDA (Serial
Data) dan SCL (Serial Clock).
Ini terhubung ke pin SDA dan SCL masing-masing RTC. Kedua pin RTC ini ditarik tinggi dengan
menggunakan resistor 10Kors.
LCD digunakan untuk menampilkan jam. 6 pin LCD harus dihubungkan ke Arduino. RS, E, D4, D5, D6 dan
D7 (Pin 4, 6, 11, 12, 13 dan 14) LCD dihubungkan ke pin 2, 3, 4, 5, 6 dan 7 Arduino.
Tiga tombol digunakan untuk mengatur alarm. Tombol-tombol ini terhubung ke pin 8, 9 dan 10 dari
Arduino. Sebuah bel dihubungkan ke pin 11 dari Arduino yang bertindak sebagai alarm.
3. Cara Kerja
Tujuan dari proyek ini adalah menciptakan jam real time bersama dengan fitur alarm. Pekerjaan proyek
dijelaskan di bawah ini.
Semua koneksi dibuat sesuai diagram rangkaian yang ditunjukkan. Kode untuk Arduino diunggah dan
LCD menampilkan tanggal dan waktu sekarang.
Untuk mengatur alarm, kita menekan tombol set. Ini akan masuk ke mode alarm dan meminta berjam-
jam dengan waktu saat ini ditampilkan. Tombol kenaikan yang harus ditekan harus ditekan untuk
mengubah jam kerja.
Karena jam dalam format 24 jam, jam akan bertambah antara 0 dan 23. Begitu jam alarm diatur, kita
harus menekan tombol berikutnya untuk membuka tab menit.
Tombol kenaikan lagi ditekan untuk mengubah notulen. Setelah waktu alarm masuk, tombol setel
ditekan dan alarm disetel.
Nilai yang dimasukkan saat alarm disimpan di EEPROM Arduino. Nilai ini terus menerus dibandingkan
dengan saat ini.
Bila nilai yang tersimpan dan nilai saat ini cocok, buzzer untuk alarm akan dipicu. Untuk menghentikan
alarm, tombol berikutnya ditekan.
Coding
#include <Wire.h>
#include<EEPROM.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
RTC_DS1307 RTC;
int tmp,Inc,hor,mIn,add=11;
int set=8;
int cge=9;
int mod=10;
int off=0;
#define buz 11
int Hor,Min,Sec;
void time()
int tmp=1,mins=0,hors=0,secs=0;
while(tmp==1)
off=0;
if(digitalRead(cge)==0)
Hor++;
if(Hor==24)
Hor=0;
lcd.clear();
lcd.setCursor(0,0);
lcd.setCursor(0,1);
if(Hor<=9)
lcd.print("0");
lcd.print(Hor);
lcd.print(":");
lcd.print(Min);
lcd.print(":");
lcd.print(Sec);
delay(200);
lcd.setCursor(0,1);
lcd.print(" ");
lcd.print(":");
lcd.print(Min);
lcd.print(":");
lcd.print(Sec);
delay(200);
if(digitalRead(set)==0)
hor=Hor;
EEPROM.write(add++,hor);
tmp=2;
while(digitalRead(set)==0);
while(tmp==2)
if(digitalRead(cge)==0)
Min++;
if(Min==60)
{Min=0;}
lcd.setCursor(0,1);
lcd.print(Hor);
lcd.print(":");
if(Min<=9)
lcd.print("0");
lcd.print(Min);
lcd.print(":");
lcd.print(Sec);
lcd.print(" ");
delay(200);
lcd.setCursor(0,1);
lcd.print(Hor);
lcd.print(":");
lcd.print(" ");
lcd.print(":");
lcd.print(Sec);
lcd.print(" ");
delay(200);
if(digitalRead(set)==0)
mIn=Min;
EEPROM.write(add++, mIn);
tmp=0;
while(digitalRead(set)==0);
off=1;
delay(10);
void Buz()
if(digitalRead(set)==0)
off=0;
if(off==1)
digitalWrite(buz,HIGH);
delay(500);
digitalWrite(buz, LOW);
delay(500);
int tem[17];
for(int i=11;i<17;i++)
tem[i]=EEPROM.read(i);
add=11;
Buz();
Buz();
lcd.clear();
lcd.print("alarm...........");
lcd.setCursor(0,1);
lcd.print("...........alarm");
Buz();
Buz();
////////////////////////////////////////////////////////////setup///////////////////////////
void setup()
Wire.begin();
RTC.begin();
lcd.begin(16,2);
pinMode(cge, INPUT);
pinMode(set, INPUT);
pinMode(mod, INPUT);
pinMode(buz, OUTPUT);
digitalWrite(set, HIGH);
digitalWrite(mod, HIGH);
digitalWrite(cge, HIGH);
lcd.setCursor(0,0);
lcd.print("ELECTRONICS HUB");
lcd.setCursor(0,1);
delay(2000);
if(!RTC.isrunning())
RTC.adjust(DateTime(__DATE__,__TIME__));
////////////////////////////////////////////////////////////loop/////////////////////////////////////
void loop()
if(digitalRead(mod) == 0)
current();
time();
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
delay(2000);
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Time:");
lcd.setCursor(6,0);
Hor=now.hour(),DEC;
if(Hor<=9)
lcd.print("0");
lcd.print(Hor=now.hour(),DEC);
else
lcd.print(Hor=now.hour(),DEC);
lcd.print(":");
Min=now.minute(),DEC;
if(Min<=9)
lcd.print("0");
lcd.print(Min=now.minute(),DEC);
else
lcd.print(Min=now.minute(),DEC);
lcd.print(":");
Sec=now.second(),DEC;
if(Sec<=9)
lcd.print("0");
lcd.print(Sec=now.second(),DEC);
}
else
lcd.print(Sec=now.second(),DEC);
lcd.setCursor(0,1);
lcd.print("Date: ");
lcd.print(now.day(),DEC);
lcd.print("/");
lcd.print(now.month(),DEC);
lcd.print("/");
lcd.print(now.year(),DEC);
TimeCheck();
delay(200);
void current()
lcd.setCursor(0,1);
lcd.print(Hor);
lcd.print(":");
lcd.print(Min);
lcd.print(":");
lcd.print(Sec);