[otw_is sidebar=otw-sidebar-1]arduino alarm clock using rtc ds1307,arduino projects,diy arduino project,arduino rtc ds1307 library
in this simple arduino project we will learn how to make water level indicator with arduino.in Proteus. In the previous posts I have discussed about the Bluetooth module simulation in Proteus and also have discussed important sensors and actuators in Proteus. This post will be oriented around the L298 motor driver and its simulation in Proteus.

After reading this post the reader will be able to learn about the basics of the rtc ds1307 clock, working of the real time clock module interface with arduino, the principle of the rtc clock, circuit for alarm  clock, interfacing of the Arduino microcontroller development board with ds1307 rtc module. So sit back, keep reading and enjoy learning.

 

Arduino Alarm Clock using Rtc ds1307

pcbway

 

 

arduino rtc ds1307 library download

 

 

Arduino Alarm Clock using Rtc ds1307 Circuit Diagram

Arduino Alarm Clock using Rtc ds1307 Circuit Diagram,arduino projects,diy arduino project

 

Components Required 

 

  • Arduino Nano OR Arduino UNO
  • rtc ds1307
  • lcd 2×16 or lcd 4x 20
  • 5 Voltage Buzzer
  • Push Buttons
  • Bread Bord
  • Resistor,capacitor and leds
  • Jumper Wires

 

Arduino Lcd Clock with Rtc Code

 

 

int sw1=8;    
int sw2=9;    
int sw3=10;    
int sw4=12;    
#include<EEPROM.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
const char* AMPM = 0;
int cnt4=0;
#include <Wire.h>
const int DS1307 = 0x68; // Address of DS1307 see data sheets
const char* days[] =
{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
const char* months[] =
//{"January", "February", "March", "April", "May", "June", "July", "August","September", "October", "November", "December"};
{"Jan", "Feb", "March", "April", "May", "June", "July", "August","Septem", "Octobe", "Novem", "Decemb"};
 
// Initializes all values: 
byte second = 0;
byte minute = 0;
byte hour = 0;
byte weekday = 0;
byte monthday = 0;
byte month = 0;
byte year = 0;

byte fminute = 0;
byte fhour = 0;
byte ffminute = 0;
byte ffhour = 0;
byte zminute = 0;
byte zhour = 0;
byte aminute = 0;
byte ahour = 0;
byte mminute = 0;
byte mhour = 0;
byte iminute = 0;
byte ihour = 0;
int addr = 0;
byte aaminute = 0;
byte aahour = 0;

int rly1 = A0;

void setup() {
 delay(10);
  Wire.begin();
 delay(10);
lcd.begin(16, 2);Serial.begin(9600);lcd.clear(); delay(300);

  pinMode(rly1, OUTPUT);
  digitalWrite(rly1, HIGH);
  pinMode(sw1, INPUT_PULLUP); 
  pinMode(sw2, INPUT_PULLUP); 
  pinMode(sw3, INPUT_PULLUP); 
  pinMode(sw4, INPUT_PULLUP); 
addr=1;fhour = EEPROM.read(addr);
addr=2;fminute = EEPROM.read(addr);
addr=3;zhour = EEPROM.read(addr);
addr=4;zminute = EEPROM.read(addr);
addr=5;ahour = EEPROM.read(addr);
addr=6;aminute = EEPROM.read(addr);
addr=7;mhour = EEPROM.read(addr);
addr=8;mminute = EEPROM.read(addr);
addr=9;ihour = EEPROM.read(addr);
addr=10;iminute = EEPROM.read(addr);
addr=11;aahour = EEPROM.read(addr);
addr=12;aaminute = EEPROM.read(addr);
  
addr=13;ffhour = EEPROM.read(addr);
addr=14;ffminute = EEPROM.read(addr);
addr=15;cnt4 = EEPROM.read(addr);





// Continuous function for converting bytes to decimals and vice versa
void loop() {
        printTime();
 delay(500);
chk();
chk2();
chkalm();
}
void chkalm(){
  if(fhour==hour){
  if(fminute==minute){
lcd.clear(); lcd.setCursor(0, 0); 
 lcd.print(" alarm ");delay(1500);

 digitalWrite(rly1, LOW);
 delay(1500);

 //command ( 0x03 , 1 ); 
alarmd();//delay(60000);
   digitalWrite(rly1, HIGH);
    
    }  }
    

    }
void alarmd(){
delay(2000);
 }

    
void chk2(){
   if(digitalRead(sw4) == LOW){
lcd.clear(); lcd.setCursor(0, 0); 
 lcd.print("enter  hour");delay(500);
while(digitalRead(sw4) == LOW){delay(500); }

while(digitalRead(sw4) == HIGH){delay(300); 
if(digitalRead(sw2) == LOW){
lcd.setCursor(6, 1); 
 lcd.print("           ");  
fhour++; lcd.setCursor(6, 1); 
 lcd.print(fhour);delay(100);
}
if(digitalRead(sw3) == LOW){
fhour--;
lcd.setCursor(6, 1);  lcd.print("           ");  
lcd.setCursor(6, 1); 
 lcd.print(fhour);delay(100);
}}

lcd.clear(); lcd.setCursor(0, 0); 
 lcd.print("enter  minute");delay(500);
while(digitalRead(sw4) == LOW){delay(500); }

while(digitalRead(sw4) == HIGH){delay(300); 
if(digitalRead(sw2) == LOW){
lcd.setCursor(6, 1); 
 lcd.print("           ");  
fminute++; lcd.setCursor(6, 1); 
 lcd.print(fminute);delay(100);
}
if(digitalRead(sw3) == LOW){
fminute--;
lcd.setCursor(6, 1);  lcd.print("           ");  
lcd.setCursor(6, 1); 
 lcd.print(fminute);delay(100);
}}
  addr=1; EEPROM.write(addr,fhour);
  addr=2; EEPROM.write(addr,fminute);
 }
}
void chk(){
  if(digitalRead(sw1) == LOW){
lcd.clear();
 
lcd.clear(); lcd.setCursor(0, 0); 
 lcd.print("enter hour");delay(500);
while(digitalRead(sw1) == LOW){delay(500); }

while(digitalRead(sw1) == HIGH){delay(300); 
if(digitalRead(sw2) == LOW){
lcd.setCursor(6, 1); 
 lcd.print("           ");  
hour++; lcd.setCursor(6, 1); 
 lcd.print(hour);delay(100);
}
if(digitalRead(sw3) == LOW){
hour--;
lcd.setCursor(6, 1);  lcd.print("           ");  
lcd.setCursor(6, 1); 
 lcd.print(hour);delay(100);
}}

lcd.clear(); lcd.setCursor(0, 0); 
 lcd.print("enter minute");delay(500);
while(digitalRead(sw1) == LOW){delay(500); }

while(digitalRead(sw1) == HIGH){delay(300); 
if(digitalRead(sw2) == LOW){
lcd.setCursor(6, 1); 
 lcd.print("           ");  
minute++; lcd.setCursor(6, 1); 
 lcd.print(minute);delay(100);
}
if(digitalRead(sw3) == LOW){
minute--;
lcd.setCursor(6, 1);  lcd.print("           ");  
lcd.setCursor(6, 1); 
 lcd.print(minute);delay(100);
}}
second=0;

//*/
  // The following codes transmits the data to the RTC
  Wire.beginTransmission(DS1307);
  Wire.write(byte(0));
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekday));
  Wire.write(decToBcd(monthday));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.write(byte(0));
  Wire.endTransmission();
  // Ends transmission of data


  
  }
  }

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


