You are on page 1of 11

Arduino Alarm Clock

Anggota Kelompok:

Putu Dhanu Driya (26)

Putu Andhika Arya Pratama (25)

Nyoman Teguh Sadewa A. (23)

Gede Ryan Arya Wisnu Wardana (7)

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

DS 1307 RTC Module – 1

Push Buttons – 3

16X2 LCD Display – 1

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>

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

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;

///////////////////////////////////////Function to adjust the time//////////////////////////////////

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.print("Set Alarm Time");

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

///////////////////////////////////////////function to sound the buzzer//////////////////////////////////

void Buz()

if(digitalRead(set)==0)

off=0;

if(off==1)

digitalWrite(buz,HIGH);

delay(500);

digitalWrite(buz, LOW);

delay(500);

//////////////////////////////////////////function to compare the alarm time with current RTC


time//////////////////
void TimeCheck()

int tem[17];

for(int i=11;i<17;i++)

tem[i]=EEPROM.read(i);

if(Hor == tem[11] && Min == tem[12] && off==1)

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

lcd.print(" Alarm Clock ");

delay(2000);

if(!RTC.isrunning())

RTC.adjust(DateTime(__DATE__,__TIME__));

////////////////////////////////////////////////////////////loop/////////////////////////////////////

void loop()

DateTime now = RTC.now();

if(digitalRead(mod) == 0)

current();

time();

delay(1000);

lcd.clear();

lcd.setCursor(0,0);

lcd.print(" Alarm On");

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

///////////////////////////////////////////////////////function to get current RTC


time//////////////////////////////

void current()

lcd.setCursor(0,1);

lcd.print(Hor);

lcd.print(":");

lcd.print(Min);

lcd.print(":");

lcd.print(Sec);

You might also like