Jumat, 24 Maret 2017

Project Belajar Arduino Part 6 : Membuat Jam Alarm Menggunakan Tiny RTC DS1307

Dalam proyek ini, kami merancang Jam dengan alarm berbasis Arduino. Real Time Clock atau RTC adalah jam menggunakan baterai yang memberikan waktu bahkan ketika tidak ada daya eksternal atau mikrokontroler diprogram.
RTC menampilkan jam dan kalender dengan semua fungsi ketepatan waktu. Baterai, yang terhubung ke RTC adalah salah satu yang terpisah dan tidak terkait atau terhubung ke catu daya utama.



Tujuan dari proyek ini adalah untuk membuat sebuah jam dengan fitur alarm. Kerja proyek dijelaskan di bawah ini.
Dalam rangka untuk mengatur alarm, kita menekan tombol set. Ini akan membuat ardiuno menuju ke mode alarm dan meminta inputan jam dengan waktu saat ini yang ditampilkan. Tombol INC harus ditekan untuk mengubah jam.
Seperti jam dalam format 24 jam, jam akan bertambah antara 0 dan 23. Setelah jam alarm diatur, kita harus menekan tombol di NEXT untuk menuju ke tab menit.
Sekali lagi tombol INC ditekan untuk mengubah menit. Setelah waktu alarm masuk, tombol SET ditekan dan alarm selesai di setting.
Nilai yang dimasukkan sebagai alarm disimpan dalam EEPROM dari Arduino. Nilai-nilai ini terus menerus dibandingkan dengan saat ini.

Ketika pertandingan nilai-nilai yang tersimpan dan nilai saat ini sama, bel alarm akan dipicu. Dalam rangka untuk menghentikan alarm, tombol NEXT ditekan.

Alat dan Bahan yang dibutuhkan :
·            1x Arduino Pro Mini (Compatible)
·            1x LCD 16x2
·            1x Potensiometer 10K Ohm
·            3 x Tombol Push Button
·            1x Tiny RTC DS1307 modul
·            Kabel jumper secukupnya
           
Rangkaian :
Susunlah rangkaian untuk bluetooth seperti gambar dibawah ini




Copy Paste dan Upload Sketch

#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;
///////////////////////////////////////Fungsi untuk menyesuaikan waktu//////////////////////////////////
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 Waktu Alarm  ");

    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);
}
///////////////////////////////////////////fungsi untuk membunyikan  buzzer//////////////////////////////////
void Buz()
{
  if(digitalRead(set)==0)
  off=0;
  if(off==1)
  {
   digitalWrite(buz,HIGH);
   delay(500);
  
   digitalWrite(buz, LOW);
   delay(500);
  }
}
//////////////////////////////////////////fungsi untuk membandingkan alarm dengan waktu RTC//////////////////
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("Imam Sholahudin");
   lcd.setCursor(0,1);
   lcd.print("  Alarm Clock  ");
   delay(2000);
   lcd.clear();
 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);
}
///////////////////////////////////////////////////////fungsi untuk mengambil waktu RTC //////////////////////////////
void current()
{
  lcd.setCursor(0,1);
  lcd.print(Hor);
  lcd.print(":");
  lcd.print(Min);
  lcd.print(":");
  lcd.print(Sec);
}


1 komentar:

  1. Assalamualaikum, bang saya ngambil project punya Abang ini untuk tugas kuliah saya, sebelumnya terima kasih. Tapi saya ditanya sama dosen saya katanya dibagian program yang mana untuk mensetting alarmnya bang, saya kurang mengerti tentang pemrograman, jujur saya ini ngambil jurusan mesin tpi ada matkul dasar pemrograman.

    BalasHapus