Real Time Clock DS3231 - Primeiros Passos


This tutorial is not available in English



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

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.

Modulo RTC DS3231
Módulo RTC DS3231
Fonte: lastminuteengineers

Circuito

Monte o circuito conforme a imagem abaixo:

Conexao do RTC DS3231 com a BlackBoard
Conexão do RTC DS3231 com a BlackBoard

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:

Descricao Breve da Imagem
Biblioteca Instalada

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.

Resultado monitor serial
Monitor Serial imprimindo a data, dia da semana, hora e temperatura.
Avatar