Your cart is currently empty!
arduino alarm clock using rtc ds1307
[otw_is sidebar=otw-sidebar-1]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
arduino rtc ds1307 library download
Arduino Alarm Clock using Rtc ds1307 Circuit Diagram
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