Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade

Real-Time Clock with DS1307 and Arduino

In this article, we will explore the integration of a Real-Time Clock (RTC) module, specifically the DS1307, with an Arduino. The DS1307 is a low-power, full binary-coded decimal (BCD) clock/calendar with 56 bytes of NV SRAM. It communicates with the Arduino via the I2C protocol, making it an ideal choice for projects that require accurate timekeeping, such as data logging, alarms, and scheduling tasks. By the end of this article, you will understand how to set up the DS1307 RTC module with an Arduino, read and write time and date data, and use this information in various applications.

Project: Our project will involve creating a simple digital clock using the DS1307 RTC module and an Arduino. The objectives of this project are to:

  • Interface the DS1307 RTC module with the Arduino.
  • Read the current time and date from the RTC module.
  • Display the time and date on a serial monitor or an LCD screen.
  • Set the time and date on the RTC module using the Arduino.

Components List:

  • Arduino Uno (1)
  • DS1307 RTC Module (1)
  • 16x2 LCD Display (optional) (1)
  • I2C Module for LCD (optional) (1)
  • Breadboard (1)
  • Jumper Wires (several)
  • 3V Coin Cell Battery (CR2032) (1)

Examples:

  1. Basic Setup and Reading Time:
    
    #include <Wire.h>
    #include <RTClib.h>

// Create an RTC object RTC_DS1307 rtc;

void setup() { // Start the serial communication Serial.begin(9600);

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

// Check if the RTC is running, if not, set the time if (!rtc.isrunning()) { Serial.println("RTC is NOT running!"); // Set the time to the date & time this sketch was compiled rtc.adjust(DateTime(F(DATE), F(TIME))); } }

void loop() { // Get the current date and time DateTime now = rtc.now();

// Print the current date and time Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(" "); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println();

// Wait for a second before repeating delay(1000); }


2. **Setting the Time Manually:**
```cpp
#include <Wire.h>
#include <RTClib.h>

// Create an RTC object
RTC_DS1307 rtc;

void setup() {
  // Start the serial communication
  Serial.begin(9600);

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

  // Set the time manually
  rtc.adjust(DateTime(2023, 10, 1, 12, 0, 0)); // Year, Month, Day, Hour, Minute, Second
}

void loop() {
  // Get the current date and time
  DateTime now = rtc.now();

  // Print the current date and time
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();

  // Wait for a second before repeating
  delay(1000);
}
  1. Displaying Time on an LCD:
    
    #include <Wire.h>
    #include <RTClib.h>
    #include <LiquidCrystal_I2C.h>

// Create an RTC object RTC_DS1307 rtc;

// Set the LCD address to 0x27 for a 16 chars and 2 line display LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() { // Initialize the LCD lcd.begin(); lcd.backlight();

// Initialize the RTC if (!rtc.begin()) { lcd.print("Couldn't find RTC"); while (1); }

// Check if the RTC is running, if not, set the time if (!rtc.isrunning()) { lcd.print("RTC is NOT running!"); // Set the time to the date & time this sketch was compiled rtc.adjust(DateTime(F(DATE), F(TIME))); } }

void loop() { // Get the current date and time DateTime now = rtc.now();

// Display the current date and time on the LCD lcd.setCursor(0, 0); lcd.print(now.year(), DEC); lcd.print('/'); lcd.print(now.month(), DEC); lcd.print('/'); lcd.print(now.day(), DEC);

lcd.setCursor(0, 1); lcd.print(now.hour(), DEC); lcd.print(':'); lcd.print(now.minute(), DEC); lcd.print(':'); lcd.print(now.second(), DEC);

// Wait for a second before repeating delay(1000); }



To share Download PDF

Gostou do artigo? Deixe sua avaliação!
Sua opinião é muito importante para nós. Clique em um dos botões abaixo para nos dizer o que achou deste conteúdo.