Digital Clock Arduino RTC DS1307 Without Shift Register (Jam Digital Arduino RTC DS1307 Tanpa Shift Register)

Untuk anda yang ingin membuat sebuah jam digital canggih lengkap dengan jam, menit, serta alarm, disini saya akan membagikan salah satu proyek arduino yang sangat berguna dan cocok digunakan untuk tugas akhir sekolah maupun skripsi elektronika bagi yang sudah kuliah.
Jam digital kali ini berbasiskan arduino yang menggunakan IC ATMEGA328. Dalam proyek ini saya menggunakan IC Arduino yang mudah didapatkan. Jam digital    ini sudah dilengkapi dengan sebuah IC RTC, yaitu sebuah IC yang dapat menyimpan data waktu maupun tanggal walaupun power supply untuk jam itu sendiri mati.
Agar jam digital ini dapat terus meng-counter waktu pada saat listrik padam, maka diperlukan nya sebuah battery backup untuk tenaga cadangan bagi IC RTC hingga berbulan bulan lamanya tanpa ada arus listrik ke rangkaian jam digital.
Jam digital ini bisa menggunakan display seven segmen common anoda maupun common catoda tergantung dari pemasangan driver terhadap seven segmen.
Pada jam digital ini dilengkapi dengan 3 tombol yang dapat digunakan untuk mengatur jam, menit serta alarm.
Karena Untuk mempermudah bagi yang ingin membuat saya menyediakan 2 Source Program. Kerana seperti yang anda ketahui seven segment memiliki dua jenis, yaitu Common Anoda dan Common Catoda.
Bahan yang dibutuhkan:
1. Arduino Uno
2. Module RTC DS1307
3. Seven Segment 4 buah 1" (Inch) (Bebas “CA/CC”)
4. Tombol 3 buah
5. 2 buah LED
6. Komponen Pendukung.
Untuk skema rangkaian dapat diliht pada gambar dibawah ini.
Source Code lihat pada Kotak berikut.




Program Utama

=================================Source Code================================

#include "Wire.h"
#include "RTClib.h"
#include "EEPROM.h"

RTC_DS1307 RTC;

int hours; 
int hh; 
int mm;
int ss;
int timecc;
int buzer = 2;

int segmentA = 13;
int segmentB = 12;
int segmentC = 11;
int segmentD = 10;
int segmentE = 9;
int segmentF = 8;
int segmentG = 7;
int digitOne = 6;
int digitTwo = 5;
int digitThree = 4;
int digitFour = 3;
int hoursButton = A0;
int minsButton = A1;
int enter = A2;
int pin=17;
int relay=1;
int ap=16;

byte value;
byte value2;
byte value3;

