domingo, 2 de junho de 2013

Tiny RTC I2C Real Time Clock

Olá, neste artigo iremos falar um pouco sobre a utilização de um RTC - Real Time Clock com o arduino. Utilizaremos o módulo Tiny RTC I2C Real Time Clock, figura abaixo:

Esse módulo contém os componentes abaixo:

  • DS1307 - clock
  • EEPROM 24C32AN - memória
  • Bateria de lithium CR2032


Como ele tem uma bateria,  as configurações de data e hora serão mantidas mesmo que o módulo seja desligado. Para maiores informações sobre o módulo clique aqui.

Para a este artigo, utilizaremos a biblioteca RTCLib para trabalhar com o módulo que pode ser baixada aqui.

Abaixo uma tabela com a pinagem que deve ser seguida para ligar o módulo ao arduino.


Segue uma foto, ilustrando a ligação.



Segue um código exemplo para testar o módulo.

#include <Wire.h>
#include <RTClib.h>
//RTC - Real Time Clock
RTC_DS1307 RTC;
//Inicializacao dos modulos 
void setup () {
    //Inicialozacao da serial
    Serial.begin(9600);//Inicializacao da serial
    Wire.begin();//Inicializacao do protocolo wire
    RTC.begin();//Inicializacao do modulo RTC
  //Verifica se o modulo esta funcionando ou nao
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    //Ajusta a data/hora do Clock com a data/hora em que o codigo foi compilado, basta descomentar a linha
    //RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}
void loop () {
    DateTime now = RTC.now();//Recuperando a data e hora atual
    Serial.print(now.day(), DEC);//Imprimindo o dia
    Serial.print('/');
    Serial.print(now.month(), DEC);//Recuperando o mes
    Serial.print('/');
    Serial.print(now.year(), DEC);//Recuperando o ano
    Serial.print(' ');
    Serial.print(now.hour(), DEC);//Recuperando a hora
    Serial.print(':');
    Serial.print(now.minute(), DEC);//Reci[erando os minutos
    Serial.print(':');
    Serial.print(now.second(), DEC);//Recuperando os segundos
    Serial.println();
    delay(3000);//A leitura sera repetida a cada 3 segundos
}

O código acima deve gerar uma saída similar no console serial conforme abaixo.


Até a próxima.

7 comentários:

  1. Pois o meu não sai do canto. O tempo não passa, fica uma hora fixa...

    ResponderEliminar
  2. Fernando , Salve !!!!

    Tenho um kit (arduino uno + rtc) identico ao seu. Implementei seu codigo no meu arduino pra ter uma ideia de funcionamento. Mas ai descobri um pequeno problema: enquanto o arduino esta com alimentacao o timer ta correndo blz, mas qdo eu interrompo a alimentacao, o rtc armazena a data e hora em que parou e quando a alimentacao retorna ao inves do timer estar com a hora atualizada ele simplesmente continua da hora em que foi interrompida a alimentacao.

    Tem alguma ideia do que possa ser? Ja verifiquei as pinagens (ok), a bateria tambem, ja troquei ate de arduino (mega2560) e continua no mesmo.

    Isso é assim mesmo ?

    ResponderEliminar
    Respostas
    1. Olá! Você encontrou a solução para este problema? Eu estou passando pela mesma situação, a hora trava quando o arduino não esta alimentado, já tentei um monte de coisas, mas nada ainda.

      Eliminar
  3. q peça é essa q vc usou para ligar o jumpers no módulo?

    ResponderEliminar
  4. Caros, talvez seus problemas se resolvam com este outro código aqui:
    http://www.instructables.com/id/Arduino-Aquaponics-Real-Time-Clock-Part-I/step2/Arduino-Library-and-Sketch/

    ResponderEliminar
  5. Parabéns. Código enxuto que funcionou perfeitamente!

    ResponderEliminar