Em diversos dispositivos como computador, microondas, televisão e entre outros, utiliza-se a data e a hora para realização de alguns eventos. Logo, por meio dessas variáveis, é possível acionar e desligar cargas, monitorar variáveis dentro de um intervalo de tempo e realizar diversas outras atividades. O post de hoje é “Relógio Arduino: Construa o Seu”.
Assim, para a realização dessas atividades, necessitamos implementar uma função temporizadora ou utilizar um chip que funcione como um relógio. Portanto, para solucionar essa necessidade, é possível utilizar um CHIP Relógio de Tempo Real (Real Time Clock – RTC) e construir um relógio digital. Desse modo, poderemos aplicá-lo em qualquer dispositivo que necessite contar data e hora.
Trata-se de um relógio digital utilizando o chip RTC DS1307, para contar hora e data e apresentar as informações no display LCD 16×2. Além disso, o teclado matricial será utilizado para configurar data e hora e o controle será desenvolvido por meio do Arduino. O relógio desenvolvido é apresentado na Figura 1.
Para o desenvolvimento do Relógio Digital, utilizaremos diversos periféricos conectados ao Arduino, conforme apresentados no esquema eletrônico da Figura 2.
- Compreender o funcionamento do relógio de tempo real;
- Implementar uma função para ajuste de data e hora do relógio de tempo real;
- Implementar funcionalidade para exigir que o usuário configure a data e hora na primeira vez que o dispositivo é ligado.
A seguir, juntamente com o circuito eletrônico, disponibilizamos a lista completa dos componentes eletrônicos utilizados nesse projeto.
Materiais para o Projeto Relógio Arduino
Todos os materiais apresentados a seguir estão disponíveis em nosso site. Em caso de dúvidas, clique em Saiba mais e verifique os dados técnicos de cada componente utilizado.
- 01 x Relógio de Tempo Real DS1307
- 01 x Teclado Matricial 4 x 4
- 01 x Display LCD 16 x 2
- 01 x Arduino UNO R3
- 01 x Protoboard 830 furos
- 01 x Jumpers Rígidos
- 01 x Jumpers Flexíveis
- 04 x Resistor 10kR
- 01 x Potenciômetro 10kR
Lógica Principal do Relógio Digital Arduino
- Ser obrigatório ajustar data e hora na primeira vez que o relógio é inicializado;
- Capacidade de ajuste de data e hora;
- Apresentação em tempo real da data e hora na tela do display LCD 16 x 2.
De acordo com os pontos acima, temos a seguinte solução apresentada no código abaixo.
Primeiramente, foram realizadas todas as inclusões de bibliotecas, definição de objeto LCD e declaração de variáveis. Agora, observe a definição do valor 120 como MEMORIA. Esse valor será utilizado para manipulação de infomação na memória EEPROM. Esse processo de manipulação será apresentado durante a explicação da lógica na função loop.
Em seguida, declaramos o protótipo de duas funções: LerTeclado(void) e AjustarHora(void). Em suma, essas duas funções serão utilizadas para rastrear a tecla digitada e ajustar a data e hora, respectivamente.
[crayon-673f8967d8e91528947435/]
Logo após, realizamos as configurações na função void setup(). Primeiramente, inicializamos o nosso Relógio de Tempo Real e, em seguida, configuramos os pinos de conexão do Teclado Matricial.
Ajuste Obrigatório na Primeira Inicialização do Relógio
Por fim, entramos na função loop e realizamos o primeiro teste de inicialização. De acordo com a condição, verifica-se a posição 120 (MEMORIA) da memória EEPROM, a fim de saber se seu valor é igual a 73.
[crayon-673f8967d8e96069641364/]
Se o valor for diferente, significa que é a primeira vez que o usuário liga o sistema. Logo, a função AjustarHora será chamada, para que o usário possa configurar data e hora, conforme apresentado na Figura 3.
Desse modo, antes de gravar o código do projeto, execute o código para zerar todas as posições da memória EEPROM. Portanto, por meio dessa limpeza, ele irá entrar automaticamente na função, quando o usuário ligar o relógio pela primeira vez.
Portanto, após a apresentação desta tela, o usuário é obrigado a ajustar hora, a data e o dia da semana. Por fim, após esse processo, o sistema escreve o valor 73 na posição 120 (MEMORIA). Desse modo, o sistema saberá que os parâmetros de tempo foram configurados na inicialização.
Em seguida, o sistema realiza a leitura dos dados de tempo do Relógio de Tempo Real e salva no vetor DataTime.
Este vetor possui um total de 7 posições. Portanto, podemos armazenar o Ano, Mês, Data, Dia da Semana, Horas, Minutos e Segundos, respectivamente, da posição 0 à posição 6.
Logo, os valores são impressos nas strings tempo e data e, em seguida, são apresentados no LCD a cada 1 segundo.
Por fim, realiza-se a leitura do teclado, a fim de verificar se o usuário pressionou a letra A. Caso a letra A esteja pressionada, o sistema chamará a função AjustarHora(). Desta forma, permitirá o usuário ajustar a data e hora em qualquer momento.
Agora, será apresentada toda a estrutura interna da função AjustarHora() e sua comunicação com o relógio de tempo real.
Função de Ajuste de Hora e Data do Relógio de Tempo Real
A função de ajuste de hora e data é a parte principal do projeto. Logo, por meio dela, o sistema realiza o processo de leitura dos dados do usuário e a comunicação com o relógio de tempo real. Portanto, nossa função é dividida em 3 partes:
- Ajuste da Hora;
- Ajuste da Data;
- Ajuste do Dia da Semana.
Primeiramente, foram declaradas todas as variáveis utilizadas na função. Cada variável será apresentada ao longo da explicação da função.
Após isto, o próximo passo foi realizar a aquisição dos dados do CHIP. Portanto, esses dados serão armazenados no vetor DadosTempo de 7 posições e serão impressos nas strings tempo e data. Por meio dessas strings, os dados serão apresentados no LCD (Linha 018 a 021).
Nas linhas 023 a 030 os dados do vetor DadosTempo serão copiados para o vetor auxiliar Times. Através deste vetor, será possível manipular os dados lidos. Por fim, o sistema separa os dados de horas e minutos em dezenas e unidades. Dessa forma, cada dígito poderá ser manipulado na etapa de configuração das horas.
[crayon-673f8967d8e98526271197/]
Portanto, o sistema entrará no loop do while(), apresentará a mensagem “Ajustar Horas” (Linha 040 a 043). Em seguida, apresentará a hora instantânea no LCD, conforme apresentado na Figura 4.
A seguir, você aprenderá o processo de leitura do teclado matricial.
Processo de Leitura do Teclado Matricial 4 x 4
Após a apresentação da mensagem, o fluxo entrará no laço do while() e iniciará o processo de leitura do teclado.
A leitura é realizada por meio da função LerTeclado(). Esta função é responsável por realizar a varredura do teclado matricial e retornar um valor para cada tecla digitada. Caso nenhuma tecla esteja pressionada, a função retorna o valor 16.
Na Tabela a seguir, é apresentado o valor retornado por cada tecla utilizada.
Caso queira compreender o processo de uso e implementação da função, acesse o Artigo de Teclado Matricial de Membrana 4 x 4.
Logo, após a leitura e atribuição do valor à variável number, o sistema verifica a condição da linha 057. Por meio desta condição, avalia-se 3 pontos:
- Verifica se o valor retornado é um número entre 0 e 9;
- Verifica se a variável controle é igual a 1. Esta variável é utilizada para controlar o acesso do fluxo de código internamente à condição. Ela permite que o fluxo entre apenas uma vez, quando o usuário pressiona um número.
- Verifica se o valor de cont é igual a 4. Essa variável é utilizada para controlar a quantidade de dígitos inseridos pelo usuário. Pois são 2 dígitos para horas e 2 dígitos para minutos. Desse modo, evita-se que o usuário digite mais do que 4 valores.
Portanto, caso a condição seja verdadeira, o valor digitado será armazenado no vetor digitos. Dessa maneira, observa-se que a variável cont aponta sempre para as posições do vetor. Logo, após o incremento da variável cont, atribui-se 1 à variável controle.
Já que a variável controle possui valor igual a 1, o fluxo de código não entrará na condição. Desse modo, o sistema irá ler o número pressionado uma única vez.
Opção para reiniciar o processo de entrada de novos números no sistema
Em seguida, há uma condição na Linha 074. Esta condição é utilizada para verificar quando nenhuma tecla está sendo pressionada pelo usuário.
Portanto, será atribuído valor 0 à variável controle, para indicar que o sistema poderá entrar na condição novamente. Ou seja, o sistema está habilitado a receber um novo valor numérico na condição de leitura de números.
Em seguida, temos a condição para limpar os valores de hora digitados pelo usuário, caso o usuário pressione a tecla C. Isto serve para casos em que o usuário digitou algum valor errado ou deseja limpar a tela. O resultado é apresentado na Figura 5. Analisando a condição, é possível ver que o vetor digitos e a tela terão seus valores zerados.
Finamente, há a condição de verificação do laço do while, para verificar se o usuário pressionou a tecla D (Valor 13). Caso a tecla D esteja pressionada, o fluxo sairá do laço, formará os valores de hora e minuto. Em seguida, armazenará os valores nas posições 4 e 5 do vetor times, respectivamente.
Validação da Hora e Minuto inseridos pelo Usuário
Após a formação dos dígitos inseridos em hora e minutos, é importante validar os valores digitados. Isto evita que o usuário insira um valor errado no sistema, conforme apresentado na Figura 6.
Após o usuário inserir uma hora válida ou inválida, o sistema irá validar a hora e minuto inseridos. Caso a hora seja inválida, o sistema apresenta a mensagem Hora Inválida, conforme apresentado na Figura 7.
Em seguida, atribuirá o valor 1 à variável Validate. Esta variável é utilizada para sinalizar que a hora digitada foi inválida. Portanto, o sistema irá zerar as 4 posições iniciais do vetor dígitos e voltará para o início. Desse modo, o usuário será obrigado a digitar valores válidos para hora e minuto.
Configuração da Data do Sistema
O processo de configuração da data é semelhante à configuração da hora. A única diferença é que o usuário precisará digitar 6 dígitos: dias, mês e ano.
Agora, observe a Figura 8, onde será apresentada a data atual e permitirá o usuário inserir novos valores de ajuste.
Caso for necessário, o usuário poderá pressionar a tecla C e zerar os valores da data, conforme apresentado na Figura 9.
Por fim, após digitar a nova data do sistema, será feita uma validação. Caso seja inválida, o sistema apresentará a seguinte mensagem conforme apresentada na Figura 10.
Portanto, o usuário é forçado a digitar uma nova data válida. Após inserir uma data válida, o sistema sairá do loop do while e iniciará a etapa de configuração do dia da semana.
Configurando o dia da semana do Relógio Arduino
Os dias da semana são configurados utilizando as teclas A e B. A tecla A é utilizada para avançar de domingo a sábado e a B é utilizada para retornar no sentido contrário. A seguir, temos a porção de código que é utilizada para configurar o dia da semana.
A variável ContDias será incrementada ou decrementada com base nas teclas A e B. Seu valor será utilizado para apontar para as posições do vetor DiaSemana. Portanto, os valores aparecerão na tela e o usuário poderá selecionar o dia correto da semana.
[crayon-673f8967d8e9f647596782/]
A seguir temos a tela de configuração do dia da semana apresentada na Figura 11.
Conclusão
Por meio desse relógio arduino foram implementadas diversas funções, que permitem aprender e implementar recursos inteligentes. Entre esses recursos, destacamos: sistema de validação de horas, de data e sistema de ajuste de hora e data em tempo real de execução.
Além desses recursos, é possível extender a aplicação do relógio arduino para sistemas de automação. Entre esses sistemas que utilizam data e hora, temos: irrigador automático, alerta de uso para fogão, alarme escolar e muitos outros.
O Código desenvolvido encontra-se nesse link e você pode usá-lo para criar novos projetos.
Conheça toda Linha de Produtos Arduino no Site da UsinaInfo.