Relógio com o módulo RTC DS1307 313

Com o módulo RTC DS1307 você tem um componente muito útil para montar algum tipo de relógio com o Arduino, setar alarmes e assim executar ações em horários predeterminados. Neste post vamos apresentar um tutorial de como conectar este módulo RTC DS1307 com um Arduino Uno, mostrando as informações de data e hora no Serial Monitor da IDE Arduino.

 

Relógio Módulo RTC DS1307

A sigla RTC significa Real Time Clock, ou seja, um Relógio de Tempo Real (RTC). Esse módulo tem 56 bytes de memória não-volátil disponível para uso, é capaz de armazenar e fornecer informações completas de data como dia da semana, dia do mês, mês, ano e além é claro, das funções de horas, minutos e segundos, nos formatos de 12 ou 24 horas. Meses com menos de 31 dias e anos bissextos são ajustados automaticamente.

Uma bateria de lítio garante que os dados sejam preservados mesmo sem alimentação externa, e é acionada automaticamente em caso de falta de energia no módulo.

Uma outra característica desse módulo é que você pode utilizar um sensor de temperatura DS18B20 (não incluso), e ler as informações do sensor à partir do pino DS do módulo, o que faz com que seja possível montar um relógio completo com data, hora, dia da semana e temperatura, sem a necessidade de outros componentes.

CONECTANDO RTC DS1307 AO ARDUINO:

Neste post vamos mostrar um breve tutorial de como ligar esse módulo RTC DS1307 ao Arduino e exibir todas essas informações no serial monitor.

Olhando o módulo pela parte inferior, podemos ver na parte esquerda os pinos GND, Vcc, SDA e SCL, utilizados para cascatear dispositivos I2C, e também o pino DS, que fornece os dados do sensor de temperatura, se o mesmo estiver instalado. No lado direito, vamos utilizar apenas os pinos SCL, SDA, Vcc e GND para ligação ao Arduino.

Conecte o módulo RTC DS1307 ao Arduino, tomando cuidado para não inverter as ligações, pois como vimos acima existem pinos com o mesmo nome dos dois lados do módulo :

 

Montagem DS1307 Arduino

Antes de carregar o programa, baixe a biblioteca RTC DS1307 nesse link, descompacte o arquivo e copie o conteúdo para a pasta LIBRARIES da IDE do seu Arduino.

No programa, a parte do código que contém os comandos

rtc.setDOW(MONDAY);
rtc.setTime(16, 30, 47); 
rtc.setDate(5, 6, 2014);

só deve ser utilizada para setar a hora e data do RTC DS1307. Depois disso, essas linhas podem ser comentadas ou excluídas e o programa deve ser novamente carregado no Arduino.

//Programa : Relogio com modulo RTC DS1307
//Autor : MakerHero

//Carrega a biblioteca do RTC DS1307
#include <DS1307.h>

//Modulo RTC DS1307 ligado as portas A4 e A5 do Arduino 
DS1307 rtc(A4, A5);

void setup()
{
  //Aciona o relogio
  rtc.halt(false);
  
  //As linhas abaixo setam a data e hora do modulo
  //e podem ser comentada apos a primeira utilizacao
  rtc.setDOW(FRIDAY);      //Define o dia da semana
  rtc.setTime(20, 37, 0);     //Define o horario
  rtc.setDate(6, 6, 2014);   //Define o dia, mes e ano
  
  //Definicoes do pino SQW/Out
  rtc.setSQWRate(SQW_RATE_1);
  rtc.enableSQW(true);
  
  Serial.begin(9600);
}

void loop()
{
  //Mostra as informações no Serial Monitor
  Serial.print("Hora : ");
  Serial.print(rtc.getTimeStr());
  Serial.print(" ");
  Serial.print("Data : ");
  Serial.print(rtc.getDateStr(FORMAT_SHORT));
  Serial.print(" ");
  Serial.println(rtc.getDOWStr(FORMAT_SHORT));
  
  //Aguarda 1 segundo e repete o processo
  delay (1000);
}

Execute o programa, abra o Serial Monitor e você terá as informações do RTC DS1307 dessa maneira :

Serial Monitor DS1307 Arduino

Essa biblioteca pode mostrar as informações da data em formato completo bastando retirar as informações de FORMAT_SHORT (formato reduzido) do programa.

 Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

