fbpx
ArduinoNovidade

Como utilizar o módulo relógio RTC DS1302 para exibir hora, dia e data com o Arduino

Um relógio de tempo real (RTC, do inglês Real-Time Clock) é um relógio em forma de circuito integrado utilizado para medir a passagem do tempo. Esse dispositivo é comumente encontrado em computadores pessoais, servidores, sistemas embarcados e em outros dispositivos eletrônicos que necessitam de um controle preciso do tempo.

O módulo relógio real time RTC DS1302 (Figura 1) é um RTC simples que faz uso do chip de cronometragem DS1302.

A imagem mostra uma foto de um moto relólogio real time RTC DS1302 em formato físico
FIgura 1 – Módulo relógio real time RTC DS1302.

O módulo relógio real time RTC DS1302 é capaz de fornecer informações via serial de segundo, minuto, dia, data, mês e ano. Além disso, as datas dos meses com menos de 31 dias e anos bissextos são ajustadas automaticamente. O relógio opera no formato de 24 ou 12 horas, com um indicador AM/PM.

O módulo relógio real time RTC DS1302 possui quatro pinos, sendo eles:

  • VCC: pino de alimentação (2,0 ~5,5 V);
  • GND: pino terra;
  • CLK: pino clock;
  • DAT: pino de dados;
  • RST: pino reset.

Neste projeto usaremos o módulo relógio RTC DS1302 em conjunto com a placa Arduino para exibir no monitor serial informações do tempo, como hora, dia e data atual.


MATERIAIS NECESSÁRIOS


ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES

Inicialmente, certifique-se que a sua placa Arduino esteja desligada. Monte atentamente o circuito da Figura 2 utilizando o módulo relógio RTC DS1302 e os fios.

A imagem em questao mostra uma imagem ilustrativa de um circuito para ser feito o projeto exibir hora dia e data utilizando o modulo relogio RTC DST1302
Figura 2 – Circuito para Projeto exibir hora, dia e data usando o módulo relógio RTC DS1302.

Ao realizar a montagem do circuito observe a Tabela 1 :

RTC DS1302Placa UNO
VCC5V
GNDGND
CLK13
DAT12
RST11
Tabela 1 – Pinos para Projeto exibir hora, dia e data usando módulo relógio RTC DS1302.


ELABORANDO O CÓDIGO

Após a montagem do circuito, vamos a programação do Sketch. Neste projeto, iremos exibir hora, dia e data com o módulo RTC DS1302. Para tal, vamos usar a biblioteca Ds1302.h. Esta biblioteca encontra-se disponível para download no seguinte link:

www.blogdarobotica.com/biblioteca-DS1302

Após realizar o download da biblioteca, vamos instalá-la por meio do seguinte caminho: Toolbar > Sketch > Incluir biblioteca > Adicionar biblioteca ZIP.

Com a biblioteca instalada, vamos a programação do nosso Sketch. Acompanhe os passos a seguir para melhor compreensão da lógica de programação :

1. Incluir a biblioteca Ds1302:
Vamos incluir a biblioteca para uso do módulo RTC DS1302 através da instrução #include <Ds1302.h.h>.

2.Inicializar a comunicação serial e o RTC:
A comunicação serial será inicializada por meio da instrução: Serial.begin(9600); e a inicialização do módulo RTC será feita através da instrução rtc.init();.

3. Obter as informações do tempo atual:
Obteremos as informações de tempo atual através das instruções:

Ds1302::DateTime now;

rtc.getDateTime(&now);

4.Imprimir a data atual:
Para imprimir a data atual usaremos os comandos:

Serial.print(now.day); //Imprime o dia do mês (1-31)
Serial.print(now.month); // Imprime o mês (1-12)
Serial.print(now.year); //Imprime o ano (0-99)

Imprimiremos a data atual no formato dia/mês/ano, em que o dia e o mês serão constituídos por dois caracteres e o ano por quatro, ficando da seguinte maneira: 05/11/2021.

Portanto, será necessário escrever o número ‘0’ quando o dia ou mês forem menores que 10 e escrever ‘20’ antes de imprimir o ano.

5. Imprimir as horas:
Para imprimir a hora atual usaremos os comandos:

