Neste artigo demonstro como fazer um relógio Digital com o Arduíno e um módulo LCD 1602 para exibir o horário.
Importante: Cuidado com os 'módulos similares' do Arduino. Uma vez peguei num lote que comprei os Arduinos com o cristal de 12MHZ. Como todas as bibliotecas do Arduino foram feitas para o Arduino trabalhando com um cristal de 16 MHZ sua base de tempo estará comprometida. Como a contagem de tempo é feita por hardware é complicado tentar fazer o concerto no software.
Como disse acima, a frequência oficial do Arduíno é 16MHZ e a frequência é dividida até gerar a base de tempo do Arduino - Timer 0 e função millis. Timer 0 é o timer com maior prioridade do controlador Arduino e isso é bom porque tem a máxima prioridade de execução e ninguém pode interromper o código de tratamento dessa interrupção dando prioridade máxima a contagem de tempo.
A função millis conta há quantos milisegundos o arduino esta funcionando, desde que foi ligado e é incrementado pela frequência do cristal dividida por circuitos internos ao chip. Isto dá uma boa precisão para o relógio porque o estouro do contador divisor de frequência do cristal gera uma interrupção que faz o processador processar imediatamente essa solicitação ( interrupção ) não importando o quanto ele esteja ocupado processando outra coisa, ou seja, ele para o que está fazendo para processar a rotina de tratamento da interrupção.
Dependendo da qualidade do fabricante do Arduino, com um cristal de 16MHZ o Arduíno dá um erro menor que 2 segundos
por dia. E esse erro ocorre basicamente porque os bons cristais são 'calibrados' ( espessura ) a laser e por isso custam mais
caro e a variação de temperatura também afeta a frequência do cristal.
Apesar da precisão ser boa no passar de semana ou mês a coisa pode pegar...para isso existe o
RTC ( Real time clock - módulo de relógio ).
Faremos um relógio de 24 horas inicialmente e usando o 1602 o relógio fica muito bonito.
Este projeto pode ser café com leite para muitos mas é por baixo que se começa...muita gente tem dúvidas sobre programação e tem muita dificuldade em elaborar um projeto relativamente simples como este.
Sendo assim, este exemplo mostra como fazer um relógio digital baseando-se no contador Timer0 utilizado pela função millis como referencia de tempo.
Como disse acima o relógio vai ficar bonito se o seu módulo de LCD for bonito.
Este módulo de LCD 1602 é o
mais simples, chamamos de paralelo porque ele usa 4 bits para se comunicar com o Arduíno...o serial usa uns 3
pinos apenas e quando o projeto é complexo economizar pinos do Arduino é fundamental e por isso o serial leva
vantagem ao paralelo.
É o mesmo do projeto 09-LCD 1602
O display de LCD parece robusto mas é delicado...é um waffer de 2 vidros finos com um líquido no meio que fica visível quando recebe um sinal elétrico. Trate ele com carinho especialmente na fase de montagem porque ele quebra fácil, risca fácil.
/*
Projeto 11 : Relógio Digital com display LED 1602
Conexão do Arduino e o modo de LCD
LCD Arduino
RS D7
Enable D6
D4 D5
D5 D4
D6 D3
D7 D2
R/W GND-Terra
VSS GND-Terra
VCC Fonte +5V - Pode ser a do arduino
Nota : No pino 3 do LCD(VO) temos um trimpot de 10K
Uma extremidade ligada a terra
Outra extremidade ligada a 5V(VCC)
O pino central ligado ao Pino 3 do LCD - VO
*/
Pode copiar da linha abaixo em diante e colar que funciona...testei.
No programa temos 3 variáveis que armazenam o horário corrente : hrs, mins e segs ( horas, minutos e segundos).
Elas são setadas para um horário default inicialmente : 08:30:00 ( veja comentário //setando o horario inicial) , mas você pode alterar o programa para começar a contar num horário futuro e quando chegar lá você bota este projeto para funcionar.
Temos uma variável chamada atual que quando ligamos o arduino é carregada com o valor da função millis e ela armazenará a contagem de tempo em milisegundos ( milisegundos = segundo / 1000 ).
A contagem será feita subtraindo o valor da função millis da variável atual.
Ou seja, o programa conta o tempo transcorrido subtraindo de millis da variável atual e quando dá mais de 1000
ele soma 1 na variável segundos e coloca o valor da variável atual com o valor da função millis.
Quando a diferença da contagem do millis e da variável atual for maior ou igual a 1000 milisegundos entre as duas variáveis significa que passou 1 segundo e o programa soma 1 em segundos.
É somado 1000 a variável atual para indicar que estamos um segundo depois do que era antes.
É feita a verificação se segundo são maiores que 59 e se for zera os segundos e soma um em minutos.
É feita uma verificação se minutos é maior que 59 e se for zeramos os minutos e somamos um a variável horas.
É feita uma verificação em horas e se for maior que 23 zeramos as horas. Note que para mudar o relógio de 24 horas para 12 horas basta alterar esta comparação mas sugiro que coloque uma indicação de antes do meio dia e depois do meio dia.
Se você entendeu a explicação acima adicione a função de despertador ao relógio. Para isto basta criar as variáveis com o horário a despertar e quando chegar o horário fazer uma saída do arduino acender um led ou disparar uma campainha ou buzzer.
Na sequencia desse projeto mostrarei como ajustar o horário.