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.
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
- 1 x Placa UNO SMD R3 Atmega328 compatível com Arduino UNO;
- 1 x Cabo USB;
- 1 x Módulo relógio RTC DS1302;
- Fios de jumper macho-fêmea.
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.
Ao realizar a montagem do circuito observe a Tabela 1 :
RTC DS1302 | Placa UNO |
VCC | 5V |
GND | GND |
CLK | 13 |
DAT | 12 |
RST | 11 |
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!
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.