void setup() {
  pinMode(buzer,OUTPUT);
  pinMode(pin,OUTPUT);
  pinMode(relay,OUTPUT);
 
  pinMode(segmentA, OUTPUT);
  pinMode(segmentB, OUTPUT);
  pinMode(segmentC, OUTPUT);
  pinMode(segmentD, OUTPUT);
  pinMode(segmentE, OUTPUT);
  pinMode(segmentF, OUTPUT);
  pinMode(segmentG, OUTPUT);
  pinMode(digitOne, OUTPUT);
  pinMode(digitTwo, OUTPUT);
  pinMode(digitThree, OUTPUT);
  pinMode(digitFour, OUTPUT);

  pinMode(hoursButton, INPUT_PULLUP);
  pinMode(minsButton, INPUT_PULLUP);
  pinMode(enter, INPUT_PULLUP);
  pinMode(ap,OUTPUT);
 
  Wire.begin();
  RTC.begin();  

 
  if (! RTC.isrunning()) {
   
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

 

 Wire.beginTransmission(0X68);
 Wire.write(0x07); 
 Wire.write(0x10); 
 Wire.endTransmission();

 digitalWrite(buzer,HIGH);
 delay(1000);
 digitalWrite(buzer,LOW);
 value = EEPROM.read(0);
 value2 = EEPROM.read(1);
 if(value>23){
  EEPROM.write(0, 0);
 }
 if(value2>59){
  EEPROM.write(1, 0);
 }
 
}

void loop() {
  
  aman:
  value = EEPROM.read(0);
  value2 = EEPROM.read(1);
  value3 = EEPROM.read(2);
  DateTime now = RTC.now(); 
  hours = now.hour(); 
  mm = now.minute();
  ss = now.second(); 
  if(hours>23){
  digitalWrite(pin,HIGH);
  }
  else digitalWrite(pin,LOW);
 
  hh = hours;

  if (hours < 1) {
    hh = 00;
  }

  if ((hours > 24) && (hours < 24)) {
    hh = hours - 24;
  }

  timecc = hh*100+mm;
  showNum(timecc);

  if (digitalRead(hoursButton) == LOW) {
    mati();
   
    delay(200);
    hours++;
    ss = 00;

    if (hours > 23) {
      hours = 00;
    }

    updateRTC();
  } 

 
  if (digitalRead(minsButton) == LOW) {
    mati();
    //debounce
    delay(200);

    mm++;
    ss = 00;

    if (mm >59) {
      mm = 00;
    }

    updateRTC();
  }

  if (digitalRead(enter) == LOW){
    mati();
    delay(200);
    if(digitalRead(enter)==LOW){
      if(value3==1){
        for(int a=0; a<500 0="" 1="" a="" aman="" delay="" digitalread="" digitalwrite="" digitfour="" digitone="" digitthree="" digittwo="" eeprom.write="" else="" enter="" for="" goto="" high="" hoursbutton="" if="" int="" low="" mati="" segmenta="" segmentb="" segmentc="" segmentd="" segmente="" segmentf="" segmentg="" shownum="" timecc="" value="" while="">23){
          value=00;
        }
         EEPROM.write(0, value);
      }

      if(digitalRead(minsButton)==LOW){
        mati();
        delay(200);
        value2++;
        if(value2>59){
          value2=00;
        }
        EEPROM.write(1, value2);
      }
    }
    mati();
    delay(200);
  }
if(EEPROM.read(2)==1){
  
  if(value==hours&&value2==mm){
    for(int a=0;a<56 a="" if="" shownum="" timecc="">0&&a<4 a="" buzer="" digitalwrite="" else="" if="">4&&a<8 a="" buzer="" digitalwrite="" else="" if="">8&&a<12 a="" buzer="" digitalwrite="" else="" if="">12&&a<16 a="" buzer="" digitalwrite="" else="" if="">16&&a<20 a="" buzer="" digitalwrite="" else="" if="">20&&a<24 a="" buzer="" digitalwrite="" else="" if="">24&&a<28 a="" buzer="" digitalwrite="" else="" if="">28&&a<56 buzer="" digitalwrite="" if="" int="" mati="" n1="(n%10000)/1000;" n="" shownum="" void=""> 999) {
    printNumber(n1,1);
  }
  delay(4);
mati();
 
  int n2 = (n%1000)/100;
  printNumber(n2,2); 
  delay(4);
mati();
 
  int n3 = (n%100)/10;
  printNumber(n3,3);
  delay(4);
mati();
 
  int n4 = n%10;
  printNumber(n4,4); 
  delay(3);

}

void printNumber(int n, int d) {

  
  if(d==1)  {
    digitalWrite(digitOne,HIGH);
    digitalWrite(digitTwo,LOW);
    digitalWrite(digitThree,LOW);
    digitalWrite(digitFour,LOW);

    
    if ((hours == 12) || (hours == 22) || (hours == 23)) {
   
    } 
    else {
     
    }
  } 

  if(d==2) {
    digitalWrite(digitOne,LOW);
    digitalWrite(digitTwo,HIGH);
    digitalWrite(digitThree, LOW);
    digitalWrite(digitFour,LOW);

   
    if ((hours > 12) && (hours < 22)) {
   
    } 
    else {
      
    }
  }

  if(d==3) {
    digitalWrite(digitOne,LOW);
    digitalWrite(digitTwo,LOW);
    digitalWrite(digitThree,HIGH);
    digitalWrite(digitFour,LOW);
  
  }

  if(d==4) {
    digitalWrite(digitOne,LOW);
    digitalWrite(digitTwo,LOW);
    digitalWrite(digitThree,LOW);
    digitalWrite(digitFour,HIGH);
   
  }

 
  switch(n) {
  case 0:
    digitalWrite(segmentA,LOW);
    digitalWrite(segmentB,LOW);
    digitalWrite(segmentC,LOW);
    digitalWrite(segmentD,LOW);
    digitalWrite(segmentE,LOW);
    digitalWrite(segmentF,LOW);
    digitalWrite(segmentG,HIGH);
    break;

  case 1:
    digitalWrite(segmentA,HIGH);
    digitalWrite(segmentB,LOW);
    digitalWrite(segmentC,LOW);
    digitalWrite(segmentD,HIGH);
    digitalWrite(segmentE,HIGH);
    digitalWrite(segmentF,HIGH);
    digitalWrite(segmentG,HIGH);
    break;

  case 2:
    digitalWrite(segmentA,LOW);
    digitalWrite(segmentB,LOW);
    digitalWrite(segmentC,HIGH);
    digitalWrite(segmentD,LOW);
    digitalWrite(segmentE,LOW);
    digitalWrite(segmentF,HIGH);
    digitalWrite(segmentG,LOW);
    break;

  case 3:
    digitalWrite(segmentA,LOW);
    digitalWrite(segmentB,LOW);
    digitalWrite(segmentC,LOW);
    digitalWrite(segmentD,LOW);
    digitalWrite(segmentE,HIGH);
    digitalWrite(segmentF,HIGH);
    digitalWrite(segmentG,LOW);
    break;

  case 4:
    digitalWrite(segmentA,HIGH);
    digitalWrite(segmentB,LOW);
    digitalWrite(segmentC,LOW);
    digitalWrite(segmentD,HIGH);
    digitalWrite(segmentE,HIGH);
    digitalWrite(segmentF,LOW);
    digitalWrite(segmentG,LOW);
    break;

  case 5:
    digitalWrite(segmentA,LOW);
    digitalWrite(segmentB,HIGH);
    digitalWrite(segmentC,LOW);
    digitalWrite(segmentD,LOW);
    digitalWrite(segmentE,HIGH);
    digitalWrite(segmentF,LOW);
    digitalWrite(segmentG,LOW);
    break;

  case 6:
    digitalWrite(segmentA,LOW);
    digitalWrite(segmentB,HIGH);
    digitalWrite(segmentC,LOW);
    digitalWrite(segmentD,LOW);
    digitalWrite(segmentE,LOW);
    digitalWrite(segmentF,LOW);
    digitalWrite(segmentG,LOW);
    break;

  case 7:
    digitalWrite(segmentA,LOW);
    digitalWrite(segmentB,LOW);
    digitalWrite(segmentC,LOW);
    digitalWrite(segmentD,HIGH);
    digitalWrite(segmentE,HIGH);
    digitalWrite(segmentF,HIGH);
    digitalWrite(segmentG,HIGH);
    break;

  case 8:
    digitalWrite(segmentA,LOW);
    digitalWrite(segmentB,LOW);
    digitalWrite(segmentC,LOW);
    digitalWrite(segmentD,LOW);
    digitalWrite(segmentE,LOW);
    digitalWrite(segmentF,LOW);
    digitalWrite(segmentG,LOW);
    break;

  case 9:
    digitalWrite(segmentA,LOW);
    digitalWrite(segmentB,LOW);
    digitalWrite(segmentC,LOW);
    digitalWrite(segmentD,LOW);
    digitalWrite(segmentE,HIGH);
    digitalWrite(segmentF,LOW);
    digitalWrite(segmentG,LOW);
    break;
  }
}

byte decToBcd(byte val) {
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val) {
  return ( (val/16*10) + (val%16) );
}

void updateRTC() {
  Wire.beginTransmission(104);
  Wire.write(0);
  Wire.write(decToBcd(ss));
  Wire.write(decToBcd(mm));
  Wire.write(decToBcd(hours));
  Wire.endTransmission();
}

void mati(){
    digitalWrite(segmentA,HIGH);
    digitalWrite(segmentB,HIGH);
    digitalWrite(segmentC,HIGH);
    digitalWrite(segmentD,HIGH);
    digitalWrite(segmentE,HIGH);
    digitalWrite(segmentF,HIGH);
    digitalWrite(segmentG,HIGH);
}


Hasil Setelah Dibuat di PCB. 

No comments

Dicky B_Mz. Powered by Blogger.