Skip to content

Real Time Clock com Arduino – RTC DS1302

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.

real time clock com arduino

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

plugins premium WordPress

Semana da Automação Com Arduino

Se Cadastre e Receba Acesso a 3 aulas gratuitas na Semana da Automação com Arduino