Módulo RTC Arduino




A maioria dos microcontroladores funcionam independente do tempo real, mas isso não é um problema, pois a maioria das coisas que desenvolvemos com microcontroladores não necessitam disto. Mas, o que fazer quando é necessário saber o tempo real? Por exemplo, como registrar eventos associados aos horários que eles aconteceram, ou até mesmo como criar um relógio. Para solucionar este problema o Módulo de Real Time Clock (RTC) foi desenvolvido.

Neste tutorial apresentaremos como utilizar o módulo RTC juntamente com o Arduino. Para esta comunicação serão neccessários os seguintes itens:
  • Arduino UNO R3
  • Módulo de Real Time Clock (RTC)
  • Jumper Premium M/F
Vamos começar entendendo como o módulo funciona. O DS1307 é um chip que funciona através do protocolo de comunicação I2C que retorna uma informação de 7 bytes. Sendo assim, ao receber a informação enviada pelo módulo é necessário tranformá-la para decimal. Como a informação enviada está no padrão BCD (Binary Code Decimal), vamos entender um pouco melhor como é este padrão.

O padrão BCD nada mais é do que uma codificação de cada dígito de um número em 4 dígitos binários. Vamos usar como exemplo o número 157:
  • Em BCD: 157 = 0001 0101 0111
  • Em Binário: 157 = 10011101
Agora que sabemos como receberemos a informação do módulo, precisamos de uma função (para facilitar durante a programação) que faça esta conversão de BCD para decimal quando recebermos informações do módulo e de decimal para BCD para quando enviarmos informações para o módulo. Estas funções já estão inclusas no código abaixo.

Assim como todos os relógios, este chip atrasa por conta de interferências externas como temperatura e campos magnéticos. Em seu manual, consta que o atraso pode chegar em 1 minuto por mês. Porém se este atraso for muito, existem módulos mais precisos como, por exemplo, o DS3234 que atrasa cerca de 1 minuto por ano.

Bem, no código abaixo é apresentado, de uma forma bem simplificada, uma maneira de se programar o horário real e exibi-lo no monitor serial. Como todas as vezes que abre-se o monitor serial o Arduino reseta, se mantivermos a mesma programação no Arduino o módulo RTC receberá o horário definido na função setDateTime(). Como solucionar este problema? Simples, basta acrescentar // na linha da função setDateTime(); dentro do void setup() para que ela fique comentada e seja ignorada pelo programa e programar novamente o Arduino.

Código: