Search Code

Lesson 105-2: Alarm Clock Using a DS1307 with Arduino

Lesson 105-2: Alarm Clock Using a DS1307 with Arduino

In this lesson, we have seven projects in one. We learn how to use the DS1307 Real-Time Clock (RTC) module to build a clock using Arduino.

This is project 2-3. In this project, we learn how to use the DS1307 as an alarm clock, where we set a specific date and time for our alarm, and one output pin of the Arduino is turned on using the alarm. As shown in the video, we first turn on a buzzer as an alarm, and then the wiring diagram is shown for connecting an AC bulb or any other device to the relay. A relay is just a mechanical switch to turn something on or off.

400-Lesson 105: Ultimate Arduino Clock projects using the DS1307
Language: C++
/*
 * Lesson 105-1: Building Clock using DS1307 | Robojax Arduino Step By Step Course
 This code:  Project 2-3: DS1307 Alarm with Buzzer and Relay
In this lesson we learn how to use the DS1307 Real-Time Clock module to build an Arduino clock. In this lesson, we learn about 7 projects. 

Project 1: Basic DS1307 Clock with Arduino
Project 2: DS1307 Alarm with Buzzer and Relay (this code)
Project 3: DS1307 Alarm with Relay and AC Bulb (this code)
Project 4: LED Seven Segment Clock using DS1307
Project 5: Unlimited Alarm with Relay
Project 6: LCD Clock using DS1307
Project 7: LCD Clock with Alarm 
 * Watch Video instruction for this code:https://youtu.be/gz9xqvRroDY
 * 
 * This code is part of the Arduino Step by Step Course which starts here:  https://youtu.be/-6qSrDUA5a8
 * 
 * For the library for this code, visit http://robojax.com/
 * 
If you found this tutorial helpful, please support me so I can continue creating 
content like this. Make a donation using PayPal or a credit card: https://bit.ly/donate-robojax 

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.


*/

#include <Wire.h>
#include "RTClib.h"

#define alarmPin 2

const int alarm[]={2019,6,14,22,17,0};
const int waitTime =4000;


RTC_DS1307 rtc;


void setup () {
  pinMode(alarmPin,OUTPUT);//set pin 2 as output
 
  while (!Serial); // for Leonardo/Micro/Zero

  Serial.begin(9600);
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
     //rtc.adjust(DateTime(2019, 3, 3, 20, 0, 0));
  }
  //rtc.adjust(DateTime(2019, 3, 3, 20, 0, 0));
   //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}

void loop () {
    DateTime robojax = rtc.now();
    Serial.print("Alarm: ");
    for(int i=0;i<6;i++){
      Serial.print(alarm[i]);
      if(i !=5){
        Serial.print("-");
      }
    }
    Serial.println();
    Serial.print("Time:  ");
    Serial.print(robojax.year(), DEC);
    Serial.print("-");
    Serial.print(robojax.month(), DEC);
    Serial.print("-");
    Serial.print(robojax.day(), DEC);
    Serial.print("-");    
    Serial.print(robojax.hour(), DEC);
    Serial.print("-");
    Serial.print(robojax.minute(), DEC);
    Serial.print("-");
    Serial.print(robojax.second(), DEC);
    Serial.println();
 
   if(checkAlarm(robojax)){
    digitalWrite(alarmPin, HIGH);// 
    Serial.print("Alarm Triggered");
    delay(waitTime);
    //while (1);// wait for ever 
   }else{
    digitalWrite(alarmPin, LOW);//
   }
    Serial.println();
    delay(500);
}

/*
 * 
 * @brief returns true if alarm array matches the current time
 * @param timeNow, is the object for RTC clock
 * @return true if alarm values matches current time
 * Written by Ahmad Shamshiri for Robojax.com 
 * on Friday, June 14th, 2019 at 20:28 in Ajax, Ontario, Canada
 * 
 */

boolean checkAlarm(DateTime timeNow){

  if(
   alarm[0] ==timeNow.year()
   &&
   alarm[1] ==timeNow.month()
   &&
   alarm[2] ==timeNow.day()
   &&
   alarm[3] ==timeNow.hour()
   &&
   alarm[4] ==timeNow.minute()
   &&
   alarm[5] ==timeNow.second()
   ){
      return true;
   }else{
      return false;
     
   }
  
}//checkAlarm

Files📁

No files available.