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.
Datasheet do DS1302.
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.
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!
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.
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!
Boa noite. Não consegui acessar os arquivos. A mensagem é que foram movidos ou excluídos. Desde já obrigado pela ajuda.
ResponderExcluirProblema corrigido. Os links estão on-line agora.
ExcluirObrigado pelo feed-back!
Aproveite nossas postagens e visite a nossa loja em www.eletrodex.com.br
BIBLIOTECA esta off downloud .
ResponderExcluirProblema corrigido. Os links estão on-line agora.
ExcluirObrigado pelo feedback!
Aproveite nossas postagens e visite a nossa loja em www.eletrodex.com.br
Bom dia, poderia verificar os links estão off no droopbox
ExcluirBoa tarde, em determinado momento os segundos pares não são exibidos e a data e hora ficam no formato abaixo:
ResponderExcluir00.00.2000
00:00:00
Como corrigir esse bug.
O meu tambem estava assim. Tinha trocado os pinos. coloquei no lugar devido e deu certo!!!
ExcluirQual 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?
ResponderExcluirOlá, estou tendo dificuldades em criar uma condição usando o RTC, estou querendo que a cada 2 horas seja ativado um relay.
ResponderExcluirAlguém poderia me ajudar.
Olá!
ExcluirPara 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
Bom dia, como eu poderia acender um led, relé, lâmpada em hora específica? tipo ligar 18:00, desligar 02:00?
ResponderExcluiralguém poderia ajudar?
Fui procurar a biblioteca e ela sumui !!!!
ResponderExcluirif (hora >= "18:00:00" && hora <= "02:00:00")
ResponderExcluir{
Liga relé...
}
else
{
Desliga relé
}
As bibliotecas estão of novamente.
ResponderExcluirAs bibliotecas não estão mais no Dropbox, favor verificar.
ResponderExcluir