Relógio com o módulo RTC DS1307 253

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.

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 ? Ajude-nos a melhorar o blog atribuindo uma nota aos posts (estrelas no início ou no final do artigo) e visite nossa loja FILIPEFLOP !

Posts Relacionados

253 Comentários

  1. 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?

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

  3. 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 FILIPEFLOP

  4. 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 FILIPEFLOP

  5. 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 FILIPEFLOP

      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 FILIPEFLOP, por favor entre em contato com o departamento de vendas.

          Grato.

          Adilson – Equipe FILIPEFLOP

  6. 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 FILIPEFLOP

      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.

  7. 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 FILIPEFLOP

  8. 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 FILIPEFLOP

  9. 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 FILIPEFLOP

  10. 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 FILIPEFLOP

  11. 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 FILIPEFLOP

  12. 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 FILIPEFLOP

  13. 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 FILIPEFLOP

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

        Muito Obrigado

  14. 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 FILIPEFLOP

    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.

  15. 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
      */

  16. 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 FILIPEFLOP

  17. 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.

  18. 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 FILIPEFLOP

  19. 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 FILIPEFLOP

      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.

  20. 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 FILIPEFLOP

  21. 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.

  22. 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

  23. 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.

  24. 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….

        3. COLOCA SÓ 100 OHMS

    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 FILIPEFLOP

      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.

  25. 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 FILIPEFLOP

  26. 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.

  27. 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 ^^

  28. 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 FILIPEFLOP

    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);

  29. 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 FILIPEFLOP

  30. 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

  31. É 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 FILIPEFLOP

  32. 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/

  33. 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 FILIPEFLOP

      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 :/

  34. 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.

  35. 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;
      }

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

    Jose Wilson Soares do Nascimento
  37. Filipe como faço para ativar o sensor de temperatura desse modulo no código?

    Leonardo Nascimento
    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 FILIPEFLOP

    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 FILIPEFLOP

  38. 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.

  39. 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!

  40. 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?

  41. 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 FILIPEFLOP

    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.

        1. Marcel, Que solução c tomou?

      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.

  42. 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 FILIPEFLOP

      1. FilipeFlop,

        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/filipeflop/DS1307

          Abraço!

          Adilson – Equipe FILIPEFLOP

  43. 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. Obrigado pelo retorno Adilson, eu usei a biblioteca RTClib e funcionou.

  44. 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.

  45. 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 FILIPEFLOP

      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 FILIPEFLOP

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

    sendo que n codigo se mudar da erro

  47. 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.

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

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

    Obrigada!

  50. Boa tarde!

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

  51. 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

  52. 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.

  53. 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

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

  55. É 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?

  56. 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? FILIPEFLOP

  57. 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.

  58. 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.

  59. 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.

    1. Valeu Ramon. Abraço!

      Adilson – Equipe FILIPEFLOP

  60. 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.

  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. 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.

  63. 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.

  64. 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 FILIPEFLOP

      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).

  65. 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.

  66. 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
  67. Como eu declaro o pino no Mega?

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

    LEONARDO DE FREITAS GABARDON
  69. Deveria ser disponibilizada uma biblioteca para uso da EEProm da plaquinha, tive que peregrinar um pouco até encontrar uma simples de usar.

  70. 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 filipeflop.

  71. 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 FILIPEFLOP

      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. Certo… vou tentar aqui.
            Agradeço demais pelo help!
            😀

        1. 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.

  72. 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 FILIPEFLOP

  73. 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.

          Jonatan Damasio Potrikus
    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.

      jose henrique antunes
  74. 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 FILIPEFLOP

      1. Obrigado

      2. 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

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

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

  77. 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.

  78. 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.

  79. 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 ).

  80. 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.

  81. 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.
      😉

  82. 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 .

  83. 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 FILIPEFLOP

    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

  84. 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 “);

  85. 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 ?

  86. colocou o resistor em que parte amigo?

    1. Na porta SCL

  87. 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
  88. Gostaria de controlar uma gpio por exemplo:
    se a hora >= 6:00;
    ligar gipio 7;

    como posso fazer isso ?

  89. 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

  90. 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…….

  91. Olá meu nome é Felipe, eu sou cliente da FILIPEFLOP 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.

      Valber Jones de Castro
  92. ò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?

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

  94. 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

Trackbacks and Pingbacks

  1. […] seu Módulo RTC DS1307 seja novo, provavelmente você terá que acertar a hora dele, o Blog do Filipeflop tem uma material onde você pode acertar a hora do modulo e vê-la no monitor […]

  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 […]

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *