Pular para o conteúdo principal

Teste com RTC DS1302 Relógio de Tempo Real usando LCD como saída

Para aqueles projetos que precisam de calendário ou de um relógio preciso, o RTC (Real-Time clock) DS1302 é uma ótima opção. O módulo DS1302 já vem em uma placa com 5 pinos de saída, cristal oscilador de 32.768kHz e um suporte para bateria 3V CR2032.

Algumas Características


  • Conta segundos, minutos, horas, dia do mês, mês, dia da semana, e ano com compensação para ano bissexto até 2100;
  • 31 endereços de Memória RAM de 8 bits;
  • I/O serial;
  • Alimentação de 2.0V a 5.5V;
  • Consumo de menos que 300nA à 2.0V;
  • Comunicação serial a 3 fios;
  • Relógio funciona nos modos 24-horas ou 12-horas com indicador AM/PM;
  • Controle de alimentação que permite carregar baterias recarregáveis quando conectado à uma fonte secundária de energia. 
Este módulo é bastante versátil e pode ser lido ou escrito através das vias de comunicação. São três pinos, a saber, um de I/O que é onde os dados são enviados e recebidos através de um shift register, outro pino que é uma via de Clock que controla o fluxo de dados e um último pino CE ou /RST que habilita ou não a transmissão e recepção. Os outros 2 pinos são de alimentação.

Datasheet do DS1302.












Biblioteca


A biblioteca DS1302 fornece recursos para trabalhar com as principais funções do RTC. Aqui um manual das funções presentes na biblioteca.

Antes de iniciar o uso da biblioteca, podemos alterar o arquivo DS1302.cpp a partir da linha 264 e trocar os nomes dos dias da semana por nomes em português. Fazer os mesmo a partir da linha 299 e traduzir para o português os nomes dos meses.
No arquivo DS1302.h, podemos alterar os nomes dos dias da semana a partir da linha 45. Recomendo, para este segundo arquivo, usar apenas o primeiro nome antes do hífen (sem 'feira') e com letras maiúscula, por exemplo, MONDAY fica SEGUNDA, TUESDAY fica TERCA e assim por diante.

Feitas as alterações, podemos agora testar os comandos no Arduino e usar o módulo LCD para vermos os resultados.

Algoritmo de teste




// Assumindo que o DS1302 está conectado como se segue.
// DS1302:  CE pin    -> Arduino MEGA pino Digital 22
//          I/O pin   -> Arduino MEGA pino Digital 23
//          SCLK pin  -> Arduino MEGA pino Digital 24

#include <DS1302.h>                   // Chama biblioteca do DS1302
#include <LiquidCrystal.h>            // Chama biblioteca do LCD
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);  // Configura Módulo LCD
int contador=0;

// Init the DS1302
DS1302 rtc(22, 23, 24);      // Inicia o RTC com o numeros dos pinos que
                             // foram conectados, respectivamente, RST, I/O e SCK
void setup()
{
  lcd.begin(16, 2);     // Inicia módulo LCD
  lcd.setCursor(0,0);   // 
  lcd.clear();          // Limpa LCD
  
  rtc.halt(false);          // Liga módulo
  rtc.writeProtect(false);  // Desabilita proteção da escrita
  
  // Estas três linha seguintes configuram a data e hora do RTC
  // Se você já executou este algoritmo uma vez, estes dados já
  // estarão salvos no RTC. Então estas linhas podem ser comentadas
  // numa segunda gravação para usar data/hora previamente gravadas no RTC DS1302
  
  rtc.setDOW(SEXTA);           // Seta dia da semana como Sexta-Feira
  rtc.setTime(23, 59, 50);     // Seta hora para 23:59:50 (formato 24hr)
  rtc.setDate(17, 10, 2014);   // Seta a data para 17 de outubro de 2014
}

void loop()
{
  // Imprime data no LCD na posicao coluna 0, linha 0
  lcd.setCursor(0,0);          
  lcd.print (rtc.getDateStr());

  // Imprime hora no LCD na posicao coluna 0, linha 1
  lcd.setCursor(0,1);
  lcd.print ("                ");       // 'Limpa' linha
  lcd.setCursor(0,1);          
  lcd.print (rtc.getTimeStr());         // Imprime a hora
  
  if (contador == 10){              // A cada 10 segundos
     lcd.setCursor(0,1);                // apaga a hora e escreve 
     lcd.print ("                ");    // o dia da semana na   
     lcd.setCursor(0,1);                // segunda linha
     lcd.print (rtc.getDOWStr()); 
     contador = 0;
  }
  
  // Aguarda um tempo antes de atualizar os dados do LCD
  delay (1000);
  contador++;
}



Saídas




Utilizando as funções da biblioteca, em pouco tempo já temos um relógio/calendário implementado. O limite é a imaginação. Adquira o módulo RTC e comece agora seu projeto.

Confira outros módulos shield para Arduino na nossa loja.

Até o próximo artigo!

Comentários

  1. Boa noite. Não consegui acessar os arquivos. A mensagem é que foram movidos ou excluídos. Desde já obrigado pela ajuda.

    ResponderExcluir
    Respostas
    1. Problema corrigido. Os links estão on-line agora.
      Obrigado pelo feed-back!
      Aproveite nossas postagens e visite a nossa loja em www.eletrodex.com.br

      Excluir
  2. Respostas
    1. Problema corrigido. Os links estão on-line agora.
      Obrigado pelo feedback!
      Aproveite nossas postagens e visite a nossa loja em www.eletrodex.com.br

      Excluir
    2. Bom dia, poderia verificar os links estão off no droopbox

      Excluir
  3. Boa tarde, em determinado momento os segundos pares não são exibidos e a data e hora ficam no formato abaixo:

    00.00.2000
    00:00:00

    Como corrigir esse bug.

    ResponderExcluir
    Respostas
    1. O meu tambem estava assim. Tinha trocado os pinos. coloquei no lugar devido e deu certo!!!

      Excluir
  4. Qual arduino esta utilizando? A placa utilizada é igual a que esta acima? Existe mais código além do exemplo acima em seu programa, ou somente esta testando o exemplo?

    ResponderExcluir
  5. Olá, estou tendo dificuldades em criar uma condição usando o RTC, estou querendo que a cada 2 horas seja ativado um relay.

    Alguém poderia me ajudar.

    ResponderExcluir
    Respostas
    1. Olá!
      Para isso, basta utilizar o código fornecido na postagem "Utilizando o módulo Display 7 Segmentos para Relógio" (http://eletrodex.blogspot.com.br/2015/06/utilizando-o-modulo-display-7-segmentos.html), e copiar a condição de acionamento do relé, descrita abaixo:
      void despertador()
      {
      if (hour==17 && minute==19)
      {
      digitalWrite(12, LOW);
      }
      else
      {
      digitalWrite(12, HIGH);
      }
      }

      Basta copiar essa parte do código e ajustar para os horários desejados.
      Lembrando que nesse caso, o relé utilizado está ligado ao pino 12 do Arduino e é do tipo "Ativo Baixo", em que é acionado caso o nível lógico no pino vá para"0".
      Esperamos ter ajudado
      Obrigado pelo feedback!
      Aproveite nossas postagens e visite a nossa loja em www.eletrodex.com.br

      Excluir
  6. Bom dia, como eu poderia acender um led, relé, lâmpada em hora específica? tipo ligar 18:00, desligar 02:00?

    alguém poderia ajudar?

    ResponderExcluir
  7. Fui procurar a biblioteca e ela sumui !!!!

    ResponderExcluir
  8. if (hora >= "18:00:00" && hora <= "02:00:00")
    {
    Liga relé...
    }
    else
    {
    Desliga relé
    }

    ResponderExcluir
  9. As bibliotecas estão of novamente.

    ResponderExcluir
  10. As bibliotecas não estão mais no Dropbox, favor verificar.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Utilizando o Programador USB para PIC K150

Nessa postagem iremos demonstrar a utilização do Programador USB para PIC K150 O gravador possui um soquete do tipo ZIF (ZIF - Zero Insertion Force - é um soquete com uma alavanca, que permite a colocação e a retirada dos microcontroladores sem risco de danificar seus terminais) para a programação dos microcontroladores. Conta também com um conector para a programação ICSP (In Circuit Serial Programming, que será abordada futuramente em outra postagem, pois é necessário que se faça algumas adaptações no circuito a ser programado). O programador é controlado pelo PIC16F628A, e no site do fabricante do gravador é possível encontrar informações sobre como atualizar o firmware do gravador, para possibilitar a gravação de mais dispositivos. Instalação do Programador USB para PIC K150 Se você estiver utilizando o Windows 7/Vista/XP, o driver deve ser instalado normalmente, sem que seja necessária a interferência do usuário. Caso esteja utilizando o Windows 8/8.1, o processo é um po...

Controlando LED via Bluetooth utilizando o Módulo HC-05

Hoje abordaremos uma breve demonstração de conexão do Módulo Bluetooth HC-05 Master/Slave com um dispositivo externo, e após a conexão utilizar o dispositivo para controlar um LED. A Placa Base utilizada como controladora é a Arduino Uno , que foi utilizada em conjunto com o Protoshield compatível com a mesma. Todos os itens utilizados podem ser adquiridos em nossa loja . Note que o Módulo Bluetooth HC-05 Master/Slave possui níveis de tensão de alimentação e operação diferentes, sendo que pode ser alimentado com  uma tensão entre 3,3v e 6v (no projeto foi alimentado com 5v, direto de um dos pinos do Arduino Uno ), mas a sua tensão de operação é de 3,3v. IMPORTANTE:    O Arduino consegue reconhecer a tensão de 3,3v no terminal RX como nível lógico alto, mas somente fornece 5v no terminal Tx como nível lógico alto. Portanto, se for utilizar os terminais Rx e Tx para a comunicação com os terminais Tx e Rx do HC-05,  o terminal Tx do HC-05 pode ser conectado...

Como programar com Programador KIT 3.5 para PIC

Nesta postagem iremos falar sobre o Programador KIT 3.5 O Programador KIT 3.5 é um programador para microcontroladores PIC bastante completo, até o momento compatível com  mais de 600 dispositivos da linha de microcontroladores da Microchip, incluindo a nova linha dsPIC. (Confira aqu i a lista com os microcontroladores compatíveis com o Kit 3.5) Permite a programação diretamente na placa (ICSP) ou então através de conectores ZIF (não inclusos). Detalhe para a interface ICSP Com ele é possível gravar (programar), ler, verificar e copiar os códigos dos microcontroladores, através do software gratuito PicKit 3 Programmer ( instruções de uso ), uma vez que ele é totalmente compatível com o PICkit3. Lembrando que este software é apenas para a gravação do arquivo HEX no seu microcontrolador, sendo que é necessário gerar esse arquivo em um compilador de sua escolha. Além disso, é possível utilizá-lo como ferramenta de depuração (debug) através do software MPLAB. Ca...