Real Time Clock DS3231 - Primeiros Passos
Introdução
RTC, ou real-time clock, é um relógio que mantém o controle do tempo real e possui calendário completo. Ele está presente em quase todos os dispositivos eletrônicos que precisam manter um controle preciso do tempo.
Embora o controle do tempo possa ser feito sem um RTC, o uso dele traz benefícios, tais como:
- Baixo consumo de energia (importante quando se está operando com baterias);
- Libera o sistema principal para tarefas mais críticas;
- É mais preciso do que outros métodos.
Este tutorial trará os conceitos básicos para que você possa configurar e fazer uso dessas funcionalidades através de seu Arduino e assim executar ações em horários predeterminados.
Caso você queira usar um RTC DS1307, confira o tutorial com este modelo.
Lista de Materiais
Lista completa de produtos
comprarBlackBoard UNO R3
Real Time Clock RTC DS3231 com Bateria
WorkPlate 400 - Preta
Protoboard 400 Pontos
Jumpers Macho-Macho x40 Unidades
Cabo USB AB 30cm
Hardware
O módulo RTC DS3231 também conta com um sensor de temperatura embutido, possibilitando montar um relógio completo com data, hora, dia da semana e temperatura, sem a necessidade de outros componentes.
Como podemos ver na imagem abaixo, o módulo RTC possui os pinos de alimentação VCC e GND, os pinos de comunicação SDA (slave data) e SCL (slave clock), o pino de interrupção SQW e o pino de saída do clock da placa 32K.
Circuito
Monte o circuito conforme a imagem abaixo:Biblioteca
Para o código ser compilado, é necessário instalar a biblioteca RTClib e incluir a biblioteca Wire (que já está presente na IDE do Arduino). Para instalar a biblioteca RTClib, basta acessar o gerenciador de bibliotecas no Arduino IDE (Ctrl+Shift+I), procurar por RTClib e clicar em instalar a biblioteca desenvolvida pela Adafruit. Após alguns instantes, a biblioteca estará instalada e pronta para ser usada com a placa, como mostrado na imagem abaixo:
Código
Já com a biblioteca instalada, copie e carregue o código a seguir para a placa:
Entendendo o Código
A biblioteca RTClib é usada para facilitar a integração com o módulo RTC e, como ela depende da comunicação I2C/TWI, também é necessário incluir a biblioteca Wire.
No início do programa, criamos um objeto a partir da classe do RTC que estamos usando, no caso o DS3231, e também o vetor diasDaSemana
para escrever o dia da semana como texto na porta serial.
Com o comando rtc.begin()
, iniciamos o RTC. Se a inicialização não for bem sucedida, uma mensagem é exibida no Monitor Serial e o programa fica travado nesse ponto. Logo após, temos um comando que está como comentário, rtc.adjust()
. Se por algum motivo seu RTC estiver sem bateria ou perdeu a contagem do tempo, altere a hora e a data e remova o comando dos comentários da sua programação para definir o horário no módulo. Após ter definido a data e o horário, comente novamente essa linha, senão a mesma data e horário será armazenado toda vez que a placa for reiniciada.
No laço de repetição loop()
, é feita uma leitura das informações contidas no RTC com o comando rtc.now()
. Essas informações são armazenadas na variável agora
como um objeto DateTime
, e enviadas para a porta serial uma a uma usando os métodos disponibilizados (por exemplo, agora.hour()
para obter as horas).
Ainda no laço de repetição, usamos a função getTemperature()
da biblioteca RTClib para obter a temperatura na escala Celsius e imprimi-la no monitor serial. Para terminar, inserimos uma pausa com o comando delay(1000)
para definir o intervalo de atualização das mensagens exibidas no Monitor Serial.
O Que Deve Acontecer
Ao abrir o Monitor Serial em 9600 bps, mensagens parecidas com as da imagem abaixo devem ser impressas na tela.