// This set of codes is allows input of data
void setTime() {
  Serial.print("Please enter the current year, 00-99. - ");
  year = readByte();
  Serial.println(year);
  Serial.print("Please enter the current month, 1-12. - ");
  month = readByte();
  Serial.println(months[month-1]);
  Serial.print("Please enter the current day of the month, 1-31. - ");
  monthday = readByte();
  Serial.println(monthday);
  Serial.println("Please enter the current day of the week, 1-7.");
  Serial.print("1 Sun | 2 Mon | 3 Tues | 4 Weds | 5 Thu | 6 Fri | 7 Sat - ");
  weekday = readByte();
  Serial.println(days[weekday-1]);
  Serial.print("Please enter the current hour in 24hr format, 0-23. - ");
  hour = readByte();
  Serial.println(hour);
  Serial.print("Please enter the current minute, 0-59. - ");
  minute = readByte();
  Serial.println(minute);
  second = 0;
  Serial.println("The data has been entered.");
 
  // The following codes transmits the data to the RTC
  Wire.beginTransmission(DS1307);
  Wire.write(byte(0));
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekday));
  Wire.write(decToBcd(monthday));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.write(byte(0));
  Wire.endTransmission();
  // Ends transmission of data
}


byte readByte() {
  while (!Serial.available()) delay(10);
  byte reading = 0;
  byte incomingByte = Serial.read();
  while (incomingByte != '\n') {
    if (incomingByte >= '0' && incomingByte <= '9')
      reading = reading * 10 + (incomingByte - '0');
    else;
    incomingByte = Serial.read();
  }
  Serial.flush();
  return reading;
}


void printTime() {
  char buffer[3];
  readTime();
 /*
  Serial.print(days[weekday-1]);
  Serial.print(" ");
  Serial.print(months[month-1]);
  Serial.print(" ");
  Serial.print(monthday);
  Serial.print(", 20");
  Serial.print(year);
  Serial.print(" ");
  */
  if (hour > 12) {
    hour -= 12;
    AMPM = " PM";
  }
  else AMPM = " AM";


/*
  Serial.print(hour);
  Serial.print("y:");
  sprintf(buffer, "%02d", minute);
  Serial.print(buffer);
  Serial.println(AMPM);
*/
  sprintf(buffer, "%02d", minute);

  lcd.setCursor(0, 0); 
  lcd.print(hour);
  lcd.print(":");
  lcd.print(buffer);
 lcd.print(" ");
  lcd.print(second);
 
  lcd.print(AMPM);
  lcd.print(" ");

///*
lcd.print(days[weekday-1]);

 lcd.setCursor(0, 1); 
  lcd.print(monthday);
 lcd.print("  ");
 lcd.print(months[month-1]);
 lcd.print("  ");
 lcd.print("20");
  lcd.print(year);
//*/
}


void readTime() {
  Wire.beginTransmission(DS1307);
  Wire.write(byte(0));
  Wire.endTransmission();
  Wire.requestFrom(DS1307, 7);
  second = bcdToDec(Wire.read());
  minute = bcdToDec(Wire.read());
  hour = bcdToDec(Wire.read());
  weekday = bcdToDec(Wire.read());
  monthday = bcdToDec(Wire.read());
  month = bcdToDec(Wire.read());
  year = bcdToDec(Wire.read());
}

 

 

 

Step by Step Tutorial Arduino Alarm Clock using Rtc ds1307.we make arduino nano projects our next project is water level indicator using arduino with buzzer