Nas duas primeiras postagens desta série, “O que é Node-RED?…
Como usar com Arduino – Módulo Real Time Clock RTC DS3231
– Descrição:
O Módulo Real Time Clock RTC DS3231 é um relógio em tempo real (RTC) de alta precisão e baixo consumo de energia. O módulo possui um sensor de temperatura embutido e possui também um cristal oscilador para ampliar sua exatidão. 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 DS3231 é 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: DS3231
– Tensão de operação: 3,3V – 5VDC
– Interface: I2C
– Computa horas / minutos / segundos / dias da semana / mês / meses / anos (de 2000 a 2099)
– Consome menos de 500nA no modo bateria com oscilador em funcionamento
– Memória: AT24C32 (capacidade de 32Kb que podem ser usados também como RAM estendida ao microcontrolador)
– Possui circuito de detecção de falha de energia
– Interface: I2C
– Bateria compatível: CR2032
– Sensor de temperatura: ~ 3° celsius de exatidão
– Temperatura de operação: 0 a 40° celsius
– 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 DS3231 em conjunto com o Arduino e obter informações de horas, dia e data atual. 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 DS3231
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:
OBS: se o RTC estiver sendo ligado pela primeira vez, ficou sem energia, esgotou a bateria ou você precisa de ajustar as informações do mesmo, remova o comentário da linha 18 ou 19 para que as informações sejam atualizadas. A linha de código de número 18 captura as informações no momento em que o sketch for compilado e define no RTC. Na linha de código de número 19 você pode inserir as informações manualmente. Lembre-se de usar somente uma das linhas e deixar uma delas comentada.
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 |
#include <Wire.h> //INCLUSÃO DA BIBLIOTECA #include "RTClib.h" //INCLUSÃO DA BIBLIOTECA RTC_DS3231 rtc; //OBJETO DO TIPO RTC_DS3231 //DECLARAÇÃO DOS DIAS DA SEMANA char daysOfTheWeek[7][12] = {"Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sábado"}; void setup(){ Serial.begin(9600); //INICIALIZA A SERIAL if(! rtc.begin()) { // SE O RTC NÃO FOR INICIALIZADO, FAZ Serial.println("DS3231 não encontrado"); //IMPRIME O TEXTO NO MONITOR SERIAL while(1); //SEMPRE ENTRE NO LOOP } if(rtc.lostPower()){ //SE RTC FOI LIGADO PELA PRIMEIRA VEZ / FICOU SEM ENERGIA / ESGOTOU A BATERIA, FAZ Serial.println("DS3231 OK!"); //IMPRIME O TEXTO NO MONITOR SERIAL //REMOVA O COMENTÁRIO DE UMA DAS LINHAS ABAIXO PARA INSERIR AS INFORMAÇÕES ATUALIZADAS EM SEU RTC //rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //CAPTURA A DATA E HORA EM QUE O SKETCH É COMPILADO //rtc.adjust(DateTime(2018, 9, 29, 15, 00, 45)); //(ANO), (MÊS), (DIA), (HORA), (MINUTOS), (SEGUNDOS) } delay(100); //INTERVALO DE 100 MILISSEGUNDOS } void loop () { DateTime now = rtc.now(); //CHAMADA DE FUNÇÃO Serial.print("Data: "); //IMPRIME O TEXTO NO MONITOR SERIAL Serial.print(now.day(), DEC); //IMPRIME NO MONITOR SERIAL O DIA Serial.print('/'); //IMPRIME O CARACTERE NO MONITOR SERIAL Serial.print(now.month(), DEC); //IMPRIME NO MONITOR SERIAL O MÊS Serial.print('/'); //IMPRIME O CARACTERE NO MONITOR SERIAL Serial.print(now.year(), DEC); //IMPRIME NO MONITOR SERIAL O ANO Serial.print(" / Dia: "); //IMPRIME O TEXTO NA SERIAL Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); //IMPRIME NO MONITOR SERIAL O DIA Serial.print(" / Horas: "); //IMPRIME O TEXTO NA SERIAL Serial.print(now.hour(), DEC); //IMPRIME NO MONITOR SERIAL A HORA Serial.print(':'); //IMPRIME O CARACTERE NO MONITOR SERIAL Serial.print(now.minute(), DEC); //IMPRIME NO MONITOR SERIAL OS MINUTOS Serial.print(':'); //IMPRIME O CARACTERE NO MONITOR SERIAL Serial.print(now.second(), DEC); //IMPRIME NO MONITOR SERIAL OS SEGUNDOS Serial.println(); //QUEBRA DE LINHA NA SERIAL delay(1000); //INTERVALO DE 1 SEGUNDO } |
– 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 Indutivo PNP de Proximidade LJ12A3-4-Z/BY
Parabéns pela simplicidade e clareza nas explicações e nos comentários do código. Ajudou muito! Os códigos postados sobre Arduíno + RTC por outros não mostram todos detalhes e o código não compila. Muito obrigado!
Obgd pela dicas ,será Muito útil
Sou novo em programação. Poderia me explicar porque essa matriz declarada no início, daysOfTheWeek[7][12] , tem 7 linhas e 12 colunas se são apenas 7 dias da semana no total?
E porque ela foi declarada como chat se o conteúdo é String e não um carácter único?
Olá, qual o procedimento para que o horário apareça como 20:00 e não 20:0 ?
Parabéns pela aula, foi de grande ajuda
Olá Marco Antonio.
Agradeço pelo comentário!
Você deve verificar as funções da biblioteca utilizada no código e fazer a correção.
Muito obrigado pela ajuda Euler. Não querendo abusar, como faço para ajustar o dia da semana? Forte abraço!
Mas devo ligalo em 5v ou 3.3v ouvi dizer que ele pode explodir a bateria se essa não for recarregável
Como eu poderia criar um alarme com esses comandos?
Olá Pedro.
Agradeço pelo comentário!
Recomendo que pesquise por projetos similares a este que pretende montar, desta forma, você conseguirá as informações que precisa.
Poxa Euler Valeu pelo compartilhamento de informações!
Perdi um tempão atrás de alguma explicação sobre como fazer o relógio continuar contando mesmo após desligamento do arduino, pois o método ajuste é sempre chamado quando o arduino reinicia, reiniciando também o relógio para o primeiro horário de quando foi compilado.
Ninguém menciona esse método lostPower!
Infelizmente documentação para as bibliotecas usadas no Arduino são horríveis!
Mas graças a Deus e a Internet existem pessoas como você que estão dispostas a ajudar.
Só pra deixar registrado, estou usando o módulo num ESP32. 😀
Abraço.
Olá Judenilson.
Agradeço pelo seu comentário e reconhecimento!
Vlw!!!
Obrigado por compartilhar o seu conhecimento, me ajudou muito.
Olá Lucas.
Por nada!