- Descrição: O Teclado Matricial de Membrana 4X3 com 12 teclas foi…
Como usar com Arduino – Módulo Real Time Clock RTC DS1302
– Descrição:
O Módulo Real Time Clock RTC DS1302 é um relógio em tempo real (RTC) que possui calendário completo e conta com 31 Bytes de SRAM. O mesmo é capaz de fornecer informações de hora, minutos, segundos, dia, data, mês e ano.
Para o funcionamento do Módulo Real Time Clock RTC DS1302 é necessário além da alimentação da placa, uma bateria CR2032 para poder permitir que os dados fiquem armazenados mesmo com a falta de energia. Além disso, o módulo é capaz de detectar falhas de energia e consequentemente acionando a bateria para evitar que os dados sejam perdidos. O módulo também é capaz de ajustar automaticamente o final dos meses que possuem menos de 31 dias, faz a correção de ano bissexto e trabalha tanto no formato de 12 horas quanto 24 horas.
– Especificações e características:
– Controlador: DS1302
– Tensão de operação: 2 a 5VDC
– Memória RAM não volátil: 31 bytes
– Computa horas / minutos / segundos / dias da semana / mês / meses / anos
– Consome menos de 300nA quando alimentado com 2VDC
– Possui circuito de detecção de falha de energia
– Bateria compatível: CR2032
– Aplicações:
Projetos com Arduino ou outras plataformas microcontroladas em que seja necessário obter informações das horas, dia e data.
– Proposta da prática:
Utilizar o Módulo Real Time Clock RTC DS1302 em conjunto com o Arduino e obter informações de horas e data. Estas informações serão exibidas no monitor serial do ambiente de programação do Arduino.
– Lista dos itens necessários:
01 – Arduino com Cabo USB
01 – Módulo Real Time Clock RTC DS1302
04 – Cabos Jumper macho-fêmea
– Esquema de ligação da prática
– Tutorial de instalação e configuração do ambiente de programação do Arduino:
Arduino – Instalação e Configuração da IDE no Windows
– Biblioteca:
– Importando bibliotecas para o ambiente de programação do Arduino:
Arduino – Importando bibliotecas para a IDE
– Código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
#include <ThreeWire.h> //INCLUSÃO DA BIBLIOTECA #include <RtcDS1302.h> //INCLUSÃO DA BIBLIOTECA ThreeWire myWire(4, 5, 2); //OBJETO DO TIPO ThreeWire RtcDS1302<ThreeWire> Rtc(myWire); //OBJETO DO TIPO RtcDS1302 void setup () { Serial.begin(9600); //INICIALIZA A SERIAL Rtc.Begin(); //INICIALIZA O RTC Serial.print("Compilado em: "); //IMPRIME O TEXTO NO MONITOR SERIAL RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__); //VARIÁVEL RECEBE DATA E HORA DE COMPILAÇÃO printDateTime(compiled); //PASSA OS PARÂMETROS PARA A FUNÇÃO printDateTime Serial.println(); //QUEBRA DE LINHA NA SERIAL Serial.println(); //QUEBRA DE LINHA NA SERIAL if(Rtc.GetIsWriteProtected()){ //SE O RTC ESTIVER PROTEGIDO CONTRA GRAVAÇÃO, FAZ Serial.println("RTC está protegido contra gravação. Habilitando a gravação agora..."); //IMPRIME O TEXTO NO MONITOR SERIAL Rtc.SetIsWriteProtected(false); //HABILITA GRAVAÇÃO NO RTC Serial.println(); //QUEBRA DE LINHA NA SERIAL } if(!Rtc.GetIsRunning()){ //SE RTC NÃO ESTIVER SENDO EXECUTADO, FAZ Serial.println("RTC não está funcionando de forma contínua. Iniciando agora..."); //IMPRIME O TEXTO NO MONITOR SERIAL Rtc.SetIsRunning(true); //INICIALIZA O RTC Serial.println(); //QUEBRA DE LINHA NA SERIAL } RtcDateTime now = Rtc.GetDateTime(); //VARIÁVEL RECEBE INFORMAÇÕES if (now < compiled) { //SE A INFORMAÇÃO REGISTRADA FOR MENOR QUE A INFORMAÇÃO COMPILADA, FAZ Serial.println("As informações atuais do RTC estão desatualizadas. Atualizando informações..."); //IMPRIME O TEXTO NO MONITOR SERIAL Rtc.SetDateTime(compiled); //INFORMAÇÕES COMPILADAS SUBSTITUEM AS INFORMAÇÕES ANTERIORES Serial.println(); //QUEBRA DE LINHA NA SERIAL } else if (now > compiled){ //SENÃO, SE A INFORMAÇÃO REGISTRADA FOR MAIOR QUE A INFORMAÇÃO COMPILADA, FAZ Serial.println("As informações atuais do RTC são mais recentes que as de compilação. Isso é o esperado."); //IMPRIME O TEXTO NO MONITOR SERIAL Serial.println(); //QUEBRA DE LINHA NA SERIAL } else if (now == compiled) { //SENÃO, SE A INFORMAÇÃO REGISTRADA FOR IGUAL A INFORMAÇÃO COMPILADA, FAZ Serial.println("As informações atuais do RTC são iguais as de compilação! Não é o esperado, mas está tudo OK."); //IMPRIME O TEXTO NO MONITOR SERIAL Serial.println(); //QUEBRA DE LINHA NA SERIAL } } void loop () { RtcDateTime now = Rtc.GetDateTime(); //VARIÁVEL RECEBE INFORMAÇÕES printDateTime(now); //PASSA OS PARÂMETROS PARA A FUNÇÃO printDateTime Serial.println(); //QUEBRA DE LINHA NA SERIAL delay(1000); //INTERVALO DE 1 SEGUNDO } #define countof(a) (sizeof(a) / sizeof(a[0])) void printDateTime(const RtcDateTime& dt){ char datestring[20]; //VARIÁVEL ARMAZENA AS INFORMAÇÕES DE DATA E HORA snprintf_P(datestring, countof(datestring), PSTR("%02u/%02u/%04u %02u:%02u:%02u"), //FORMATO DE EXIBIÇÃO DAS INFORMAÇÕES dt.Day(), //DIA dt.Month(), //MÊS dt.Year(), //ANO dt.Hour(), //HORA dt.Minute(), //MINUTOS dt.Second() ); //SEGUNDOS Serial.print(datestring); //IMPRIME NO MONITOR SERIAL AS INFORMAÇÕES } |
– Resultado final:
Gostou desta prática? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigado e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Postagem anterior: Como usar com Arduino – Sensor de Pressão e Temperatura BMP180
Próxima postagem: Como usar com Arduino – Sensor Seguidor de Linha TCRT5000
Está acontecendo isso, será que o senhor poderia me ajudar?
Compilado em: 31/12/2021 13:29:50
As informações atuais do RTC são iguais as de compilação! Não é o esperado, mas está tudo OK.
31/12/2021 13:29:50
31/12/2021 13:29:50
31/12/2021 13:29:50
31/12/2021 13:29:50
31/12/2021 13:29:50
31/12/2021 13:29:50
31/12/2021 13:29:50
Olá Euler, boa noite. Tudo bem?
Estou tentando utilizar essa biblioteca com esse código no meu projeto, mas fico recebendo o seguinte erro:
In file included from C:\Users\Pichau\Documents\Arduino\lcd_test4\lcd_test4.ino:49:0:
C:\Users\Pichau\Documents\Arduino\libraries\Rtc-master\src/RtcDS1302.h: In member function ‘RtcDateTime RtcDS1302::GetDateTime()’:
C:\Users\Pichau\Documents\Arduino\libraries\Rtc-master\src/RtcDS1302.h:162:61: error: ‘THREEWIRE_READFLAG’ was not declared in this scope
_wire.beginTransmission(DS1302_REG_TIMEDATE_BURST | THREEWIRE_READFLAG);
^~~~~~~~~~~~~~~~~~
C:\Users\Pichau\Documents\Arduino\libraries\Rtc-master\src/RtcDS1302.h: In member function ‘uint8_t RtcDS1302::GetMemory(uint8_t*, uint8_t)’:
C:\Users\Pichau\Documents\Arduino\libraries\Rtc-master\src/RtcDS1302.h:227:56: error: ‘THREEWIRE_READFLAG’ was not declared in this scope
_wire.beginTransmission(DS1302_REG_RAM_BURST | THREEWIRE_READFLAG);
^~~~~~~~~~~~~~~~~~
C:\Users\Pichau\Documents\Arduino\libraries\Rtc-master\src/RtcDS1302.h: In member function ‘uint8_t RtcDS1302::getReg(uint8_t)’:
C:\Users\Pichau\Documents\Arduino\libraries\Rtc-master\src/RtcDS1302.h:247:46: error: ‘THREEWIRE_READFLAG’ was not declared in this scope
_wire.beginTransmission(regAddress | THREEWIRE_READFLAG);
Você saberia como resolvê-lo?
Muito obrigado pela ajuda!
Olá Guilherme.
Agradeço pelo comentário!
Sugiro que remova e adicione novamente a biblioteca disponibilizada no tutorial, pois acabei de testar o código e está funcionando perfeitamente.
Olá Euler
Muito obrigado pela resposta!
Segui a sua sugestão e deletei da minha pasta de libs a biblioteca disponibilizada aqui no tutorial (rtc-master). Porém, infelizmente o problema persiste, não sei dizer o porque.
Abri o arquivo da biblioteca RtcDS1302 para tentar entender o erro, e pelo que vi a THREEWIRE_READFLAG não foi declarada em nenhum lugar. Será que é esse o problema? Você consegue compartilhar como está o código apenas dessa sua lib comigo para compararmos se está igual?
Muito obrigado pela prontidão e disponibilidade em me ajudar.
Um abraço!
Mas o código que usei é o mesmo da postagem e a biblioteca também é a mesma disponibilizada para download.
Não fiz nenhuma alteração nos arquivos originais. Não sei qual versão do IDE do Arduino está usando, mas aqui uso a 1.8.13.
Boa noite, o meu esta acontecendo isto!
pode me ajudar?
As informações atuais do RTC são mais recentes que as de compilação. Isso é o esperado.
00/00/2000 00:27:58
00/00/2000 00:27:59
00/00/2000 00:28:00
00/00/2000 00:28:01
00/00/2000 00:28:02
Boa Tarde,
Como é que eu deste código retiro a data para guardar num cartão SD?
Obrigada
Olá Carolina.
Agradeço pelo comentário!
Recomendo que leia os comentários das linhas do código da postagem, pois lá é informado do que se trata algumas das variáveis que armazena as informações.
Boa noite, o meu esta acontecendo isto!
pode me ajudar?
Compilado em:02/09/2019 18:05:31
As informações atuais do RTC são mais recentes que as de compilação. Isso é o esperado.
00/00/2000 00:27:58
00/00/2000 00:27:59
00/00/2000 00:28:00
00/00/2000 00:28:01
00/00/2000 00:28:02
Olá Willian.
Agradeço pelo comentário!
Troque a bateria do RTC, recarregue o código e veja se resolve.
Está me acontecendo isto:
{
Compilado em: 08/08/2019 10:46:40
As informações atuais do RTC são mais recentes que as de compilação. Isso é o esperado.
08/08/2019 16:58:42
08/08/2019 16:58:43
08/08/2019 16:58:44
}
Olá José.
Agradeço pelo comentário!
Remova a bateria do módulo, aguarde alguns segundos e tente novamente carregar o código no Arduino e veja se irá registrar as informações corretamente.
Uma dúvida, talvez tenha passado despercebido por mim, mas onde eu faço a inserção da data atual?
Olá Gabriel.
Agradeço pelo comentário!
O código captura a data e hora de compilação do código e usa como parâmetro para definir as informações do RTC.