Antes de mais nada, se você está aqui é porque está quer aprender sobre o RTC – Relógio em Tempo Real. Portanto, veremos como utilizar o módulo Real Time Clock DS1302 com o Arduino. Certamente, esse pequeno relógio pode ser útil em projetos como alarmes e na execução de tarefas em determinado momento.
Sendo assim, existem diversos módulos RTCs que variam algumas funcionalidades. Dentre os modelos, podemos citar o DS3231 (que vem com sensor de temperatura), DS1307 e o que você verá hoje: DS1302.
Se você tem interesse em aprender tudo sobre Arduino, confira o método ARDUHACK!
Dessa forma, o módulo informa a hora, minutos, segundos e a data (dia, ano e mês). Ademais, ele também faz o ajuste de meses com menos de 31 dias e a correção de ano bissexto. As principais especificações são:
- Memória RAM (para armazenar dados): 31 Bytes
- Corrente: até 2V consome menos 300nA, em 5V até 1,5mA
- Tensão de operação: 2 a 5V
- Chip: DS1302
- Circuito de Detecção de falhas.
Você pode encontrar mais informações no datasheet, clique aqui. Assim como usaremos o Arduino para alimentação, é preciso, ainda, uma bateria de lítio CR2032. Isso permite que os dados permaneçam armazenados mesmo com a falha na energia.
Além disso, a comunicação do DS1302 é via Serial, ou seja, há três pinos responsáveis, são eles: SCL, CE e I/O. Quando o pino CE (Chip Enable) está em nível alto, se inicia a comunicação, caso contrário, ela termina.
Agora que já temos as informações necessárias sobre o Relógio em Tempo Real, vamos testá-lo na prática. Para isso, será necessário ativar o monitor Serial no próprio Arduino ou utilizar um Display. Em seguida, veremos como fazer isso.
Hardware – Real Time Clock com Arduino
A fim de ver o funcionamento, vamos montar o circuito com o RTC e um Display LCD via I2C. O módulo I2C para o Display facilita muito as ligações, diminuindo, assim, o número de jumpers. De acordo com o circuito, faça as seguintes conexões no RTC DS1302:
- VCC em 3,3V
- GND
- Pinos RST, DATA e CLOCK: 2, 3 e 4, respectivamente
Lembrando, ainda, de colocar a bateria CR2032, em caso de falhas de energia ela manterá o RTC em funcionamento.

Código – Real Time Clock com Arduino
Finalmente, vamos começar a programar. Tudo que você precisa é instalar duas blibliotecas. Clique no link, faça o download das pastas zipadas. Em seguida, cole essas pastas em “libraries” , dentro da pasta do Arduino:
Agora, temos tudo para carregar o código, mas antes, é preciso entender algumas situações. A biblioteca responsável pelo DS1302, já se encarrega de realizar todos os comandos que definem a data, hora e dia da semana. Entretanto, você pode definir a data de início. Observe a parte do código responsável por essa função:
rtc.setDOW(SABADO); // Dia da Semana
rtc.setTime(8, 00, 00); // Horário 12:00:00 (formato 24 horas)
rtc.setDate(3, 10, 2020); // Data (dia, mês, ano)
Após definir a data inicial e carregar o programa para a placa, você verá que cada vez que o Arduino é resetado, o relógio começa a contar desde o início do qual foi programado. Ou seja, a data que ajustada no código.
Porém, o que queremos é que ele continue contando do momento onde parou. Porque mesmo que alimentação externa para o módulo RTC acabe, ainda temos a bateria embutida para mantê-lo acionado.
Portanto, para que o relógio faça a contagem de tempo de maneira contínua, e não volte ao início cada vez que o Arduino é resetado, faça o seguinte:
1º Carregue o Código para a placa com a data inicial que você escolher
//Bibliotecas para o RTC e para o Display
#include <DS1302.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//Endereco do Display
#define endereco 0x27 // Endereços comuns: 0x27, 0x3F
#define colunas 16
#define linhas 2
LiquidCrystal_I2C lcd(endereco, colunas, linhas);
DS1302 rtc(2, 3, 4); // Pinos (RST, DATA, CLK)
void setup()
{
// Ajusta o clock para o modo de execução e desativa contra proteção
rtc.halt(false);
rtc.writeProtect(false);
lcd.init(); //Inicia o Display LCD
lcd.backlight();
Serial.begin(9600); //Inicia a Serial
rtc.setDOW(SABADO); // Dia da Semana
rtc.setTime(8,00,00); // Horário 12:00:00 (formato 24hr)
rtc.setDate(3, 10, 2020); // Data (dia, mês, ano)
}
void loop()
{
lcd.setCursor(0, 0);
lcd.print(rtc.getTimeStr()); // Imprime Horário
lcd.print(" ");
lcd.print(rtc.getDOWStr(FORMAT_SHORT)); // Imprime dia da Semana
Serial.println(rtc.getTimeStr());
Serial.println(rtc.getDOWStr(FORMAT_SHORT));
lcd.setCursor(1, 1);
lcd.print(rtc.getDateStr()); // Imprime a data
Serial.println(rtc.getDateStr());
delay (1000);
}
2º Clique no Botão Resetar do Arduino, e deixe as seguintes linhas em comentário(//):
//rtc.setDOW(SABADO); // Dia da Semana
//rtc.setTime(8,00,00); // Horário 12:00:00 (formato 24hr)
//rtc.setDate(3, 10, 2020); // Data (dia, mês, ano)
3º Recarregue o Código
Por fim, perceba que, mesmo desligando o Arduino da alimentação externa, ao ligá-lo de novo, o Display mostrará a data e hora corretamente.
Para aprender mais sobre módulos, sensores e Shields para Arduino, conheça o treinamento Arduhack, clique aqui.
Continue nos acompanhando nas redes sociais:
Instagram: @lobodarobotica
Facebook: /lobodarobotica
YouTube: /lobodarobotica