CONTACT INFORMATION
Monday to Friday from 8:00 to 17:30
+55 11 3522-7626 / vendas@robocore.net
Back
to top

Módulo RTC Arduino

This tutorial is not available in English



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:


Para fazer comentários é necessário estar logado. Efetuar login.

Você ainda nao é cadastrado? Cadastre-se agora!


augusto1
date Enviado: 2019-06-15 19:28:52
estou utilizando o acelerometro MPU6050 em conjunto com o RTC 1307.
Ambos utilizam o endereço IC2 = 0x68 . 
como evitar o conflito?

Giovanni5
date Enviado: 2019-06-17 11:02:17
augusto1
Por se tratar de comunicação I2C, você pode realizar o endereçamento de cada sensor, por exemplo, utilizar o endereço 0x68 para o acelerômetro, e o endereço 0x69 para o módulo RTC.

Giovanni5
date Enviado: 2019-06-17 12:05:53
augusto1
Apenas adicionando ao procedimento, para utilizar o MPU6050 com outro sensor de comunicação I2C, você deve utilizar os conectores de conexão I2C, além de definir o endereço através do pino AD0. Para obter mais informações sobre esse procedimento, você pode utilizar o datasheet do módulo, disponível no link a seguir, https://s3-sa-east-1.amazonaws.com/robocore-lojavirtual/974/MPU-6000-Datasheet1.pdf .

pat.nozu
date Enviado: 2018-11-17 13:43:33
Boa tarde,

Teria o código para RTC DS1302?

Obrigada

Francois
date Enviado: 2018-11-19 11:06:56
pat.nozu
Infelizmente só há o exemplo para o DS1307, que usa a comunicação por I2C.

jschaves_service
date Enviado: 2018-05-18 13:25:46
boa tarde,sou chaveiro e me chegou um cofre eletronico que a tranca é gerenciada por um PIC16F628A e um RTC 1302nao sei nada de programaçao C preciso descobrir a senha que o cliente esqueceu,teria como eu fazer isso com o arduino uno?

hallszombie
date Enviado: 2018-05-18 13:45:06
jschaves_service
É praticamente impossível, isso porque não sabemos como o código do dispositivo funciona.

pedrozjunior
date Enviado: 2017-04-03 17:31:19
E se fosse para ativar um relé todas as quartas e quintas as 19:00, como faria?

Francois
date Enviado: 2017-04-03 18:45:00
pedrozjunior
Nesse caso você terá que usar um algoritmo que identifica se o dia retornado é uma quarta-feira ou uma quinta-feira, e executa a função desejada se for 19h.

pedrovinicius10
date Enviado: 2016-11-30 12:41:32
Bom dia!
Como seria pra definir uma data e hora para o arduino executar uma ação(acionar um relé as 15:00hs e desligar as 16:00 todos os dias do ano?

Grato.

Francois
date Enviado: 2016-11-30 13:07:02
pedrovinicius10
Você deve ler o horário no RTC e fazer o algoritmo em função disso, como por exemplo "se o horário lido é maior do que X horas e menor do que Y horas e o relé está desativado, então aciona o relé."