Real Time Clock DS1307 - 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 DS3231, confira o tutorial com este modelo.

Lista de Materiais

Circuito

O módulo RTC DS1307 também possui espaço na parte superior para um sensor de temperatura, tornando possível 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, o pino SD que é responsável pelo sensor de temperatura, também o pino BAT que indica tensão da bateria e os pinos de comunicação SDA (slave data) e SCL (slave clock)

  Modulo RTC DS1307
Módulo RTC DS1307

Monte o circuito da imagem abaixo.

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

Programação

Para o código ser compilado, é necessário incluir a biblioteca RTClib e também a biblioteca Wire (esta já vem inclusa na IDE do Arduino).

Download da Biblioteca

Caso não saiba como fazer esse processo, temos um tutorial para isso. Clique no botão abaixo.

Adicionando Bibliotecas na IDE Arduino

Já com a biblioteca adicionada, copie e carregue o código.

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 DS1307, 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 o 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. Depois de ter definido o horário, tornar essa linha um comentário, senão o mesmo horário será armazenado toda vez que a placa for reiniciada.

Posteriormente, é 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).

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.

Monitor Serial imprimindo a data, dia da semana e hora
Monitor Serial imprimindo a data, dia da semana e hora
Avatar