Real Time Clock DS1307 - 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 DS3231, confira o tutorial com este modelo.
Lista de Materiais
Lista completa de produtos
comprarBlackBoard UNO R3
Real Time Clock RTC DS1307
WorkPlate 400 - Preta
Protoboard 400 Pontos
Jumpers Macho-Macho x40 Unidades
Cabo USB AB 30cm
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)
Monte o circuito da imagem abaixo.
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 BibliotecaCaso não saiba como fazer esse processo, temos um tutorial para isso. Clique no botão abaixo.
Adicionando Bibliotecas na IDE ArduinoJá 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.