313 Comentários

  1. eu baixei a biblioteca e o código, mas quando eu vou verificar aparece esse problema:
    Arduino: 1.8.15 (Windows Store 1.8.49.0) (Windows 10), Placa:”Arduino Uno”

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp: In member function ‘void Adafruit_CircuitPlayground::playTone(uint16_t, uint16_t, bool)’:

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:238:3: error: ‘PLLFRQ’ was not declared in this scope

    PLLFRQ = (PLLFRQ & 0xCF) | 0x30; // Route PLL to async clk

    ^~~~~~

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:238:3: note: suggested alternative: ‘PCIFR’

    PLLFRQ = (PLLFRQ & 0xCF) | 0x30; // Route PLL to async clk

    ^~~~~~

    PCIFR

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:239:3: error: ‘TCCR4A’ was not declared in this scope

    TCCR4A = _BV(COM4A0) | _BV(PWM4A); // Clear on match, PWMA on

    ^~~~~~

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:239:3: note: suggested alternative: ‘TCCR0A’

    TCCR4A = _BV(COM4A0) | _BV(PWM4A); // Clear on match, PWMA on

    ^~~~~~

    TCCR0A

    In file included from c:\program files\windowsapps\arduinollc.arduinoide_1.8.49.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\io.h:99:0,

    from c:\program files\windowsapps\arduinollc.arduinoide_1.8.49.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\pgmspace.h:90,

    from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:28,

    from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground/utility/Adafruit_CPlay_LIS3DH.h:30,

    from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground/Adafruit_Circuit_Playground.h:21,

    from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:30:

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:239:16: error: ‘COM4A0’ was not declared in this scope

    TCCR4A = _BV(COM4A0) | _BV(PWM4A); // Clear on match, PWMA on

    ^

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:239:16: note: suggested alternative: ‘COM0A0’

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:239:30: error: ‘PWM4A’ was not declared in this scope

    TCCR4A = _BV(COM4A0) | _BV(PWM4A); // Clear on match, PWMA on

    ^

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:239:30: note: suggested alternative: ‘PWM’

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:240:3: error: ‘TCCR4B’ was not declared in this scope

    TCCR4B = _BV(PWM4X) | scalebits; // PWM invert

    ^~~~~~

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:240:3: note: suggested alternative: ‘TCCR0B’

    TCCR4B = _BV(PWM4X) | scalebits; // PWM invert

    ^~~~~~

    TCCR0B

    In file included from c:\program files\windowsapps\arduinollc.arduinoide_1.8.49.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\io.h:99:0,

    from c:\program files\windowsapps\arduinollc.arduinoide_1.8.49.0_x86__mdqgnx93n4wtt\hardware\tools\avr\avr\include\avr\pgmspace.h:90,

    from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:28,

    from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground/utility/Adafruit_CPlay_LIS3DH.h:30,

    from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground/Adafruit_Circuit_Playground.h:21,

    from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:30:

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:240:16: error: ‘PWM4X’ was not declared in this scope

    TCCR4B = _BV(PWM4X) | scalebits; // PWM invert

    ^

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:240:16: note: suggested alternative: ‘PWM’

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:241:3: error: ‘TCCR4D’ was not declared in this scope

    TCCR4D = 0; // Fast PWM mode

    ^~~~~~

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:241:3: note: suggested alternative: ‘TCCR0A’

    TCCR4D = 0; // Fast PWM mode

    ^~~~~~

    TCCR0A

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:242:3: error: ‘TCCR4E’ was not declared in this scope

    TCCR4E = 0; // Not enhanced mode

    ^~~~~~

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:242:3: note: suggested alternative: ‘TCCR0A’

    TCCR4E = 0; // Not enhanced mode

    ^~~~~~

    TCCR0A

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:243:3: error: ‘DT4’ was not declared in this scope

    DT4 = 0; // No dead time

    ^~~

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:243:3: note: suggested alternative: ‘DD4’

    DT4 = 0; // No dead time

    ^~~

    DD4

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:249:3: error: ‘TC4H’ was not declared in this scope

    TC4H = hi1;

    ^~~~

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:249:3: note: suggested alternative: ‘PC4’

    TC4H = hi1;

    ^~~~

    PC4

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:250:3: error: ‘OCR4C’ was not declared in this scope

    OCR4C = lo1; // TOP

    ^~~~~

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:250:3: note: suggested alternative: ‘OCR2A’

    OCR4C = lo1; // TOP

    ^~~~~

    OCR2A

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:252:3: error: ‘OCR4A’ was not declared in this scope

    OCR4A = lo2; // 50% duty

    ^~~~~

    C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.49.0_x86__mdqgnx93n4wtt\libraries\Adafruit_Circuit_Playground\Adafruit_CircuitPlayground.cpp:252:3: note: suggested alternative: ‘OCR2A’

    OCR4A = lo2; // 50% duty

    ^~~~~

    OCR2A

    exit status 1

    Erro compilando para a placa Arduino Uno

    Este relatório teria mais informações com
    “Mostrar a saida detalhada durante a compilação”
    opção pode ser ativada em “Arquivo -> Preferências”

    alguém poderia me ajudar?

    1. Olá André,

      Qual o código você está utilizando, é o do post?

      Testei aqui o código do post com a IDE 1.8.15, porém baixada do site da Arduino, não pela microsoft store, e também no windows 10.
      Compilou sem erros.

      Também achei estranho ele estar acusando erro na biblioteca Adafruit_CircuitPlayground, que não é utilizada no código.

      Abraços!
      Vinícius – Equipe MakerHero

  2. existe formas de eu usar esse shield para desligar lampadas todos os dias apos as 18:00 e ligar somente apos as 07:00 e sabado e domingo permanecer desligado?

    1. Olá Jairo,

      Sim, é possível fazer essa lógica, sem problemas.

      Temos este post aqui: https://www.makerhero.com/blog/controle-modulo-rele-arduino/
      que mostra o acionamento de lâmpadas com relé, você vai precisar de um módulo assim pois o Arduino não é capaz de lidar com a rede elétrica diretamente.

      Você usaria a data e hora para comandar o acionamento/desligamento dos relés.

      Abraços!
      Vinícius – Equipe MakerHero

  3. Boa noite, poderias me ajudar, sou novo na programação, preciso registrar a data e hora em um arquivo quando um relé é acionado através do arduino e o mesmo vai ligar um motor, tenho que montar uma planilha com essas informações, para saber por quanto tempo o motor fica ligado e desligado no mês. Podes por gentileza me ajudar. Obr. Abr.

    Alexssandro Pedro da Silva
  4. Olá, por que na linha 22 e 23 você define o SQW como saída se ele não está ligado a nenhum pino de acordo com o desenho? Isso pode causar alguma incompatibilidade ao longo do tempo com o RTC e o arduino? Tipo o DS1307 parar de enviar a hora e data ou simplesmente travar? Obrigado

  5. INVERTE A4 COM A5

  6. Muito bom exemplo. ALias um dos poucos onde os pinos de ligação ao arduino podem ser reconfigurados, saindo do padrão A4, A5. Agora vou tentar no NodeMCU. depois reporto

  7. caro colega como incluir outro modulo clock no diretorio ! o modelo PCF8563 ????

    1. Olá, Nei,

      Você pode dar uma olhada nesse link, tem algumas informações:
      https://arduinolearning.com/code/arduino-pcf8563-rtc-example.php

      Abraços!
      Diogo – Equipe MakerHero

  8. Bom dia, estou trabalhando com um projeto de sino automatico usando o módulo RTC DS1307, ele está com um problema…
    Tem momento que ele avança um segundo e durante o dia torna-se em torno de 15 segundo no dia.. Sendo assim durante um mês ele adianta minutos… O que devo fazer? Já troquei o módulo e não resolve?

    1. Olá, Thiago

      Experimente buscar soluções pelo código para ver como ajeitar esse comportamento. Abra um tópico lá no nosso fórum para o pessoal te dar uma mão qualquer coisa 😉

      Abraços!
      Diogo – Equipe MakerHero

      1. Mas porque acontece isso, tenho que resolver esse erro….

  9. Boa noite! Comprei alguns componentes do site, entre eles um data logger shield e um sensor de luminosidade bh1750fvi. Estou com um problema pois o programa não funciona. Acredito que possa ser por causa do uso da interface i2c que ambos possuem. Você consegue me dar uma solução?

    Muito obrigado.

    1. Olá, Jonatam!

      Aconselho você a levar seu questionamento para o nosso fórum, lá a galera pode te dar uma força!

      Abraços!
      Diogo – Equipe MakerHero

  10. da pra eu programar um horario pra ligar e desligar uma lampada por exemplo

    1. Olá Vinícius,

      É possível fazer isso sim.

      Abraço!
      Rosana – Equipe MakerHero

      1. como eu faria esse código?

        1. Olá,

          Você precisa comparar o horário atual com o horário que deseja ligar e desligar a lâmpada e enviar um sinal para o relé.

          Abraço!
          Rosana – Equipe MakerHero

          1. n consegui

            vinicius movick
          2. já fui no fórum e me mandaram de volta para cá, como eu faria o codigo de comparação?

  11. Olá, é possível com esse módulo marcar assim:

    dias : horas : minutos : segundos
    Para poser marcar quanto tempinho Arduino está ligado.

    1. Olá Márcio,

      É possível sim 😀

      Abraço!
      Rosana – Equipe MakerHero

  12. Gostaria de saber se tem como exibir em um Display Nokia 5110 o tempo desde que eu liguei o Arduino.
    No meu projeto eu vou manter um Arduino Uno ligado por um mês direto e junto com ele um sensor e um display Nokia 5110.
    E gostaria de exibir no display quanto tempo faz que o Arduino está ligado.
    Exemplo: dias:horas: minutos : segundos :
    Mais ou menos isso.
    Imagino que teria Que usar um módulo RTC de tempo.

    1. Olá Marcio,

      Para usar o display Nokia 5110 dê uma olhadinha nesse tutorial: https://www.makerhero.com/blog/medidor-de-corrente-sct013-com-arduino/
      Para saber o tempo que seu Arduino está ligado será necessário um RTC. Você irá precisa armazenar de alguma forma o valor o primeiro valor de tempo. Depois precisa comparar esse valor com o valor de tempo atual.

      Abraço!
      Rosana – Equipe MakerHero

  13. Boa tarde pessoal. Pergunta: porque cargas d´água vem junto a EEPROM 24C32 neste módulo???

    1. Olá Xavier,

      A EEPROM pode ser usad como RAM extendida do microcontrolador.

      Abraço!
      Rosana – Equipe MakerHero

  14. Boa tarde;

    Bom tutorial.

    Com esta “Library” (Biblioteca) também é possível definir a Data e Hora no Momento em que o Projecto é Adicionado ao Arduino?
    Não estou a conseguir definir.

    Apenas uma observação para quem é novo: Caso tenham Valores Random; desliguem o Pin de 5v deixem apenas o de 3.3v (e o Ground).

    1. Olá Ricardo!

      É sim!

      Nesta seção do código é feito esse ajuste:

      //As linhas abaixo setam a data e hora do modulo
      //e podem ser comentada apos a primeira utilizacao
      rtc.setDOW(FRIDAY); //Define o dia da semana
      rtc.setTime(20, 37, 0); //Define o horario
      rtc.setDate(6, 6, 2014); //Define o dia, mes e ano

      Abraços!

      André – Equipe MakerHero

  15. quero comparar a hora para fazer um if. exemplo if ‘hora’ = 20 { …..

    1. Olá Ronaldo!

      Você terá que trabalhar com comparação de strings. Sugiro usar a função equals(). https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/equals/

      Depois deixa seu código aqui pro pessoal ver como faz 🙂

      Abraços!

      André – Equipe MakerHero

  16. Boa noite.
    Queria saber se existe um comando que me retorna a data em segundos desde o início do relógio (no caso 01/01/1970).
    Preciso de um contador referencial que esteja ligado ao calendário do relógio.
    Abraço.

    1. Descobri um jeito.
      Recomendo utilizar a biblioteca RTClib.h (https://github.com/adafruit/RTClib) por ser bem mais completa.
      Segue link da explicação completa em inglês (https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/overview)

    2. Olá Daniel!

      Bom que você resolveu!

      Abraços!

      André – Equipe MakerHero

  17. Verifiquei as soldas dos pinos e estavam com mal contato pra mim resolveu vlw. MakerHero

  18. Como sincronizar com o relogio do pc?

    1. Olá Wagner!

      Você poderia ajustar a hora a partir de algum local na internet sempre que ligasse. Ele por si só não tem condições de saber que horas são.

      Abraços!

      André Rocha – Equipe MakerHero

  19. Bom dia

    Tenho uma duvida: se eu tirar a alimentação do Arduíno quando ele estiver marcando 10:00 e retornar a alimentar 5 minutos depois, 10:05, no monitor serial ele deve marcar 10:00 ou 10:05?

    Sempre que eu retiro a alimentação eu volta da data e hora que eu ajustei na programação. E ele esta com bateria nova, tudo ok. O comportamento dele é assim mesmo?

    obrigado

    1. Olá Ramon!

      Quando você tira a bateria e liga de novo o Arduino, no seu programa está para ajustar a hora. Então cada vez que você dá reset, ele reajusta a hora.

      Você pode colocar para ajustar apenas se receber um comando ou alguém apertar um botão, aí não vai reajustar cada vez que ligar.

      Abraços!

      André – Equipe MakerHero

  20. ola vcs podiam fazer um tutorial com o ds 1302 pelo fato de ser bem mais barato e tbm ter as mesmas finalidades de data e hora. obrigado

    1. Olá Davidson!

      Vou deixar essa sugestão aqui pro pessoal.

      André – Equipe MakerHero

  21. ds1307 rtc( a4 ,a5) ;

    1. o que seria isso ?

      1. Olá Henrique!

        Liga o Modulo RTC DS1307 às portas A4 e A5 do Arduino.

        Abraços!

        André – Equipe MakerHero

  22. Adicionem a seguinte linha no setup()

    rtc.begin();

  23. desta forma da certo mas tentei usar com display lcd e acredito que a biblioteca dele da conflito com a do relogio pois aparece umas informaçoes que nao tem nada a ver

  24. Preciso ligar um solenóide a cada hora durante 10 segundos
    Usei If == 0 minutos, para ligar de hora em hora e delay(10000)
    Só que aparece um loop e o solenóide liga várias vezes até o minuto se igualar a 1
    Preciso acionar o solenóide uma única vez
    Como faço? Desde já obrigado.

  25. Como faço pra inserir um lcd com i2c, nesse esquema acima?

    Weslei Gregorio Rodrigues da Silva
  26. Boa noite! Estou com um projetinho aqui, que é o seguinte, por exemplo: Ás 8h da manhã, eu quero que uma placa que é sustentada por um servo, esteja na posição 20 graus, as 9h na posição 30 graus, tudo isso usando o RTC, como posso fazer??? Obrigado!

  27. boas 5 estrelas ajudou muito,
    tinha só uma pergunta se me poderes aturar.
    como ligo um led aos 4 segundos e desligo ao 39?

  28. Olá Adilson e Arduineiros!
    Tenho um código para um relógio e, no cabeçalho, entre outros, tem o #include mas, na compilação é mostrado esse erro: ‘class DS3231’ has no member named ‘getTime’; Estou usando a versão do Arduino 1.6.9 e já testei várias bibliotecas DS3231 mas, sempre mostrando o mesmo erro, portanto, gostaria de uma ajuda, por favor; Obrigado

  29. Filipe, estou tendo problema na biblioteca que você carregou. O soft não reconheceu na hora de carregar.

  30. òtimo site.
    Gostaria de saber se é possível fazer um registrador (de tempo e data) sem a necessidade de um módulo, visto que,o Arduino ira ficar conectado(pelo USB) direto no PC ?
    E tenho uma chave analógica que varia de 0 a 1023 bytes, e preciso registrar o tempo e a data quando ela atingir 700 bytes. Seria possível?

  31. Olá meu nome é Felipe, eu sou cliente da MakerHero e gostaria de saber se alguem pode me ajudar. Eu já tinha utilizado o DS1307 e percebi que ele atrasa cerca de 2 segundos por dia ( o que é muito para o que eu quero fazer ) então comprei o DS3231 com a esperança de que ele fosse mais preciso, no entanto , ele teve o mesmo comportamento, gostaria de saber se vocês podem me dar alguma ajuda com relação a esse problema de atraso.

    Desde já obrigado pela atenção.

    1. Jovem, sugiro você adquirir algum módulo Ethernet ou equivalente ou usar ESP no lugar do arduino e utilizar e fazer uma rotina de consulta a um servidor NTP.

  32. Pessoal, realizei um datalogger com ethernet shiled + rtc ds1307 e esse site me ajudou muito na parte de configurar o rtc. Tive alguns problemas que já foram citados por outros: Atraso no horário depois de alguns dias e algumas vezes registrava uma data e hora louca que não correspondia a realidade. Com relação ao atraso, acredito que é limitação do RTC mesmo, pois teve pessoas aqui que tentaram de diversas formas e não conseguiram solucionar de forma simples. Agora com relação a ele registrar data e horários sem sentido, eu conseguir resolver simplesmente trocando a bateria. Estava usando uma de marca sem procedência (PKCELL), e depois que troquei por uma Maxell, meu projeto parou de dar esse problema. Fica a dica, abraços!

    1. Bom dia felipe ! Baseado na sua informação é possivel entender que o problema pode não ser nos módulos RTC visto que ocorre o mesmo problema em ambos. Na hipótese de nao ser encontrado uma solução o que poderia ser feito é inicialmente descobrir quantos segundos ‘exatamente’ ele atrasa por dia e criar uma rotina no codigo que de tempo em tempo ele ajuste a hora em milésimos de segundos tantas vezes quanto forem necessárias para suprir os 2 segundos diários, por exemplo: Se fossem exatamente 2 segundos por dia, a cada 24 horas ele ajustaria em 2 segundos a hora atual OU a cada 12 horas ele ajustaria a data em 1 segundo OU a cada 6 horas ele ajustaria a data em meio segundo…….

  33. Saudações!

    Estou usando o módulo RTS1307 sem a bateria (em teste) num modulo Ethernet Shield W5100 acoplado no Arduino Uno, e quando uso o exemplo, o tempo fica assim:

    Hora : 20:37:00 Data : 06.06.14 Friday
    Hora : 00:00:00 Data : 01.01.00 Monday
    Hora : 00:00:00 Data : 01.01.00 Monday
    Hora : 00:00:00 Data : 01.01.00 Monday
    Hora : 00:00:00 Data : 01.01.00 Monday
    Hora : 00:00:00 Data : 01.01.00 Monday
    Hora : 00:00:00 Data : 01.01.00 Monday
    Hora : 00:00:00 Data : 01.01.00 Monday

    Estou utilizando 5 Volts como mostrado no esquema!

    O que será que está errado?

    Será que é porque estou usando o modulo Ethernet W5100?

    Me socorra por favor !!! rs

    Abs,
    Claudio Camara

    1. O meu aconteceu isso com o Mega, era a pinagem errada..

    2. Acho que vc já deve ter resolvido.
      Tive o mesmo problema.
      Usa sem bateria , faz um teste ai vc garante que o seu modulo 1307 está funcionando.
      E depois compra uma bateria melhor.

      Abraço

    3. Olá Cláudio, tive praticamente vários problemas como os aqui citados e resolvi quando liguei a 3,3V na alimentação ao invés do 5V, ok? Espero que ajude. Att. Sandro

  34. Gostaria de controlar uma gpio por exemplo:
    se a hora >= 6:00;
    ligar gipio 7;

    como posso fazer isso ?

  35. Olá!
    Notei que para printar o horário (hora, minutos e segundos) basta o “Serial.print(rtc.getTimeStr());”. Estou trabalhando em um projeto e preciso posicionar um servo em função da hora. Minutos e segundos não seriam interessantes para mim. Tem como eu ler e printar apenas a hora? Ou pelo menos ignorar essas informações?
    Obrigado!

    1. Time t=rtc.getTime();
      int hora = (int)t.hour;
      (n tenho ctz e-e , mas é algo desse tipo)

      Alexandre Martins Tucunduva Filho
  36. colocou o resistor em que parte amigo?

    1. Na porta SCL

  37. como faço para usar o rtc q é 5v e o bmp 180 q é 3,3v juntos?

    1. Qual é o conjunto que você está usando ?

  38. Boa tarde,
    Consegui fazer o RTC funcionar perfeitamente, a única questão é que depois do dia da semana está exibindo uma sugeira, dois caracteres do LCD ficam com pontos indefinidos, alguém teve esse problema?

    1. Bom dia!

      Estou com uma dúvida amigo.
      Além do módulo eu tenho que utilizar um resistor?vi que você já conseguiu e gostaria que me ajudasse nessa questão.
      Vou deixar meu zap ok?

      Grato!

      1. 93 981162453

    2. Faz o seguinte em coloca um temporizador usando a função millis().

      Esse temporizador executa uma unica vez a função lcd.clear();

      Mas se preferir vc tambem pode fazer assim:

      Antes de escrever no lcd limpe a linha usando espaço em branco assim.

      lcd.setCursor(0,0);
      lcd.print(” “); // 16 espaços em branco
      lcd.setCursor(0,0);
      lcd.print(” Seu texto “);

  39. Na descrição desse módulo, diz que a bateria de lítio garante que os dados sejam preservados mesmo sem alimentação externa. Queria saber se ele continua contando o tempo, mesmo sem alimentação ou se apenas grava a última informação.
    Tenho ele no meu programa, mas quando eu tiro a alimentação ele não conta o tempo em que ficou desligado, voltando para o mesmo horário do último processamento (não o horário ajustado). Queria saber se é um problema de configuração, problema no meu módulo, ou se é uma característica mesmo.

    1. Boa tarde Cristiano,

      Pode ser apenas um problema de bateria. Verifique a carga, por favor.

      Abraço!

      Adilson – Equipe MakerHero

    2. Olá Cristiano. Estava com um problema semelhante, bastava desligar e religar a placa, que retornava o último horário do setup feito, ou então, bastava que eu aplicasse o reset do Arduíno que retornava o horário anterior.
      O que acontecia, no meu caso :
      A linha que fazia o setup da hora, depois de utilizada, eu a comentei com duas barras no scketch, entretanto ela ainda estava na memória não volátil do Arduíno, desta forma percebi que era necessário fazer o upload para o Arduino, do scketch com a linha comentada, e assim ele não mais a realizaria.
      Desta forma, no meu caso. o que acontecia era simples: Toda vez que eu desligava e religava o Arduino, ele corretamente realizava a rotina de inicialização do bootloader, e lá ainda estava a linha de set-up do relógio.
      Feito isto o relógio ficou funcionando normalmente, sem atrasos, ou qualquer outro contratempo.
      Estou muito satisfeito com o produto.
      Espero que esta mensagem possa ajudar alguns, que sem querer fizeram o mesmo procedimento.

      Abraço a todos.

      1. olá, gostaria de saber como fizeste para que o RTC não viesse a ser ”descalibrado” em relação ao horário, mesmo que desligado

  40. Olá! Alguém sabe dizer como solucionar o problema do DS1307 adiantando, o meu ta cerca de 20 segundos por dia

    1. Isso é muito provável devido ao cristal utilizado de 32kHz. Deverá utilizar o recomendado pelo fabricante o DS32kHZ .

  41. Olá, tenho um arduino ligado a um RTC e ao um relé, gostaria de fazer que uma lampada fica-se ligada das 06:0 as 18:00, e desligada das 18:01 as 05:59 como faria isso ?

    1. Como você está fazendo?
      Põe suas dúvidas aqui para vermos o que está fazendo de errado.
      😉

  42. Bom dia, estou com problemas na hora de compilar o módulo, da a seguinte mensagem de erro

    Arduino: 1.6.9 (Windows 7), Placa:”Arduino/Genuino Uno”

    In file included from C:UsersuserDocumentsMestradoProjetoArduinoSketchbookPrincipal_Abas3Principal_Abas3.ino:53:0:

    C:Program Files (x86)ArduinolibrariesDS1307-master/DS1307.h:54:1: error: expected initializer before ‘class’

    class Time

    ^

    C:Program Files (x86)ArduinolibrariesDS1307-master/DS1307.h:80:2: error: ‘Time’ does not name a type

    Time getTime();

    ^

    exit status 1
    Erro compilando para a placa Arduino/Genuino Uno

    Pelo que olhei no código dessa biblioteca, isso tudo é dentro dela e não sei o que fazer.
    Alguem pode me ajudar.

  43. Para hora eu utilizo os comandos abaixo:
    #include DS3231.h
    #include Wire.h
    DS3231 Clock;

    Porém eu sou obrigado a utilizar as portas A4 e A5 conectadas no SDA e SCL.
    Como faço para mudar isso e utilizar as portas A1 e A2 para conectar no SDA e SCL?

    1. Não fiz nenhum teste ainda a esse respeito.

      Uma das coisas que andei lendo sobre i2c é que ele chama um endereço e somente o componente com aquele endereço que responde. Assim vc pode colocar componentes i2c na mesma porta que a comunicação nao vai ser afetada ( a menos que eles tenham o mesmo endereço ).

  44. Para hora eu utilizo os comandos abaixo:
    #include
    #include
    DS3231 Clock;

    Porém eu sou obrigado a utilizar as portas A4 e A5 conectadas no SDA e SCL.
    Como faço para mudar isso e utilizar as portas A1 e A2 para conectar no SDA e SCL?

    1. Bom, acredito que vai depender da biblioteca que você está utilizando. Se você utilizar a mesma biblioteca deste tutorial, você poderá escolher as portas no comando abaixo:

      //Carrega a biblioteca do RTC DS1307
      #include

      //Modulo RTC DS1307 ligado as portas A4 e A5 do Arduino
      DS1307 rtc(A4, A5); //aqui você colocaria A1,A2

      1. Gabrielle, em primeiro lugar obrigado pela resposta.
        Acontece que eu já utilizo outra rotina e ficaria difícil para eu mudar tudo.
        Eu utilizo os comandos abaixo e não vi nenhum lugar onde eu possa mudar de A4 e A5 para A2 e A3
        #include DS3231.h
        #include Wire.h
        DS3231 Clock;

      2. Neste caso, se você está utilizando o Arduino Uno seriam estas portas mesmo então, A4 e A5. No Arduino Mega seriam as portas 20 e 21, pois isso se baseia no protocolo 12C que é implementado pela biblioteca Wire.h.
        Estou desenvolvendo um projeto que utiliza o módulo RTC e uma bússola magnética que também utiliza as portas SDA e SCL. Estou utilizando o Arduino Mega e os pinos 20 e 21 para o RTC e os dois pinos acima do 13, GND, AREF – que são dois pinos que não tem nada escrito – para a bússola.

  45. Boa tarde, por muita gentileza como eu faço pra conseguir a temperatura utilizando o mesmo módulo relógio com o DS18B20 acoplado ao mesmo, alguém poderia me ajudar, desde já agradeço.

  46. na verdade a biblioteca está dando erro até no arduino na hora de compilar.

  47. estou com dificuldades em compilar a biblioteca DS1307.h no ATTINY13A. ALGUEM PODE ME AJUDAR?

  48. Olá, eu consigo usar esse módulo rtc e o módulo i2c no mesmo projeto alterando as bibliotecas?
    Obrigado

    1. Boa tarde Matheus,

      Talvez você não precise nem alterar as bibliotecas, já que você pode ligar os dois dispositivos I2C no mesmo barramento.

      Abraço!

      Adilson – Equipe MakerHero

      1. boa noite Adilson
        queria saber ser
        vc poderia me ajudar com uma programação que tenho aqui para o meu tcc ?
        obrigado pela a compreensão

  49. Como eu faço para ajustar a data e hora atraves de botoes?

    1. Ola Rafael, estou com a mesma duvida, voce conseguiu solução ?

      1. Ola, Jonatan, ainda não. Eu dei uma pausa no projeto. Mas ate hj ninguém me respondeu. Caso encontre por favor compartilhe comigo.

        1. Pois então irmão, ja fiz muita pesquisa e nada de encontrar solução. É muito ruim setar data e hora somente através do código fonte. Mas se eu desenvolver algo compartilho com você sim.

    2. Eu tenho um código que fiz faz uns anos que faz isso. Só que utiliza outro micro (pic16f628) e utiliza outra linguagem (picbasic). Posso disponibilizar.

    3. Eu fiz de jeito que da pra atualizar a hora pela serial sem ter que carregar novamente o codigo.

      Colocar botões para atualizar a hora é mais fácil que parece mas é muito difícil de explicar aqui pelos comentários. Já pensei em fazer um video explicando e colocar no youtube.

  50. Olá,

    Em vez de usar o sensor de temperatura DS18B20 eu posso usar o lm35?
    E como é código para obter a data, hora e temperatura juntas?

    Obrigado por mais esse tutorial!
    Seus tutoriais têm me ajudado muito no meu projeto!

    1. Boa tarde Álvaro,

      A placa já vem projetada para você usar o DS18B20. Você pode encontrar exemplos de projeto com esses componentes nesse link: https://www.openimpulse.com/blog/wp-content/uploads/wpsc/downloadables/Example-Code-for-the-DS1307_DS18B20_AT24CXX-Module.zip

      Abraço!

      Adilson – Equipe MakerHero

  51. Mesmo após inverter o SCL e o SDA o meu resultado continua como abaixo. Os minutos que são crescentes e os segundos estão doidos. a data não sai de 19/01. O código está igual ao do tutorial, eu mudei apenas a pinagem para A2 e A3, mas mesmo na pinagem A4 e A5 não resolve o problema.

    Hora : 24:14:51 Data : 01.19.01 1.19.01
    Hora : 24:15:85 Data : 01.19.01 1.19.01
    Hora : 24:16:59 Data : 01.19.01 1.19.01
    Hora : 24:17:51 Data : 01.19.01 1.19.01
    Hora : 24:18:51 Data : 01.19.01 1.19.01
    Hora : 24:19:51 Data : 01.19.01 1.19.01
    Hora : 24:20:51 Data : 01.19.01 1.19.01
    Hora : 24:21:51 Data : 01.19.01 1.19.01
    Hora : 24:22:85 Data : 01.19.01 1.19.01
    Hora : 24:23:83 Data : 01.19.01 1.19.01
    Hora : 24:24:51 Data : 01.19.01 1.19.01
    Hora : 24:25:51 Data : 01.19.01 1.19.01
    Hora : 24:26:85 Data : 01.19.01 1.19.01
    Hora : 24:27:51 Data : 01.19.01 1.19.01
    Hora : 24:28:59 Data : 01.19.01 1.19.01
    Hora : 24:29:83 Data : 01.19.01 1.19.01
    Hora : 24:30:51 Data : 01.19.01 1.19.01
    Hora : 24:31:51 Data : 01.19.01 1.19.01
    Hora : 24:32:83 Data : 01.19.01 1.19.01
    Hora : 24:33:59 Data : 01.19.01 1.19.01

    1. Bom dia Gabrielle,

      Tentou colocar um resistor de 200 ohms, como o outro usuário postou aqui na área de comentários ?

      Abraço.

      Adilson – Equipe MakerHero

      1. Oi Adilson,
        Eu não tinha testado com o resistor não, mas mesmo com ele o resultado não está vindo com o horário certo. Agora está assim:

        Hora : 00:00:85 Data : 00.00.00 0.00.00
        Hora : 00:00:85 Data : 00.00.00 0.00.00
        Hora : 00:00:85 Data : 00.00.00 0.00.00
        Hora : 00:00:85 Data : 00.00.00 0.00.00
        Hora : 00:00:85 Data : 00.00.00 0.00.00
        Hora : 00:00:85 Data : 00.00.00 0.00.00
        Hora : 00:00:85 Data : 00.00.00 0.00.00

        Obrigada pela resposta.

        1. Boa tarde Gabrielle,

          Entendi. Bom, peço que você reveja o circuito e se necessário refaça a solda dos conectores, para ter certeza que não é nenhum problema de conexão. Caso o problema persista, peço que entre em contato pelo email [email protected] para orientação sobre o procedimento de troca.

          Abraço!

          Adilson – Equipe MakerHero

          1. Certo… vou tentar aqui.
            Agradeço demais pelo help!
            😀

        2. Olá Gabriella,

          Estou com o mesmo problema que você, já verifiquei meu circuito e está exatamente igual ao exemplo. Você conseguiu resolver esse problema?

      2. Ola, eu gostaria de mais detalhes sobre o resistor de 200 Ohms , em qual posição/ pinos ele deve ser conectado exatamente ?

    2. Boa, pode ser os jumpers, troque os cabos e tente novamente.

  52. Consegui utilizar tranquilo com a serial, mas não sai quando tento printa-lo para lcd. Alguém já fez isso ?

    1. Coloca no lcd é bem tranquilo.

      vc faz assim para printar na serial:

      Serial.print(“Hora : “);
      Serial.print(rtc.getTimeStr());

      no lcd depois de configurar ele como já é de costume vc faz assim.
      lcd.setCursor(0,0);
      lcd.print(“hora:”);
      lcd.setCursor(0,1);
      lcd.print(rtc.getTimeStr());

      antes é bom testar com o seu lcd com o exemplo que do arduino. Hello Word.

    2. Opa lembrei de bug que foi muito chato de descobrir.

      acredite quem quiser, primeiro deixo claro que fiz o teste umas 5 vezes para acreditar tambem .

      de uma hora para outra meu lcd deu ruim. mexi em tudo e num teste eu comentei a linha do : Serial.begin(9600); ai ele funcionou . eu retirei o comentario e bug voltou.

      coloquei a declaração do lcd antes do Serial e ai deu tudo certo.

      lcd.begin(16,2);
      Serial.begin(9600);

      eu consegui atualizar o RTC pela serial e quero mostrar depois como fiz isso. Mas tenho que bolar um exemplo pois não posso mostrar a programação original por etica .

      Estou fazendo alguns projetinho muito legais para onde eu trabalho. Essa semana comprei mais 12 arduino mega aqui no MakerHero.

  53. Deveria ser disponibilizada uma biblioteca para uso da EEProm da plaquinha, tive que peregrinar um pouco até encontrar uma simples de usar.

  54. Tem como eu utilizar o Arduíno uno com RTC e o mega para executar esse sketch?

    LEONARDO DE FREITAS GABARDON
  55. Como eu declaro o pino no Mega?

  56. Usei o código fornecido aqui na página e não importa que data ou horário eu setar ele sempre me escreve:

    Hora : 27:85:85 Data : 85.85.2165 5.85.2165
    Hora : 27:85:85 Data : 85.85.2165 5.85.2165
    Hora : 27:85:85 Data : 85.85.2165 5.85.2165

    Onde o “5.85.2165” estranhamente é o que a função “rtc.getDOWStr()” retorna.
    Também não há evolução no tempo, ele fica parado nessa dara maluca do futuro para sempre.
    O que pode estar acontecendo?

    1. Lucas,

      Estou com o mesmo problema, você conseguiu solucioná-lo?

    2. Provavelmente você trocou os pinos de SDA e SCL

      Experimente inverter. Eu tive esse problema e resolvi verificando a pinagem

      1. Sim, este problema acontece quando se inverte o SDA pelo SCL.

        Você pode só inverter as porta no próprio código, na linha 8.

    3. No meu caso foi falta de energia. O ground não estava passando corrente

      Alexandre Machado de Siqueira
  57. Uma forma legal de acertar o relógio é usando a Serial.

    Na aplicação que eu uso o RTC eu criei um programa que que puxa os dados do arduino pela serial e grava em Excel. Nesse programa eu mandei uma String para o arduino com a hora atual do sistema, depois tratei a informação preenchendo os campos de arrumar data hora , minuto , segundo , dia , mes , ano e dia da semana.

    Resumindo agora quando acontece algum problema e tenho que atualizar a hora, tipo agora a pouco na virada do horario de verão, tudo que tive que fazer foi conectar na serial e apertar um botão para atualizar.

    1. Você pode mostrar o codigo que faz essa atualização via serial?

      1. Vou ver se eu gero um programa depois para disponibilizar. Eu com muito trabalho para fazer agora.

  58. Olá. Estou com uma dúvida em relação à bateria do ds1307. Ela serve APENAS para manter os dados caso o arduino ao qual o RTC está conectado seja desligado? Ou o RTC não deveria continuar contando o tempo mesmo com o arduino desligado? O que eu percebi foi que ao desligar o arduino, a contagem do tempo pára, continuando no mesmo horário (e não na hora atual) ao realimentar o arduino. Está certo isso? Ou é defeito do RTC?
    Obrigado

    1. Bom dia Leandro,

      A bateria serve para manter a contagem do tempo mesmo sem alimentação do módulo. Pelo que você descreve, pode ser algum defeito no RTC, mas verifique também o programa, talvez ele esteja redefinindo a hora à cada inicialização do Arduino.

      Abraço.

      Adilson – Equipe MakerHero

      1. Olá. Não é problema no código. E eu me expressei mal na mensagem anterior. Ao realimentar o circuito, o RTC não continua a contagem do tempo em um valor fixo. Ele continua a partir da hora em que o circuito foi desligado. Por exemplo: se eu desligar o circuito às 9h17 e religar 23 minutos depois, ele continua a contagem do tempo em 9h17 (e não 9h40).

        1. Tenho tido o mesmo problema. Como solucionou?

          1. Olá Henrique!

            Pelo que você descreve, pode ser algum defeito no RTC, mas verifique também o programa, talvez ele esteja redefinindo a hora à cada inicialização do Arduino.

            Abraços!

            André – Equipe MakerHero

  59. Tenho me deparado com um erro. O rtc volta sozinho para a 12:35.

    Alguem ja passou por isso?

    1. Você tem que upar o código uma vez com as linhas de código que setam a hora do rtc, depois upar de novo o código sem essas linhas. Se não upar a segunda vez, sem essas linhas, toda vez que o arduino reiniciar ele vai rodas essas linhas (e não vai ter IDE para passar a hora correta).

      1. Isso eu ja faço. E por esse motivo que eu consigo sincronizar bem o rtc com o relogio, eu mando a programação com 1 minuto adiantado e quando o tempo sincronizar com o meu relogio ai eu reseto a placa do arduino e jogo a programação com as linhas comentadas. Fiz isso em 14 projetos sem problemas e em dois projetos depois de uns 2 minutos a hora volta pra 12:35. Vale lembrar que a hora colocada na programação é quase sempre depois das 15 horas.

  60. Porque na hora de copilar dá esse erro?

    Modulo_RTC_e_LCD.ino: In function ‘void SelecionaDataeHora()’:
    Modulo_RTC_e_LCD.ino:38:8: error: ‘class TwoWire’ has no member named ‘write’
    Modulo_RTC_e_LCD.ino:42:8: error: ‘class TwoWire’ has no member named ‘write’
    Modulo_RTC_e_LCD.ino:43:8: error: ‘class TwoWire’ has no member named ‘write’
    Modulo_RTC_e_LCD.ino:44:8: error: ‘class TwoWire’ has no member named ‘write’
    Modulo_RTC_e_LCD.ino:45:8: error: ‘class TwoWire’ has no member named ‘write’
    Modulo_RTC_e_LCD.ino:46:8: error: ‘class TwoWire’ has no member named ‘write’
    Modulo_RTC_e_LCD.ino:47:8: error: ‘class TwoWire’ has no member named ‘write’
    Modulo_RTC_e_LCD.ino:48:8: error: ‘class TwoWire’ has no member named ‘write’
    Modulo_RTC_e_LCD.ino:49:8: error: ‘class TwoWire’ has no member named ‘write’
    Modulo_RTC_e_LCD.ino: In function ‘void Mostrarelogio()’:
    Modulo_RTC_e_LCD.ino:64:8: error: ‘class TwoWire’ has no member named ‘write’
    Modulo_RTC_e_LCD.ino:67:43: error: ‘class TwoWire’ has no member named ‘read’
    Modulo_RTC_e_LCD.ino:68:42: error: ‘class TwoWire’ has no member named ‘read’
    Modulo_RTC_e_LCD.ino:69:40: error: ‘class TwoWire’ has no member named ‘read’
    Modulo_RTC_e_LCD.ino:70:46: error: ‘class TwoWire’ has no member named ‘read’
    Modulo_RTC_e_LCD.ino:71:43: error: ‘class TwoWire’ has no member named ‘read’
    Modulo_RTC_e_LCD.ino:72:38: error: ‘class TwoWire’ has no member named ‘read’
    Modulo_RTC_e_LCD.ino:73:38: error: ‘class TwoWire’ has no member named ‘read’

    1. Confira se sua biblioteca está no lugar certo.
      Confira a declaração da biblioteca
      Confira todas aberturas e fechamentos de ” { ” .
      Confira se não esqueceu de nenhum ” ; ” ou de abertura ou fechamento de “(” .

      Se tudo isso estiver feito certo então é conflito na sua lógica.

  61. Boa tarde! Estou iniciando no Arduino… Alguém pode me ajudar com uma dúvida? Consigo criar a lógica dividida em camadas? Para usar um interlock por exemplo, o Void Loop só executa enquanto as condições forem respeitadas e se as mesmas forem desrespeitadas o loop para.

    1. O loop não para. Vc pode é colocar o seu código uma condição , se respeitada a condição entra no If e se não respeitada nada vai acontecer.

      tipo:

      void loop(){
      if(condição){

      }

      }

    2. O Void Loop nunca pára, cara. No máximo, o que pode acontecer é ele entrar num loop infinito, dentro de uma função, e não sair mais dali de dentro. O Arduino sempre vai rodar o Void Loop do início ao fim, repetida e infinitamente. Apenas o Void Setup que é rodado apenas 1 única vez, ao ligar o Arduino. Quanto às camadas, você pode fazer, sim, através de If’s, por exemplo.

  62. Ola pessoal!
    alguém poderia me ajudar?
    preciso de um programa para acionar um rele com hora programada utilizando o RTC DS1307.
    se alguém puder me ajudar ficarei muito agradecido.
    Boa noite!

    1. Considerando que o DS1307 não possui a função alarme, você poderá resolver de uma das tres formas:
      1- armazenar o horário inicio e horário fim na EEPROM do atmega328
      2- idem mas na memória do próprio DS1307 que embora volátil não se perderá enquanto a bateria estivel operacional obs: o rtc tem 58 bytes RAM
      3- idem mas armazenado na memória serial ao lado do rtc on board no modulo.

    2. Bom… provavelmente vc vai usar Arduino + RTC + módulo de relê.
      Não precisa usar EEPROM. É só colocar uma condição que, quando o Arduino ler aquela hora e minuto do RTC, ele vai acionar uma porta digital (que controla o relê). Por ex.:

      void loop() {
      If ((now.hour() == 13) && (now.minute() == 30))
      {
      digitalWrite(11, LOW);
      }
      } // Se agora for 13h30min a porta 11 (conectada ao controlador do relê) irá ficar como LOW.

      No caso de um código meu, eu uso “agora” no lugar desse “now” aí, mas não faz diferença.

      Dá uma pesquisada no Google que tem mta coisa na net.

    1. Valeu Ramon. Abraço!

      Adilson – Equipe MakerHero

  63. Primeiro estou muito satisfeito com o Site.

    Comprei para a empresa em que trabalho uns 30 rtc com vcs. Estou começando os testes agora, ja tive alguns erros citados anteriormente nesse poste, tipo Hora : 00:00:85 Data : 00.00.00 0.00.00 , tudo zerado e tudo desconfigurado.

    Amanha vou fazer o teste do resistor de 200 e verificar todas as baterias, uma outra coisa que fiquei atento é que vc usou a versão 1.0.5 do arduino e estou usando a versão 1.6.6 ( que é otima ) , porem os exemplos do biblioteca do rtc dão erro, ele acusa erro na :

    rtc.begin();

    Queria saber se tem alguma atualização que vc conhece da biblioteca ou se esses erros dos exemplos tambem acontecem na sua versão.

    Obrigado.

    1. Está funcionando normalmente, medi todas as baterias e deixei carregando duas que vieram descarregadas.
      O resistor de 200 faz muita diferença.
      E em 8 RTC vieram com a bateria CR2032.

      Obrigado.

    2. Olá José, seus testes com o resistor de ohm deram certo?

      1. Alguns tiveram problemas. principalmente o defeito de 27 h 87 m.

        Ai coloquei um trimpot no lugar do resistor. Eu vi que ao subir o trimpot da o erro de 27h e descendo esse erro some.

        1. O meu também estava com problema de 27h, quando coloquei o resistor na linha de saída SCL do RTC começou a fornecer resultados corretos, usei um resistor de 270 Ohms.

  64. acertei o relogio com outro relogio mas com o tempo o modulo atrasa com o decorrer do tempo, o que seria, o modulo ou a programação, já peguei varios codigos diferentes todos tem o mesmo atraso, alguem tem alguma sugestão.

    1. Eu comprei mas ainda não chegou para ter uma ideia completa.

      Da uma olhada no seu codigo e tenta diminuir o tempo do delay. Pode ser que simplesmente seu codigo está parado contando o delay enquanto a informação do RTC já não foi lida.

    2. sidnei o resistor é colocado no pino vcc/5volts?

    3. Este CI DS1307 é muito vulnerável e critico quanto ao plano de terra, principalmente na região do cristal 23.768Khz, Vide datasheet, portanto como poderá ver debaixo do cristal há um pad para solda deste, acredito que se o aterrar (soldar o cristal neste pad melhorará a base de tempo.

    4. Não tem solução existente na face dessa terra que resolva isso. Todo santo dia o DS1307 perde alguns segundos, o que vai, logicamente, se acumulando com o decorrer do tempo. Depois de 1 mês vc vai ter alguns minutos de atraso. Só que se esse fosse o único problema desse RTC, tava perfeito. Se você procurar outros comentários meus anteriores aqui na página, vai saber do que tou falando. Abs.

  65. porque quando eu copio e colo a programação na IDE do meu arduino da sempre erro de compilação?

    1. Quase sempre é alguma informação que ficou sem vir junto do lugar que vc fez a copia.

      Tipo uma } ou um ;.

      Mas sempre confira se a placa do arduino que vc esta usando é a mesma que esta marcada na IDE.

  66. Olá, meu módulo está com defeito

    verifiquei o código, as ligações e com esse código ele só retorna
    Hora : 00:00:85 Data : 00.00.00 0.00.00

    Está com defeito mesmo? MakerHero

    1. Bom dia Thiago,

      Por favor reveja as conexões, especialmente a solda dos pinos de conexão ao Arduino. Se o problema permanecer, entre em contato pelo email [email protected].

      Abraço

      Adilson – Equipe MakerHero

  67. É possível utilizar o RTC DS1307 + um display OLED nos mesmos pinos? fazendo cascateamento… Se for possível teria como montar um tutorial a respeito?

  68. bom dia, eu posso controlar um led, módulo relé, lâmpada com ele? por exemplo: acender Led, das 18:00 até 06:00?

  69. NO FIO DO SINAL O MESMO QUE COLOCA O RESISTOR PEGA UM FERRITE EM FORMA DE SOLENOIDE E PASSA UMAS 03 VEZES É SÓ ISSO SE NÃO ENTER ME AVISA QUE EU MANDO UMA FOTO

  70. BOA NOITE A TODOS É SÓ COLOCAR UM NUCLEO DE FERRITE QUE SOME O PROBLEMA JÁ ESCREVI ISSO VARIAS VEZES

    1. Boa noite, Luiz.
      Desculpe a ignorância, mas como colocamos esse núcleo de ferrite? Se puder passar algum link ou alguma coisa que explique com mais detalhes, ficaremos muito gratos. Abs.

  71. ATUALIZAÇÃO sobre meu comentário anterior:

    Pessoal, já faz uns 2 meses que coloquei o resistor de 200R (entre o pino SLC do RTC e o SCL do Arduino) e, de lá pra cá, não tive mais problema. Ainda estou observando para ver quanto tempo o RTC fica sem falhar. Rezando a Deus pra esse upgrade ter sido uma solução definitiva, pra eu não precisar mais me preocupar com esse bendito… no dia que voltar a dar problema (espero que nunca) comento aqui de novo pra avisar quanto tempo durou… Obrigado pelo suporte, FelipeFlop e comunidade. Abraços.

    Tirando a dúvida de quem perguntou sobre qual solução eu tomava antes: eu sempre trocava a bateria (uma vez ou outra trocava o rtc inteiro), upava o código com a linha pra pegar a hora novamente e depois upava o código sem essa linha. Quando ele dava problema com a hora de novo, repetia o procedimento, sempre fazendo o teste primeiro só com a bateria nova. Se não desse certo, trocava o rtc.

    1. Qual a tensão da fonte de alimentação que c tá usando, Marcel?

        1. E como você chegou aos 200 ohms, ou foi por testes mesmo? Se puder me adicionar no face pra gente conversar por lá, pode. https://www.facebook.com/iohanacabral

          1. Usei o resistor de 200R por sugestão do Filipe Flop e de outras pessoas que comentaram isso aqui.

    2. É, pessoal… a solução do resistor de 200R só segurou por 2 meses. O horário ficou doido de novo hoje…
      Dor de cabeça sem fim esse DS1307… Desapontado demais com esse RTC… =/

      1. tente colocar resistor pull up de 10k em SCL e SDA

  72. Boa tarde!

    Não consigo ajustador a hora no monitor serial com o RTC alguém pode me ajudar por favor?
    Obrigado

  73. Olá!
    Esse tutorial pode ser usado para o timer 3231?

    Obrigada!

  74. COLOQUE UM FERRITE CIRCULAR NO FIO QUE RECEBE OS DADOS ISSO VAI MESMO É RUIDO

  75. Boa noite.
    queria saber como eu faço para acender uma lampada as 8 da manha e apaga-la as 18 usando essa programação. pois não estou conseguindo identificar uma forma de definir a hr para que poça acontecer.

  76. Fica-me sempre na sexta feira, como posso mudar isto?

    sendo que n codigo se mudar da erro

  77. Oi, tenho um projeto com RTC. Quando alimento o sistema com o notebook ele funciona perfeitamente, entretanto, ao ligar a uma bateria de 12 v que contém um divisor de tensão ele reinicia. Alguém já teve esse problema e sabe me dizer por que isso acontece?

    1. Bom dia,

      De quantos ampéres é essa bateria ?

      Abraço.

      Adilson – Equipe MakerHero

      1. De 1,4 A. Pq? Qual a infuência?

        1. Bom dia,

          Pelo que você descreveu, o motivo do Arduino reiniciar podia ser tensão/corrente insuficiente, mas parece que não é o caso. Você outra bateria do mesmo tipo para testar ? consegue medir quando de tensão ela está fornecendo realmente ?

          Abraço.

          Adilson – Equipe MakerHero

  78. Boa Tarde!

    estou com uma duvida, o rtc tem um pino de bateria, e a bateria que vem com ele ( vendido por esse site) é a recarregável, tem alguma ligação que possa ser feita para recarregar ele?

    1. Seguinte posso estar enganado mas, comprei quatro módulos desse do mesmo site chines, acho que via ebay, quando fui usa-las pela primeira vez, essa semana constatei que 3 baterias estavam zeradas < 0.2v, e uma estava a 3.32 que é considerada full para baterias de lítio (3v com carga), tive problemas com o modulo e endereço o que me obrigou a me aprofundar e descobri que as outras três baterias são de Íons de Litio (3,6V) sendo as mesmas de 35 mAh, e que são recarregadas por módulos como o Tiny so em estar alimentado o circuito principal, entretanto acredito que na falta de uma bateria LI(R)2032 (acredito ser LitIon Recarregável ) de Lion se preferirem, me mandaram uma CR2032 n recarregável, e que por sorte constatei tanto pelo nome como a tenção que eh de 3,0v, ou seja provavelmente alguém deva estar tendo problemas nesses módulos colocando baterias não recarregáveis, enquanto o modulo mesmo suportando 1 ano, sempre mantem elas carregadas, pois a tecnologia permite isso da química delas, carregar sem efeito memória, mas em resumo, posso estar enganado mas n usem baterias CR2032 nem similares sem ser de Íons de Lítio onde essas são carregadas pelos módulos sem problemas, o VBAT, serve para vc medir a tenção dessas baterias enquanto as usam, posso estar enganado mas acho que passa por um transistor ou diodo pois ela de 3.0v cai pra 2.33v (queda de tensão similar desses componentes ) na saída do pino, ou algum divisor de tensão a constatar, fato eh que , com a de lition sai os 3v necessários para um modulo GPS e seu relógio interno o que simplesmente ligo nele para obter recuperação do sinal de satélite mais rápida. Posso ter falado algo errado ou incompleto por gentileza alguém poderia me corrigir sendo o caso? Resumindo se n mudar o esquema de um Tiny RTC por exemplo o modulo vai tentar carregar a bateria seja ela CD ou LIR, no caso da CR ja sabemos onde isso vai dr ja que se trata de uma química não recarregável.

  79. Estou com o mesmo problema do Gabriel, só fica no erro Hora : 27:01:51 Data : 85.85.xxx, ja fiz tudo que foi falado aqui e nao deu certo, o que pode ser?

    1. Boa tarde Andre,

      Pode ser algum erro no módulo mesmo. Se você fez todos os testes e não resolveu, entre em contato pelo email [email protected].

      Abraço

      Adilson – Equipe MakerHero

      1. Obrigado pelo retorno Adilson, eu usei a biblioteca RTClib e funcionou.

  80. Ola

    Estou com dificuldades para compilar o sketch do RTC DS1307
    esta apresentando o seguinte erro:

    RTC.ino:5:20: fatal error: DS1307.h: No such file or directory
    compilation terminated.
    Erro compilando.

    Gostaria de alguma ajuda se possível
    Obrigado!
    .

    1. Bom dia Rodrigo,

      Isso parece ser algum erro na instalação da biblioteca. Você pode verificar essa parte, por favor ?

      Abraço

      Adilson – Equipe MakerHero

      1. MakerHero,

        Obrigado pela ajuda!

        Mais você poderia me mandar essa biblioteca?

        1. Bom dia Rodrigo,

          Você pode fazer o download da biblioteca nesse link: https://github.com/MakerHero/DS1307

          Abraço!

          Adilson – Equipe MakerHero

  81. Rapaz, mais de 9 meses com um projeto funcionando 24h no ar, 7 dias por semana, e não teve jeito, já troquei o RTC dele diversas vezes. Sem mal contato na caixa, sem soldas frias, upando a linha de código pra pegar a hora só 1 vez e depois upando sem a linha, tendo trocado o RTC por outros novos várias vezes, colocando baterias novas várias vezes… Depois de 1 ou 2 meses o RTC acaba perdendo a hora e começa a mostrar 00:00:00 00/00/000 ou então o famoso 85:28:85 etc (mas geralmente é com os valores zerados). Aí preciso ir até meu cliente, refazer tudo de novo e esperar bugar outra vez. E o circuito fica 24h sendo alimentado pela fonte de alimentação, exceto algumas poucas horas (ou minutos) quando falta energia, ou seja, é raro usar a bateria do RTC.

    E a única coisa que me aperreia é esse DANADO desse RTC. Nada mais me dá dor de cabeça no projeto, exceto isso. Já tou estressado! E isso pq eu nem me importo com a questão de que ele vai atrasando/adiantando alguns minutos com o tempo… kkkkkkk. E o pior de tudo é não encontrar um outro que seja melhor (ou menos ruim… kkkkkk).

    1. Bom dia,

      Você já tentou colocar um resistor de 200 ohms (creio que um valor próximo a esse também funcione) entre o RTC e o pino A5 ?

      Abraço

      Adilson – Equipe MakerHero

    2. Marcel, eu também estou com o mesmo problema, você conseguiu resolver?

      1. Ainda não deu pra fazer o teste com o resistor de 200 ohms (por isso ainda não tinha respondido), mas assim que testar digo aqui se funcionou ou não. Abraços.

      2. Lê meu novo comentário.

    3. Pessoal, já faz uns 2 meses que coloquei o resistor de 200R e, de lá pra cá, não tive mais problema. Ainda estou observando para ver quanto tempo o RTC fica sem falhar. Rezando a Deus pra esse upgrade ter sido uma solução definitiva, pra eu não precisar mais me preocupar com esse bendito RTC… no dia que voltar a dar problema (espero que nunca) comento aqui de novo pra avisar quanto tempo durou… Obrigado pelo suporte, FelipeFlop e comunidade. Abraços.

      Tirando a dúvida de quem perguntou sobre qual solução eu tomava antes: eu sempre trocava a bateria (uma vez ou outra trocava o rtc inteiro), upava o código com a linha pra pegar a hora novamente e depois upava o código sem essa linha.

      1. So n esquece de ver se estais usando baterias n recarregáveis como as de PC CR2032, no lugar da LIR2032 que o modulo tenta carregar as duas mas so a segunda é recarregável, o que pod ser motivo da falha de seus módulos… So uma sugestão… comprei 4 módulos 3 vieram com LIR e so uma com CR, pesquisando descobri algo do tipo que comentei …vlw.

  82. Meu RTC não Aparece nada legível, no monitor serial aparece símbolos:

    QSþ©QSþ©QSþ©QRþ©QSþ©QSþ©QRþ©QSþ©QSþ©QSþ©QSþ©QSþ©A¦ü©QSþ©QSþ©QSþ©QRþ©QSþ©QSþ©QSþ©A¦ü«A¦ü©QSþ©A¦ü©QSþ

    já fiz uma vez e funcionou, mas agora ta assim..oque pode ter acontecido?

  83. O meu relógio só mostra
    Hora : 27:85:85 Data : 85.85.@5 5.85.@5 e Hora : 00:00:00 Data : 00.00.00 0.00.00
    o que será que está acontecendo?

    1. Olá, Gabriel, estava com o mesmo problema.

      adiciona a biblioteca

      Wire.begin(); //adicione esta linha
      rtc.halt(false);

      pronto!

      1. a biblioteca é ::: Wire . h (nao apareceu no comentário anterior)

        1. Cara, não funcionou!

  84. Bom dia, estou em um projeto em que tenho que calcular a temperatura média do mês e enviar para um aplicativo via bluetooth, como posso fazer para contar 1 mês com o RTC, e no final enviar a media? Alguem pode me responder, pf.

    1. caro amigo, você pode , montar uma função no arduino que ira receber os dados do seu RTC e ira fazer a media, porem voce tera o inconveniente de deixar seu arduino ligado por um mes, pois o RTC não execulta nenhum calculo alem das horas.

      1. Eu posso fazer uma comparação com o RTC? EXEMPLO:

        Se 15:20 min então

        {
        Comando
        }

        ….

        Posso fazer isso?

      2. Eduardo, você pode usar um ethernet shield, e enviar esses dados para um servidor MySQL (por exemplo) em tempo real. Com todos os dados, você pode manipular, criar relatórios e suas médias mensais.

    2. Bom dia Eduardo!
      Eu tive a mesma necessidade e soldei um sensor de temperature DS18B20 na placa do modulo Real Time RTC DS1307 e modifiquei o programa para ler a temperature. Funciona satisfatoriamente.

  85. Filipe como faço para ativar o sensor de temperatura desse modulo no código?

    1. Boa noite Leonardo,

      Você precisa soldar um DS18B20 no conector da placa, e depois ler as informações de temperatura por meio do pino DS.

      Abraço.

      Adilson – Equipe MakerHero

    2. Bom dia Eduardo!
      Eu adicionei as seguintes linhas ao programa:
      #include

      // On pin 13, a 4.7K resistor
      OneWire ds(13);

      void setup(){
      Serial.begin(9600);

      }

      void loop(){
      //Variáveis da Temperatura
      byte i;
      byte present = 0;
      byte type_s;
      byte data[12];
      byte addr[8];
      float celsius, fahrenheit;

      if (OneWire::crc8(addr, 7) != addr[7]){
      Serial.println(“CRC is not valid!”);
      return;
      }

      Serial.println();
      // the first ROM byte indicates which chip
      switch (addr[0]){
      case 0x10:
      Serial.println(” Chip = DS18S20″); // or old DS1820
      type_s = 1;
      break;
      case 0x28:
      Serial.println(” Chip = DS18B20″);
      type_s = 0;
      break;
      case 0x22:
      Serial.println(” Chip = DS1822″);
      type_s = 0;
      break;
      default:
      Serial.println(“Device is not a DS18x20 family device.”);
      return;
      }

      ds.reset();
      ds.select(addr);
      ds.write(0x44); // start conversion, use ds.write(0x44,1) with parasite power on at the end

      delay(1000); // maybe 750ms is enough, maybe not

      // we might do a ds.depower() here, but the reset will take care of it.
      present = ds.reset();
      ds.select(addr);
      ds.write(0xBE); // Read Scratchpad

      Serial.print(” Data = “);
      Serial.print(present, HEX);
      Serial.print(” “);
      for ( i = 0; i < 9; i++){ // we need 9 bytes
      data[i] = ds.read();
      Serial.print(data[i], HEX);
      Serial.print(" ");
      }

      Serial.print(" CRC=");
      Serial.print(OneWire::crc8(data, 8), HEX);
      Serial.println();

      // Convert the data to actual temperature
      // because the result is a 16 bit signed integer, it should
      // be stored to an "int16_t" type, which is always 16 bits
      // even when compiled on a 32 bit processor.
      int16_t raw = (data[1] << 8) | data[0];
      if (type_s){
      raw = raw << 3; // 9 bit resolution default
      if (data[7] == 0x10) {
      // "count remain" gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 – data[6];
      }
      }
      else{
      byte cfg = (data[4] & 0x60);
      // at lower res, the low bits are undefined, so let's zero them
      if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
      else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
      else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
      //// default is 12 bit resolution, 750 ms conversion time
      }

      //Cálculo da Temperatura
      celsius = (float)raw / 16.0;
      Serial.print(" Temp = ");
      Serial.println(celsius);
      lcd.setCursor(8,0);
      lcd.print(" ");
      lcd.print(celsius);
      lcd.print("C");
      }

      1. Obrigado, estas informações são realmente úteis.

        1. Valeu Eduardo !

          Abraço.

          Adilson – Equipe MakerHero

  86. Boa noite, gostaria de saber se posso adaptar para cronometrar por exemplo uma largada e chegada de algo ?

    Jose Wilson Soares do Nascimento
  87. Bom Dia !
    Gostaria de saber como deixo os dias da semana em portugues no display, pois no meu aparece os dias em inglês e não estou conseguindo mudar, estou usando a biblioteca DS1307.h.

    1. Você tem que mudar a librarie inteira dele.. Procure por exemplo “Friday” em “DS1307.h” , “DS1307.cpp” e “keywords” .. e mude todos para “Sexta”, e faça isso com os outros dias da semana..

      Ou simplesmente mude os termos entre “aspas” no DS1307.cpp :
      switch (t.dow)
      {
      case MONDAY:
      output=”Monday”;
      break;
      case TUESDAY:
      output=”Tuesday”;
      break;
      case WEDNESDAY:
      output=”Wednesday”;
      break;
      case THURSDAY:
      output=”Thursday”;
      break;
      case FRIDAY:
      output=”Friday”;
      break;
      case SATURDAY:
      output=”Saturday”;
      break;
      case SUNDAY:
      output=”Sunday”;
      break;
      }

  88. boa noite, quando desligo o arduino deixando só o modulo 1307 ligado com a bateria, as vezes quando ligo no dia seguinte ele esta desregulada a hora,porque

    1. Olá Sidnei, também encontramos o mesmo problema , no caso tenta medir a tensão da sua bateria , se não tiver 3.6V , precisa trocar.

  89. como fazer um despertador usando esse mesmo modulo RTC?

    1. Boa tarde Felipe,

      Você pode incluir um condicional (IF) dentro do programa para comparar a hora atual com uma hora pré-determinada. Ficaria mais ou menos assim :

      If (hora = hora_despertador)
      {
      //Comando para acender luz, tocar sirene, etc
      }

      Abraço.

      Adilson – Equipe MakerHero

      1. vc poderia me dar um exemplo melhor sobre isso? preciso ativar um equipamento a partir de uma hr pre determinada e ainda n consegui :/

  90. Pessoal , dê uma checada na pilha do módulo , pois a minha veio com carga bastante baixa com 0.5V, por isso não consegue manter o horário correto .

    1. é verdade, o meu tambem veio com a bateria descarregada. o melhor exemplo que funcionou perfeitamente foi o desse link. http://www.instructables.com/id/Arduino-Aquaponics-Real-Time-Clock-Part-I/step2/Arduino-Library-and-Sketch/

  91. É possível adaptar essa placa com RTC em um Microcontrolador 8051?

    1. Bom dia Sérgio,

      É possível sim, creio que nesse link tem tudo o que você precisa :

      http://www.engineersgarage.com/contribution/real-time-clock-using-8051-microcontroller-rtc-ds1307

      Abraço.

      Adilson – Equipe MakerHero

  92. Olá, seria muito complicado usar esse código p/ um DS1302?
    Tenho um funduino mega2560 mas todos os codigos que copiei e colei da internet nao funcionam pois não estão pegando a hora no rtc.
    Alguém pode me ajudar?

    Grato
    Att
    Carlos

  93. Olá, estou utilizando o modulo RTC em um arduino com função de logger, porém o código que uso não está setando a hora e a data correta. Sabe me informar o que preciso fazer?

    Aguardo, obrigada.

    1. Boa noite Janaina,

      Qual erro que está apresentando ?

      Grato.

      Adilson – Equipe MakerHero

  94. Boa tarde. Estou desenvolvendo um projeto, e gostaria de saber se tem como eu usar os dados de segundo, dia e ano separados.

    Exemplo: usar os segundos para tirar média de vazão de um sensor.

    Alguém poderia me ajudar ?

    1. Boa noite Raphael,

      Você pode retirar uma parte da string e utilizar apenas a parte que você precisa, ou seja, os segundos. Creio que esse link pode te ajudar :

      http://arduino.cc/en/Tutorial/StringRemove

      Abraço !

      Adilson – Equipe MakerHero

    2. Como o Adilson disse, use a função substring:

      hora = rtc.getTimeStr();
      h = hora.substring(0,2);
      m = hora.substring(3,5);
      s = hora.substring(6,8);

  95. Acompanhando este tópico, tentem estas dicas:
    1 – verifique a bateria, se esta ligada corretamente e se tem carga.
    2 – verifique se ligou corretamente o SCL e o SDA, muita gente inverte…
    3 – verifique o Baudrate no serial monitor. normalmente fica em 9600 baud
    E mais importante… se a montagem é em protoboard as vezes dá mau contato nas ligações
    gerando os caracteres estranhos citados…
    Boa sorte ^^

  96. Eu tive o mesmo problema que a maioria dos colegas relatou. Fiz as conexões corretas, adicionei a biblioteca DS1307.h e digitei o sketch como explicado neste site, mas não certo… No Serial Monitor informava repetidamente:

    Hora : 27:85:85 Data : 85.85.@5 xxx

    Depois disso atualizei a IDE do Arduino para a versão 1.0.6 e o problema continuou. Então finalmente segui o conselho do Marcel e deu certo. A solução mesmo é usar o modelo utilizado no site do “Arduino e Cia” (ver abaixo). Nesse caso, será usado a biblioteca Wire.h que o Arduino já possui.

    http://www.arduinoecia.com.br/2013/04/real-time-clock-rtc-ds1307.html

    Boa sorte!

    1. O meu esta com o mesmo problema, mas acontece somente quando eu conecto o modulo diretamente na protoboard, quando eu utilizo jumpers ele funciona perfeitamente. E a protoboard esta funcionando normalmente, o que torna mais estranho ainda.

  97. Adilson, Boa noite !

    Em busca na internet sobre o problema do meu relógio que adianta aproximadamente 5 segundos por hora, encontrei outra informação que pode ser importante divulgar.
    Parece que alguns relógios Tiny RTC i2c estão estourando as baterias CR2032. O motivo é que esses relógios devem usar a bateria LIR2032 (Recarregável) e não a CR2032 (Não recarregável). Para poder usar as CR2032 sem problemas deve-se retirar o diodo D1 e os resistores R4 e R6. Sendo que no lugar de R6 deve-se colocar um jamper.
    Segue um dos links sobre o assunto:
    http://www.ebay.com/gds/Tiny-RTC-I2C-modules-Arduino-/10000000178398866/g.html

    Sds,

    Ivanluiz

    1. Boa tarde Ivan,

      Ótima informação, não tivemos relatos ainda de baterias danificadas, mas serve de alerta para quem for trocar a bateria desse módulo.

      Abraços !

      Adilson – Equipe MakerHero

    2. Com a CR2032 ligando ele em 3v3 tambem resolve, alimentar com 5v só se estiver com a LIR2032

  98. O que o colega diz deve ser o que ocorre comigo também:
    Hora : 27:85:85 Data : 85.85.@5 xxx
    o que devo fazer?

    1. Coloque um resiator de 200 ohm entre o RTC e o a5 e dê carga no programa de novo.

      1. O meu esta com o mesmo problema, coloquei o resistor e não resolveu, e agora?

        1. Desculpa! o programa deu um erro, mas agora esta funcionando!

        2. BOM DIA!!! REALMENTE É UM PROBLEMA ESQUISITO MESMO COM O RESISTOR COMIGO TEM HORA QUE TAMBÉM NÃO FUNCIONA, MAS O QUE DEU MAIS CERTO FOI COLOCAR UM FERRITE NA FORME DE TOLENOIDE E DEI DUAS VOLTAS, COLOQUEI UM NO A4 E UM NO A5, DEVE SER ALGUM RUIDO GERADO PELO RTC. PRECISAVA TER UM OSCILOSCÓPIO PARA PODER ANALISAR MELHOR. SE VOCE QUISER UMA FOTO ME MANDA O SEU E-MAIL – OBRIGADO….

          1. Luiz, gostaria de uma foto da sua solução com ferrite, meu e-mail: [email protected]

          2. OLÁ, SE O AMIGO PUDER MANDAR A FOTO, AGRADEÇO.
            FELIZ NATAL

          3. Por favor, pode me mandar a foto com o ferrite?
            Estou com mesmo problema de perder a hora e travamentos.

            Fernando Martins
          1. Olá, pessoal.
            Há quase um mês, brigando com RTC1307. Cheguei trocar por 4 outros e sempre dando travamentos e perdas de dados. As suspeitas caíam em:
            1. ruídos de campo magnético de um trafo 127-24v Ac e 4 válvulas solenóides próximas de 3/4″ próximas dos RTCs.
            2. uso de bateria comum alcalina, ao invés de LIR recarregável.
            3. flutuação de estados 1 e 0 nas saídas SCL e SDA.

            Meu sistema é composto por:
            Arduino Genérico GeekCreit+RTC1307+relés, válvulas solenóides etc.

            ÚLTIMAS CORREÇÕES FEITAS:
            1. Com relação a ruído, ainda não testei na caixa plástica onde estão os campos magnéticos. Se persistirem travamentos, vou envelopar os componentes com filme plástico pra evitar curtos circuitos e, em seguida, envelopar com papel alumínio para blindagem magnética. Se não resolver, vou instalar núcleo de ferrite nos cabos SCL e SDA.
            2. Instalei bateria LIR2032 (sozinha não resolveu o problema)
            3. Coloquei dois resistores de 4.7k, ambos jumpeando em paralelo as saídas SCL e SDA com os 5v dc. Ou seja, no ponto de soldagem do cabo vindo do RTC SCL no pino A1, soldei a ponta do resistor de 4.7k jumpeando com os 5v. Em seguida, fiz o mesmo procedimento com o outro resistor na saída SDA com os 5v.

            Sistema rodando desde ontem sem travar e sem perder a hora!
            Darei mais informações depois de instalar na caixa, sobre possíveis ruídos de campos magnéticos.

    2. Boa noite Luiz,

      Por favor reveja as conexões e a solda do módulo, a maioria dos problemas com esse módulo são ocasionadas por falhas na ligação.

      Grato.

      Adilson – Equipe MakerHero

      1. BOM DIA – OBRIGADO PELO CONTATO – MAS NÃO É PROBLEMA DAS CONEXÕES – COLOCANDO RESISTOR FUNCIONA, COLOCANDO UM FILTRO COM FERRITE FUNCIONA, ESTE MODULO FOI UMA DECEPÇÃO NÃO TEM PRECISÃO, MAL FUNCIONAMENTO, FOI O PIOR MODULO PARA TRABALHAR COM O ARDUINO, NÃO TEM NENHUMA APLICAÇÃO PRATICA. OBRIGADO

        1. O problema não é o módulo, e sim o Arduíno não original, quem descobriu a do resistor fui eu, tenho arduinos originais e replicas, nos originais funciona sem precisar de resistor.

          1. BOM DIA, NÃO IMPORTA QUEM DESCOBRIR COLOCANDO UM FERRITE TAMBÉM FUNCIONA MAS TUDO BEM E QUANTO A PRECISÃO É DA REPLICA TAMBÉM O PROBLEMA NÃO POSSO TRABALHAR COM UM RELÓGIO QUE ADIANTA OU ATRASA 2 MINUTOS POR DIA.

  99. Amigo, estou tentando comparar a data e hora atual trazida pelo DS1307 com uma inserida manualmente pelo usuário via botôes para o acionamento de um relé para ligar uma válvula, mas não consigo fazer uma comparação, pode me ajudar?

    if (rtc.getTimeStr() == 22) {
    digitalWrite(rele, HIGH);

    mas como é um ponteiro não tem dado certo

    1. vc pode usar a função de comparação de strings STS

    2. NEM VAI FUNCIONAR VOCE ESTA COMPARANDO XX:XX:XX COM 22 VEJA OS EXEMPLOS NA BIBLIOTECA DO RTC PARA ENTENDER COMPARAR SÓ COM A HORA.

  100. Estou procurando na internet mas nao acho o script correto, tenho o o RTC 1307 e gostaria que ele acionasse dois reles, sendo o promeiro acionado todos dias as 07h e desligado as 12h e outro rele acionado as 08h e desligado as 18h, parece simples mas nao to achando assim simples, so um mais completos com Display e ajustes por teclas.. eu gostaria so do script basico.

    1. Também tenho essa dúvida amigo

  101. alguém sabe como fazer para comparar hora e minutos para fazer um alarme? fico no aguardo.

    1. Comigo deu certo assim:

      Criei uma variável

      String hora;

      Depois joguei nela a hora do relógio

      hora = rtc.getTimeStr();

      E logo sem seguita um if

      if (( hora == “12:00:00” ) || ( hora == “18:00:00” )) {
      Serial.println(“Alarme”);
      }

      1. No meu não viro isso não AHUAHDUAH’

      2. Boa noite.
        Se eu quiser comparar apenas os minutos e segundos, sabe como que eu posso fazer? Por exemplo quero acionar um alarme toda vez que for x horas e 30 minutos. Como eu estou fazendo um protótipo necessito fazer o acionamento em curtos intervalos de tempo para poder demostrar que funciona.

  102. Estou tendo um problema no meu modulo, nao sei se eh problema cm o modulo ou nao programação! seguinte, ta atrasando 2 segundos, alguem saberia me dizer o por que??

    1. Boa tarde Leonardo,

      Estranho isso. Em qual período ele atrasa 2 segundos ? em um dia ? uma hora ?

      Grato.

      Adilson – Equipe MakerHero

  103. Comprei um rtc liguei certinho como o exemplo e ele está adiantando 2 minutos a cada 12 horas o que pode ser?

    1. Boa tarde Laercio,

      Difícil falar sem testar o módulo, mas pode ser algum problema na placa, se não houver nenhum fator externo, como reprogramação da data e hora, por exemplo.

      Por favor efetue mais alguns testes e se o problema persistir entre em contato para que o módulo seja substituído.

      Grato.

      Adilson – Equipe MakerHero

      1. O meu também está assim, adiantando uns 2 minutos a cada 12 horas.

    2. Estou com o mesmo problema, o relógio está atrasando 2 minutos a cada dia! Está tudo montado correto e até agora o problema persiste.

  104. Boa Noite !

    Comprei com vocês um RTC DS1307, mas não está contando, somente aparece as informações DOMINGO 01.01.2000 — 00:00:00 e nao conta ajustei a hora mas aparece so na primeira linha nas seguintes não aparece volta a essa informação como resolver ?

    1. Boa tarde Thiago,

      Você está excluindo as linhas que setam a data e hora ? Reveja também a solda da barra de pinos.

      Grato.

      Adilson – Equipe MakerHero

  105. Boa galera descobri mais uma, tentei ligar o rtc mais uma vez em um arduino não “original” e deu esse erro chato 85.85.5@ … peguei o mesmo rtc e coloquei em um “original” e funcionou normal, dai fiquei testando e fiz uma experiência que deu certo coloquei um potenciometro entre o rtc e o A5, e com uma resistencia baixa ele funcionou blz.

  106. Funcionou blz. Adicionei uma função para setar a hora ao apertar um botão.
    Obrigado!

    1. Boa noite Alex !

      Legal. É uma bela sugestão para incrementar o programa. 🙂

      Abraço !

      Adilson – Equipe MakerHero

    2. Como?

  107. amigo toda vez que o arduino for reiniciado a hora sera setada novamente???? ou seja sempre vaiser a hora que colocou no codigo?

    1. vc compila e envia o código para o arduino pela primeira vez com as linhas abaixo normalmente:
      rtc.setDOW(FRIDAY); //Define o dia da semana
      rtc.setTime(20, 37, 0); //Define o horario
      rtc.setDate(6, 6, 2014); //Define o dia, mes e ano

      uma vez feito isso, o RTC já está com a hora atualizada (lembre de deixar a hora certinha com seu relogio de pulso).

      Compile e envie o código para o arduino agora com essas linhas comentadas.
      /*
      rtc.setDOW(FRIDAY); //Define o dia da semana
      rtc.setTime(20, 37, 0); //Define o horario
      rtc.setDate(6, 6, 2014); //Define o dia, mes e ano
      */

  108. DS1307 rtc(A4, A5);

    Está dando erro nessa linha o que devo fazer ???

    1. Boa tarde Gustavo,

      Qual erro a IDE aponta ? Você instalou a biblioteca normalmente ?

      Grato.

      Adilson – Equipe MakerHero

    2. O meu tb esta dando este erro…

      sketch_sep26a:3: error: ‘DS1307’ does not name a type
      sketch_sep26a.ino: In function ‘void setup()’:
      sketch_sep26a:8: error: ‘rtc’ was not declared in this scope
      sketch_sep26a:12: error: ‘FRIDAY’ was not declared in this scope
      sketch_sep26a:17: error: ‘SQW_RATE_1’ was not declared in this scope
      sketch_sep26a.ino: In function ‘void loop()’:
      sketch_sep26a:27: error: ‘rtc’ was not declared in this scope
      sketch_sep26a:30: error: ‘FORMAT_SHORT’ was not declared in this scope

      1. Acredito que faltou vc colocar a biblioteca DS1307 na pasta libraries.
        Baixe o arquivo que foi indicado no post e descompacte a pasta dentro da pasta libraries. Se estiver no windows o caminho vai ficar assim: C:UsersusuarioDocumentsArduinolibrariesDS1307. Feito isso abra novamente a IDE do arduino e tente compilar.

  109. Olá, baixei a library sugerida no link do site http://www.henningkarlsen.com/electronics/library.php?id=34
    porém os dados lidos estão completamente errados:
    Hora: 27:85:85
    Data: 85:85:@5 xxx

    Encontrei alguma referencia na rede sobre essa hora errada, sugerindo que nao estou conseguindo ler a data do modulo. A biblioteca que baixei tem a seguinte versão:
    Version:
    1.0 4 Oct 2010 – initial release
    1.1 26 Jan 2012 – Added support for Arduino 1.0 IDE

    O que estou fazendo errado? Existe outra library que vc pode sugerir?
    Grato

    1. Boa noite,

      Tente a RTCLib, nesse endereço : https://github.com/adafruit/RTClib

      Grato.

      Adilson – Equipe MakerHero

      1. Também tive esse problema e consegui resolver com essa nova biblioteca que você indicou.

        Muito Obrigado

  110. Aeh galera, testei no mega a principio não funcionou, mas aeh mudei os bps da serial para 57600 eaeh
    funcionou de boa!

    1. Boa tarde Rafael,

      Nos nossos testes funcionou normalmente com a velocidade de 9600, mas é um teste válido.

      Abraços e obrigado.

      Adilson – Equipe MakerHero

  111. Comigo não tá lendo nada. Aparece sempre as datas e as horas zeradas

    1. Boa tarde Ricardo,

      Por favor verifique as conexões e principalmente se os pinos do módulo estão bem fixados.

      Grato.

      Adilson – Equipe MakerHero

  112. tive o mesmo problema que os demais, só funciona quando tiro o negativo. Alguém já resolveu este problema.

    1. eu estava testando com um garagino, testei com o Leonardo e deu certo.

      1. Boa tarde,

        Legal, obrigado pelo retorno.

        Abraço.

        Adilson – Equipe MakerHero

  113. Sabe como setar a hora, e data?
    Tipo void SetaDS(…){}
    e chamar o comando para enviar os dados…estou utilizando String ou byte, não encontrei uma forma de enviar os dados…

    1. Boa tarde Daniel,

      Sim, você pode criar uma subrotina e copiar essa parte do código lá pra dentro :

      //As linhas abaixo setam a data e hora do modulo
      //e podem ser comentada apos a primeira utilizacao
      rtc.setDOW(FRIDAY); //Define o dia da semana
      rtc.setTime(20, 37, 0); //Define o horario
      rtc.setDate(6, 6, 2014); //Define o dia, mes e ano

      você só terá que definir como será a entrada de dados, se usará um display, botões, teclado, etc.

      Abraço.

      Adilson – Equipe MakerHero

  114. Precisa de resistor de pull-up ?

    o meu RTC ta atrasando..

    1. Boa tarde Rogério,

      A princípio não é necessário, pois o módulo vem com todos os componentes integrados.

      Abraço.

      Adilson – Equipe MakerHero

  115. Estou usando
    rtc.poke(1, 1);

    e quando eu uso rtc.peek(1) depois de desligar o arduino e ligar novamente e nao deixou salvo na memoria o valor!

    oq devo fazer ?

    1. Boa noite Rogério,

      Em qual programa você está usando esse comando ?

      Adilson – Equipe MakerHero

  116. Como saber se a data ja foi configurada e não precisa configurar mais ?

    1. Boa noite Rogério,

      Você pode retirar o comando de escrita da hora e tentar efetuar uma leitura. São essas 3 linhas do programa :

      rtc.setDOW(FRIDAY); //Define o dia da semana
      rtc.setTime(20, 37, 0); //Define o horario
      rtc.setDate(6, 6, 2014); //Define o dia, mes e ano

      Adilson – Equipe MakerHero

      1. Eu fiz um if no inicio para saber se já tem hora..
        Mas acho q a lib deveria implementar uma funçao para verificar se ja tem hora salva.

        vlw.

  117. Quando eu fui fazer o uplound deu o seguinte erro:

    sketch_jul26a:8: error: ‘DS1307’ does not name a type
    sketch_jul26a.ino: In function ‘void setup()’:
    sketch_jul26a:13: error: ‘rtc’ was not declared in this scope
    sketch_jul26a:17: error: ‘FRIDAY’ was not declared in this scope
    sketch_jul26a:22: error: ‘SQW_RATE_1’ was not declared in this scope
    sketch_jul26a.ino: In function ‘void loop()’:
    sketch_jul26a:32: error: ‘rtc’ was not declared in this scope
    sketch_jul26a:35: error: ‘FORMAT_SHORT’ was not declared in this scope

    O que devo fazer?
    Desde ja agradeço a todos

    1. Boa noite Mauro,

      Você baixou e instalou a biblioteca ?

      Adilson – Equipe MakerHero

      1. Estou enfrentando o mesmo problema, já tentei varias bibliotecas, já troquei a bateria, já refiz os pontos de solda mas o RTC continua mostrando valores incorretos e quando ele aparenta mostrar algo coerente, pode-se ver que o tempo nao está contando, sao sempre os mesmos numeros.

        1. Boa tarde Eduardo,

          Se você já verificou as conexões e principalmente a solda, pode ser que o seu módulo esteja com defeito.

          Se foi adquirido aqui na MakerHero, por favor entre em contato com o departamento de vendas.

          Grato.

          Adilson – Equipe MakerHero

      2. Não seria mais proveitoso dizer:
        “Baixe e instale a biblioteca!”?

  118. Essa lib funciona para usar no Attiny85?
    Teria alguma lib que funcione no Attiny85?

    1. Boa noite Rogério,

      Por favor tente este artigo, e a biblioteca TinyWireM : https://codebender.cc/example/TinyWireM/Tiny85_Temp_LCD_RTC

      Grato.

      Adilson – Equipe MakerHero

  119. Kra, comigo também não funcionou, e pelo que pude perceber o problema está na library pois usando sem a library (Um código gigante que consegui na web) funciona perfeitamente.

    1. Boa tarde Marcel,

      Aqui usamos a IDE 1.5.0, e a biblioteca mencionada no post. Você está utilizando alguma outra versão ?

      Grato.

      Adilson – Equipe MakerHero

  120. O que o colega diz deve ser o que ocorre comigo também:
    Hora : 27:85:85 Data : 85.85.@5 xxx

  121. Não deu certo! Na hora de mostrar a hora na janela do monitor da porta COM, mostra horário e data fora do comum.

    1. Olá Getulio,
      Você se atentou a parte do post que diz:
      No programa, a parte do código que contém os comandos
      rtc.setDOW(MONDAY);
      rtc.setTime(16, 30, 47);
      rtc.setDate(5, 6, 2014);
      só deve ser utilizada para setar a hora e data do RTC DS1307. Depois disso, essas linhas podem ser comentadas ou excluídas e o programa deve ser novamente carregado no Arduino.

      Se sim, me dá um toque e podemos ver melhor o teu problema.
      Abraço!

      1. Sim, fiz do jeito que está explicado. Mas tem outra coisa acontecendo. Quando fui desmontar o sistema, comecei retirando o fio que liga o Gnd do RTC ao GND do Arduino, ai a hora e data foi mostrada no displayLCD direito. Quando coloco de volta o pino ao gnd do arduino a hora fica doida novamente.

        1. Kra o problema é a biblioteca (library) que está sendo usada nesse exemplo, já verifiquei que ela está com erro, a solução por enquanto é usar o modelo do Arduino & Cia ou corrigir a biblioteca.

        2. Meu está assim também, alguma posição?

Trackbacks and Pingbacks

  1. […] Utilizamos esses comandos para desenhar na parte superior da tela símbolos de bateria e sinal. Na parte inferior, mostramos uma sugestão de utilização para mostrar a hora atual, caso você queira utilizar o display com um módulo de relógio de tempo real como o DS1307, que abordamos neste artigo. […]

  2. […] de data e hora no serial monitor. Agora nesse post, vamos utilizar como base esse mesmo artigo (Relógio com o módulo RTC DS1307) e exibir essas informações em um Display LCD 20×4, deixando o nosso relógio muito mais […]