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

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 diretamente ao ter

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

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