Serial.print(now.hour); //Imprime hora atual(0 – 23)
Serial.print(now.minute); //Imprime os segundos (0 – 59)
Serial.print(now.second); //Imprime os segundos (0 – 59)

Imprimiremos a hora atual no formato hora:minuto:segundo, em que a hora, o minuto e o segundo serão constituídos por dois caracteres, ficando da seguinte maneira: 11:20:51, por exemplo.

Portanto, será necessário escrever o número ‘0’ quando a hora, o minuto e o segundo forem menores que 10.

Com isso, o Sketch deste projeto ficará da seguinte maneira:

/*
  ---   MÓDULO RELÓGIO RTC DS1302 COM ARDUINO    ---
  ==================================================
  == BLOG DA ROBOTICA - www.blogdarobotica.com ==
  ==================================================
  Autora: Carol Correia Viana
  E-mail: contato@blogdarobotica.com
  Facebook: facebook.com/blogdarobotica
  Instagram:@blogdarobotica
  YouTube: youtube.com/user/blogdarobotica
  ==================================================
*/

#include <Ds1302.h> //Biblioteca RTC DS1302
#define CLKpin 13 //Pino CLK
#define DATpin 12 //Pino DAT
#define RSTpin 11 //Pino RST

//Objeto rtc do tipo DS1302 - Parâmetros (pino RST, pino CLK, pino DAT)
Ds1302 rtc(RSTpin, CLKpin, DATpin);

const static char* DiasdaSemana[] = { "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado", "Domingo" };

void setup() {
  Serial.begin(9600); //Inicialização da comunicação serial
  rtc.init(); //Inicializa o rtc
}

void loop() {
  //Obtém as informações de tempo atual
  Ds1302::DateTime now;
  rtc.getDateTime(&now);

  //Imprime data (dd/mm/aaaa)
  Serial.print("Data: ");
  if (now.day < 10) Serial.print('0'); //Se o dia do mês for menor que 10, imprime 0 à frente
  Serial.print(now.day); //Imprime o dia do mês (1-31)
  Serial.print('/');

  if (now.month < 10) Serial.print('0'); //Se o mês for menor que 10, imprime 0 à frente
  Serial.print(now.month); // Imprime o mês (1-12)
  Serial.print('/');

  Serial.print("20"); //Imprime 20
  Serial.print(now.year); //Imprime o ano (0-99)
  Serial.print(' ');

  //Imprime o dia da semana (Segunda, Terça,..., Domingo)
  Serial.print("- Dia: ");
  Serial.print(DiasdaSemana[now.dow - 1]); //Imprime o dia da semana
  Serial.print(' ');

  //Imprime a hora atual (hh:mm:ss)
  Serial.print("- Hora: ");
  if (now.hour < 10) Serial.print('0'); //Se a hora for menor que 10, imprime 0 à frente
  Serial.print(now.hour); //Imprime hora atual(0 – 23)
  Serial.print(':');
  if (now.minute < 10) Serial.print('0'); //Se o minuto for menor que 10, imprime 0 à frente
  Serial.print(now.minute); //Imprime os segundos (0-59)
  Serial.print(':');
  if (now.second < 10) Serial.print('0'); //Se o segundo for menor que 10, imprime 0 à frente
  Serial.print(now.second); //Imprime os segundos (0-59)
  Serial.println();
  delay(100);
}

Espero ter ajudado,

Obrigada a todos e, em caso de dúvidas, deixe seu comentário abaixo!

Dúvidas? Deixe seu comentário

Bacharel em Engenharia Elétrica com ênfase em Eletrônica, mestra em Engenharia Industrial e especialista em Docência com ênfase em Educação Inclusiva. Atua no setor de Desenvolvimento de Produtos na Casa da Robótica. Editora chefe e articulista no Blog da Robótica. Fanática por livros, Star Wars e projetos Maker.

Carol Correia Viana

Bacharel em Engenharia Elétrica com ênfase em Eletrônica, mestra em Engenharia Industrial e especialista em Docência com ênfase em Educação Inclusiva. Atua no setor de Desenvolvimento de Produtos na Casa da Robótica. Editora chefe e articulista no Blog da Robótica. Fanática por livros, Star Wars e projetos Maker.

Deixe uma pergunta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.