Table of Contents
Jam berbasis Real Arduino ini adalah jam digital untuk menampilkan waktu nyata menggunakan RTC IC DS1307 yang bekerja pada protokol I2C.
RTC (real time clock) tetap akan berjalan meski asupan tegangan mati.
Rangkaian sederhana jam ini menggunakan LCD 16×2 untuk menampilkan format waktu (tahun, bulan, tanggaljam, menit, dan detik) juga dilengkapi dengan modul alarm.
Opsi Alarm juga ditambahkan dan kita dapat mengatur waktu alarm. Setelah waktu alarm disimpan di EEPROM internal Arduino, itu tetap disimpan bahkan setelah ulang atau kegagalan listrik. Jam biasanya digunakan di komputer, rumah, kantor, dan perangkat elektronik kami agar selalu diperbarui secara real time.
Protokol I2C adalah metode untuk menghubungkan dua atau lebih perangkat menggunakan dua kabel ke sistem tunggal, dan protokol ini juga disebut sebagai dua protokol kawat . Ini dapat digunakan untuk mengkomunikasikan 127 perangkat ke satu perangkat atau prosesor. Sebagian besar perangkat I2C menjalankan frekuensi on100Khz.
Diagram Sirkuit dan Deskripsi
Dalam rangkaian jam digital berbasis Arduino ini, kami telah menggunakan tiga komponen utama yaitu IC DS1307, Arduino Pro Mini Board, dan modul LCD 16×2.
Di sini arduino digunakan untuk membaca waktu dari ds1307 dan menampilkannya pada LCD 16×2. DS1307 mengirim waktu / tanggal menggunakan 2 baris ke arduino. Sebuah buzzer juga digunakan untuk indikasi alarm, yang berbunyi ketika alarm diaktifkan. Diagram blok ditunjukkan di bawah ini untuk memahami kerja Jam Waktu ini.
Seperti yang Anda lihat dalam diagram rangkaian, DS1307 chip pin SDA dan SCL terhubung ke pin arduino SDA dan SCL dengan menarik resistor yang memegang nilai standar TINGGI pada data dan garis jam.
Osilator kristal 32.768KHz terhubung dengan DS1307chip untuk menghasilkan penundaan 1 detik yang tepat, dan baterai 3 volt juga terhubung ke pin 3 rd (BAT) dari DS1307 yang menjaga waktu berjalan setelah kegagalan listrik.
16×2 LCD terhubung dengan Arduino dalam 4-bit mode. Kontrol pin RS, RW dan En secara langsung terhubung ke arduino pin 2, GND dan 3. Dan pin data D0-D7 terhubung ke 4, 5, 6, 7 dari Arduino. Sebuah buzzer terhubung dengan pin arduino nomor 13 melalui transistor NPN BC547 yang memiliki resistor 1k pada dasarnya.
Tiga tombol yaitu set, INC dan Berikutnya digunakan untuk mengatur alarm ke pin 12, 11 dan 10 dari Arduino dalam mode rendah aktif. Ketika kita menekan set, mode alarm set akan aktif dan sekarang kita perlu mengatur alarm dengan menggunakan tombol INC dan tombol Next digunakan untuk memindahkan ke digit.
Pengaturan breadboard lengkap jam real time ini dengan alarm ditunjukkan di bawah gambar. Anda juga dapat memeriksa tutorial rinci tentang jam alarm digital dengan mikrokontroler AVR.
Deskripsi Program
Untuk memprogram jam waktu secara real, kami telah menggunakan beberapa referensi untuk mengekstraksi waktu / tanggal dari DS1307 dan untuk ditampilkan pada LCD, yang diberikan di bawah ini:
Dan inisialisasi RTC, LCD dan output input dilakukan di loop setup.
Sisa dari hal-hal seperti waktu membaca, pengaturan alarm dilakukan di bagian loop void.
Kode
/ * —– Program C untuk Arduino berdasarkan Jam Alarm —- * /
#include
#include
#include
#includeLiquidCrystal lcd (3, 2, 4, 5, 6, 7);
RTC_DS1307 RTC;
int temp, inc, hours1, minut, add = 11;int next = 10;
int INC = 11;
int set_mad = 12;#define buzzer 13
int HOUR, MINUT, SECOND;
kekosongan setup ()
{
Wire.begin ();
RTC.begin ();
lcd.begin (16,2);
pinMode (INC, INPUT);
pinMode (next, INPUT);
pinMode (set_mad, INPUT);
pinMode (buzzer, OUTPUT);
digitalWrite (next, HIGH);
digitalWrite (set_mad, HIGH);
digitalWrite (INC, HIGH);lcd.setCursor (0,0);
lcd.print (“Real Time Clock”);
lcd.setCursor (0,1);
lcd.print (“Circuit Digest”);
penundaan (2000);if (! RTC.isrunning ())
{
RTC.adjust (DateTime (__ DATE __, __ TIME__));
}
}void loop ()
{
int temp = 0, val = 1, temp4;
DateTime sekarang = RTC.now ();
if (digitalRead (set_mad) == 0) // setel waktu Alarm
{
lcd.setCursor (0,0);
lcd.print (“Set Alarm”);
penundaan (2000);
defualt ();
waktu();
penundaan (1000);
lcd.clear ();
lcd.setCursor (0,0);
lcd.print (“Waktu alarm”);
lcd.setCursor (0,1);
lcd.print (“telah diatur”);
penundaan (2000);
}
lcd.clear ();
lcd.setCursor (0,0);
lcd.print (“Waktu:”);
lcd.setCursor (6,0);
lcd.print (HOUR = now.hour (), DEC);
lcd.print (“:”);
lcd.print (MINUT = now.minute (), DEC);
lcd.print (“:”);
lcd.print (SECOND = 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);
pertandingan();
penundaan (200);
}kekosongan defualt ()
{
lcd.setCursor (0,1);
lcd.print (JAM);
lcd.print (“:”);
lcd.print (MINUT);
lcd.print (“:”);
lcd.print (SECOND);
}/ * Fungsi untuk mengatur waktu alarm dan waktu umpan ke Internal eeprom * /
void time ()
{
int temp = 1, minuts = 0, hours = 0, seconds = 0;
while (temp == 1)
{
if (digitalRead (INC) == 0)
{
HOUR ++;
if (HOUR == 24)
{
HOUR = 0;
}
while (digitalRead (INC) == 0);
}
lcd.clear ();
lcd.setCursor (0,0);
lcd.print (“Set Alarm Time”);
//lcd.print(x);
lcd.setCursor (0,1);
lcd.print (JAM);
lcd.print (“:”);
lcd.print (MINUT);
lcd.print (“:”);
lcd.print (SECOND);
penundaan (100);
if (digitalRead (next) == 0)
{
hours1 = HOUR;
EEPROM.write (tambahkan ++, jam1);
temp = 2;
while (digitalRead (next) == 0);
}
}while (temp == 2)
{
if (digitalRead (INC) == 0)
{
MINUT ++;
if (MINUT == 60)
{MINUT = 0;}
sementara (digitalRead (INC) == 0);
}
// lcd.clear ();
lcd.setCursor (0,1);
lcd.print (JAM);
lcd.print (“:”);
lcd.print (MINUT);
lcd.print (“:”);
lcd.print (SECOND);
penundaan (100);
if (digitalRead (next) == 0)
{
minut = MINUT;
EEPROM.write (tambahkan ++, minut);
temp = 0;
while (digitalRead (next) == 0);
}
}
delay (1000);
}/ * Fungsi untuk waktu pengobatan chack * /
kekosongan pertandingan ()
{
int tem [17];
untuk (int i = 11; i <17; i ++)
{
tem [i] = EEPROM.read (i);
}
if (HOUR == tem [11] && MINUT == tem [12])
{
beep ();
berbunyi();
berbunyi();
berbunyi();
lcd.clear ();
lcd.print (“Wake Up ……..”);
lcd.setCursor (0,1);
lcd.print (“Wake Up …….”);
berbunyi();
berbunyi();
berbunyi();
berbunyi();
}}
/ * berfungsi untuk indikasi buzzer * /
void beep ()
{
digitalWrite (buzzer, HIGH);
penundaan (500);
digitalWrite (buzzer, LOW);
penundaan (500);
}
Video
Pustaka:Â https://circuitdigest.com/microcontroller-projects/arduino-alarm-clock