O módulo RTC significa Real Time Clock (Relógio de Tempo Real).
O módulo DS1307 mantém a contagem de horas, minutos, segundos, dia, mês e ano.
Possui bateria de backup (CR2032), garantindo que o relógio continue funcionando mesmo sem energia externa.
Utiliza a comunicação via I2C.
Ele trabalha com alimentação de 5V (com suporte à bateria de backup 3V).
Mantém a hora e data atualizadas mesmo sem o microcontrolador ligado.
Interface simples via barramento I2C (SDA / SCL).
Pode ser usado em agendamentos, registros de eventos, sistemas de automação, etc.
O módulo RTC DS1307 possui os seguintes pinos:
Alguns módulos baseados no DS3231 (variação mais precisa do DS1307) já incluem sensor de temperatura interno.
No módulo DS1307, normalmente há espaço para integração de um sensor externo (ex: DS18B20) em algumas versões da placa.
Esse recurso permite registrar hora + temperatura, útil para registros ambientais.
O barramento I2C suporta múltiplos dispositivos conectados em paralelo.
Isso significa que o RTC DS1307 pode compartilhar as mesmas linhas SDA e SCL com outros módulos (ex: sensores, displays, etc.).
Cada dispositivo possui um endereço único no barramento.
Esse recurso é chamado de Daisy Chain, pois permite ligar vários módulos em série no mesmo par de fios.
O protocolo I2C (Inter-Integrated Circuit) é um protocolo de comunicação serial síncrono.
Ele utiliza apenas 2 linhas de comunicação, SDA (dados) e SCL (clock).
Ele permite conectar múltiplos dispositivos no mesmo barramento (até 127 endereços).
Com ele, o Arduino controla o clock e inicia as transmissões, enquanto que os módulos (ex: RTC DS1307, sensores) respondem conforme seu endereço.
Além do chip RTC, o módulo geralmente inclui uma EEPROM AT24C32 com capacidade de 32 Kb.
Sua comunicação também é via I2C, compartilhando as mesmas linhas SDA e SCL.
Ele pode ser útil para armazenar dados permanentes, como configurações do sistema, registros de eventos ou até mesmo logs de sensores.
Os dados permanecem gravados mesmo após desligar o circuito.
Neste projeto você criará um circuito que faz o uso de um sensor RTC DS1307 com o Arduino.
Para a criação deste circuito serão necessários os seguintes componentes:
Para montar o circuito, visualize na imagem a seguir como conectar os componentes entre a placa Arduino e a breadboard.
Uma vez criado o circuito, use o código fonte a seguir no Arduino IDE para fazer o upload dele na placa Arduino e assim ver o resultado do circuito em funcionamento.
/**
* Código do curso Magos do Arduino para utilizar um sensor RTC (horas em tempo real) DS1307 com o Arduino.
*
* Imprima no monitor serial a data e hora atual no formato "Sábado, 20 de Setembro de 2025, 9:06:39" com o Arduino.
*
* Utiliza a biblioteca uRTCLib por Naguissa, que pode ser instalada através do gerenciador de bibliotecas do Arduino IDE.
*
* (c) Copyright KazaleIT
* @kazaleitoficial no YouTube
*/
#include <Arduino.h>
#include <uRTCLib.h>
// cria uma instância do uRTCLib no endereço 0x68, que é o endereço do DS1307
uRTCLib rtc(0x68);
char diasDaSemana[7][15] = {
"Domingo",
"Segunda-feira",
"Terça-feira",
"Quarta-feira",
"Quinta-feira",
"Sexta-feira",
"Sábado"
};
char meses[12][15] = {
"Janeiro",
"Fevereiro",
"Março",
"Abril",
"Maio",
"Junho",
"Julho",
"Agosto",
"Setembro",
"Outubro",
"Novembro",
"Dezembro"
};
void setup() {
Serial.begin(9600); // inicializa conexão serial
URTCLIB_WIRE.begin(); // inicializa a conexão I2C do DS1307
// execute uma única vez para ajustar a data e hora e depois comente o código a seguir
// parâmetros: segundos, minutos, horas, dia da semana, dia do mês, mês e ano
// para o dia da semana, use (1=Domingo, 2=Segunda-feira,... , 7=Sábado)
rtc.set(0, 5, 9, 7, 20, 9, 25);
}
void loop() {
rtc.refresh(); // utilizado para obter a data e hora atual
char dataHora[100];
sprintf(dataHora, "%s, %d de %s de 20%d, %d:%02d:%02d",
diasDaSemana[rtc.dayOfWeek() - 1], // dia da semana
rtc.day(), // dia do mês
meses[rtc.month() - 1], // mês
rtc.year(), // ano
rtc.hour(), // hora
rtc.minute(), // minutos
rtc.second() // segundos
);
Serial.println(dataHora);
delay(1000);
}