Fork me on GitHub

Microcontrolandos

O Blog está passando por uma fase de mudanças. Todos os posts estão sendo atualizados, códigos, links e imagens estão sendo arrumados. Conteúdos novos ainda estão por vir.

Arduino: Relógio Digital com DS1307

Share:

Arduino: Relógio Digital com DS1307




Assim como num projeto anterior utilizando o PIC, esse relógio digital utiliza o RTC DS1307 (Relógio de Tempo Real). Esse RTC informa as horas e datas e se comunica através do barramento I2C/TWI;

Existem cinco botões que são utilizados para ajustar os minutos, horas, dias, mês e ano.

O clock para o DS1307 deve ser de 32,768KHz.

Para o código é necessário adicionar a biblioteca DS1307. Baixe AQUI. Copie esta pasta para a pasta libraries dentro dos arquivos do Arduino IDE.

Funções da biblioteca DS1307:
DS1307.begin() - Inicia a comunicação I2C.

DS1307.setDate(short ano; short mes; short dia; short semana; short horas; short minutos; short segundos); - Define a data e as horas.

DS1307.getDate( int clock[]) - retorna a data e as horas para um array.

DOWNLOAD
Firmware: RTC.hex;
Arquivo de simulação do Proteus: RTC.DSN;

CóDIGO-FONTE:
 




10 comentários:

  1. Gostei desse Rtc com Ds1307, queria juntar este projeto com o do DS15B20 Mais não sei como fazer isso, estou começando com arduino agora, estou migrando, do ccs linguagem c. A intensão é acrescentar uma temperatura no projeto do rtc Ds1307,depois trabalhar em um projeto para controlar ambiente temperatura e a noite acender luzes de acordo com a hora do relogio. Preciso de uma maozinha para incluir o sensor no relogio, o resto da programação estou pesquisando como editar o codigo ja existente e incluir condições ao relogio, isso irei conseguir fazer estudadndo sobre arduino. Preciso também de uma placa, estou pensando na arduino Uno. Poderia comprar esta placa aqui Você tem ela para venda? Se puder dar uma mãozinha agradeço, e depois de pronto posto aqui o projeto completo. Obrigado Arlindo.

    ResponderExcluir
  2. Me desculpa Tiago! Errei a escrita do sensor. Eu disse DS15B20 - Corrigindo DS18B20 ou pode ser o DS18s20 - Minha intensão é um único sensor, mais nada impede de se usar com os dois sensores, ai poderia implementar um segundo projeto, para usso automotivo do relogio, onde medirá as duas temperatura, Interna e Externa. Ah Eu ja desenvolvi esse projeto com pic16f877a com o CCS Em c, mais decidi que vou mesmo migrar para o arduino. preciso de sua mão mesmo, não sei quase nada em arduino, mais com certeza irei aprender também, Outro detalhe. Não estou conseguindo baixar a IDE No site para o arduino, o Download baixa pouco mais d metade e termina, se tiver um link vou na sua sugestão, Abraços e obrigado. Gostei do seu blog, tem muita coisa boa aqui, to aprendendo bastante aqui. Arlindo.

    ResponderExcluir
    Respostas
    1. Veja esta postagem "http://microcontrolandos.blogspot.com.br/2013/02/arduino-leitura-do-sensor-ds18s20-e-ds18b20.html".
      Desculpe, mas eu não vendo arduino, tem essa loja aqui "http://www.robocore.net/modules.php?name=GR_LojaVirtual&prod=120", muito boa e com um preço ótimo.
      Se precisar de mais ajuda, pode contar comigo!!!
      Abraços, Tiago.

      Excluir
  3. Obrigado Tiago! Vou visitar os links, e trabalhar no projeto. Quando eu tiver tudo funcionando te mando um mail com o projeto ai Você poderá postar aqui para o pessoal Também.Valeu a dica Abraços Arlindo.

    ResponderExcluir
  4. Thiago, gostei muito do codigo, mas como vejo os dias da semana? imagino que seja o array clock[3], mas quando imprimo ele no lcd sempre fica "00". Abri a porta 2 para seta-lo, mas não acontece nada. Outra coisa, voce teria algum exemplo para usar o RTC junto com o sensor de temperatura ds18b20? Como utiliza-los se um é por I2C e outro por 1-Wire? Obrigado desde já.

    ResponderExcluir
  5. Nesse projeto, nao inplementei a semana, mas se vc quiser adicionar, coloque esse codigo:
    if(digitalRead(2)){//semana
    clock[3]++;
    if(clock[3]>6) clock[3]=0;
    DS1307.setDate(clock[0],clock[1],clock[2],clock[3],clock[4],clock[5],clock[6]);
    }

    switch(clock[3])
    {
    case 0: lcd.print("DOM"); break;
    case 1: lcd.print("SEG"); break;//ate o numero 6
    }

    ResponderExcluir
    Respostas
    1. Ambas as comunicações, utilizam pinos diferentes.
      Veja neste post como utilizar o DS18B20.

      Excluir
  6. Olá amigos, usei com sucesso a biblioteca no passado, contudo, fui usá-la novamente e na hora de compilar, retorna um erro:
    "ReadDate.pde: In function 'void setup()':
    ReadDate:31: error: 'DS1307' was not declared in this scope
    ReadDate.pde: In function 'void loop()':
    ReadDate:35: error: 'DS1307' was not declared in this scope
    ReadDate:49: error: 'fromNumberToWeekDay' was not declared in this scope"
    O que pode estar acontecendo ?
    Agradeço a ajuda, Ricardo.

    ResponderExcluir
  7. alguém poderia me ajudar, esse código da erro nessa parte
    if(digitalRead(3)){//ano
    clock[0]++;
    if(clock[0]>99) clock[0]=0;
    DS1307.setDate(clock[0],clock[1],clock[2],0,clock[4],clock[5],clock[6]);
    }
    porque.

    ResponderExcluir