Relógio Arduino: Construa o Seu Projeto

Aprenda a como construir seu relógio digital com Arduino e aplique em qualquer projeto que necessita contar hora e data.

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.

 

Desenvolvimento do Relógio Arduino

Para o desenvolvimento do Relógio Digital, utilizaremos diversos periféricos conectados ao Arduino, conforme apresentados no esquema eletrônico da Figura 2.

Esquema Eletrônico do Relógio Digital com Arduino.

Figura 2 – Esquema Eletrônico do Relógio Digital com Arduino.

 

Por meio desse projeto, você será capaz de:
  1. Compreender o funcionamento do relógio de tempo real;
  2. Implementar uma função para ajuste de data e hora do relógio de tempo real;
  3. 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.

Agora, será feita a explicação da lógica implementada no projeto do relógio.


Lógica Principal do Relógio Digital Arduino

Primeiramente, devemos compreender as funcionalidades do nosso relógio digital:
  1. Ser obrigatório ajustar data e hora na primeira vez que o relógio é inicializado;
  2. Capacidade de ajuste de data e hora;
  3. 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.

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.

 

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.

Ajuste de Hora do Relógio de Tempo Real com Arduino e Teclado.

Figura 3 – Ajuste de Hora do Relógio de Tempo Real com Arduino e Teclado.

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:

  1. Ajuste da Hora;
  2. Ajuste da Data;
  3. 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.

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.

Tela de Ajuste das Horas

Figura 4 – Tela de Ajuste das Horas.

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.

Valores Retornados pela Função d Teclado Matricial

Tabela 1 – Valores Retornados pela Função d Teclado Matricial

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:

  1. Verifica se o valor retornado é um número entre 0 e 9;
  2. 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.
  3. 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.

Valores Zerados para Data

Figura 5 – Data Zerada pelo Usuário.

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.

Inserindo Hora Inválida no Sistema.

Figura 6 – Inserindo Hora Inválida no Sistema.

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.

Mensagem de Hora Inválida

Figura 7 – Mensagem de Hora Inválida.

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.

Tela de Ajuste da Data do Relógio

Figura 8 – Tela de Ajuste da Data do Relógio.

 

Caso for necessário, o usuário poderá pressionar a tecla C e zerar os valores da data, conforme apresentado na Figura 9.

Data Zerada pelo Usuário.

Figura 9 – Data Zerada pelo Usuário.

 

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.

Data Inválida

Figura 10 – Data Inválida do Sistema.

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.

 

A seguir temos a tela de configuração do dia da semana apresentada na Figura 11.

Ajuste do dia da Semana

Figura 11 – Ajuste do dia da Semana.

 

Após a seleção do dia da semana, o usuário deve pressionar a tecla D, para finalizar o processo de ajuste.
Em seguida, todos os dados serão transferidos para o RTC DS1307, por meio da função DS1307.setDate. Observe que todos os parâmetros ajustados de Data e Hora são passados como parâmetros na função.
Após a execução desse comando, o fluxo retorna para a função void loop e inicia o processo de apresentação de data e hora.

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.

Categorias
ArduinoProjetos

Técnico em Automação Industrial e graduando do curso de Tecnologia em Mecatrônica Industrial pelo Instituto Federal do Ceará. E, atualmente, trabalha como desenvolvedor de projetos, sistemas inteligentes e criador de conteúdo por meio da empresa Silícios Lab para o seu canal e para o blog da UsinaInfo. Nas horas livres, desenvolve alguns projetos com Microcontroladores e Arduino.
5 Número de Comentários
  • davidson fellipe pena fellipe
    4 agosto 2019 at 23:21
    Deixe seu Comentário

    ual que sketch grande pra um relogim em! rsrs gostaria de saber se teria como fazer isso com o ds1302 e usar apenas 2 botoes um para mode e o outro para set, desde já agradeço pelo post

  • Diego Moreira
    8 agosto 2019 at 15:54
    Deixe seu Comentário

    Oi, Davidson! Sim, ficou bem extenso. Esse sketch ficou grande, pois implementei várias funcionalidades nesse relógio.
    Sobre sua dúvida… Sim. Você pode utilizar o DS1302, porém, você precisa ajustar a sua biblioteca e as funções para esse chip.
    Quanto ao uso de botões, eu acredito que possa ser possível, sim, utilizar dois botões. Porém, você precisa trabalhar bem a lógica de programação.

    Mas toma cuidado para não ocorrer conflito quanto ao uso de botões. Se eu fosse você, utilizaria 3 botões.

    Um para modo – Ele servirá para entrar no modo de ajuste de data e hora;
    Um para ajuste – Ele irá configurar os valores de data e hora;
    Um para Enter – Com esse botão, você apertará para finalizar e salvar os dados de data e hora no seu RTC.

    Espero que eu tenha te ajudado.
    Abraço.

  • Manoel Barros
    31 janeiro 2020 at 18:22
    Deixe seu Comentário

    eu quero entender esse comando
    Bom minha dúvida e esse ele e uma shild específica ou essa memória e interna no próprio controlador ,pois não vi na lista falando nada sobre EEPROM

    • Matheus Gebert Straub
      13 fevereiro 2020 at 12:21
      Deixe seu Comentário

      Bom Dia Manoel! A EEPROM citada já está inclusa no módulo do RTC, para o desenvolvimento deste projeto são necessários apenas os produtos citados na lista.

  • Maximo Izidoro dos Santos
    1 março 2020 at 20:38
    Deixe seu Comentário

    Olá Sr. Diego Moreira, estou tentando montar o teu projeto “Desenvolvimento do Relógio Arduino”

    De onde posso baixar a biblioteca DS1307.h

    Eu baixei do endereço: http://www.rinkydinkelectronics.com/library.php?id=34

    Todavia, parece que não tem acesso, pois, ao compilar, apresenta a msg.:

    “error: expected unqualified-id before ‘.’ token” para:

    DS1307.getDate(DataTime);

    ou para

    DS1307.begin();

    Não consegue buscar essas rotinas dentro da biblioteca.

    Tudo de bom!

    Maximo dos Santos

  • Deixe seu Comentário

    *

    *

    Sobre nós

    Hoje a Usinainfo é um dos maiores ecommerces de Ferramentas, Peças para Eletrônica, Componentes Eletrônicos, Sensores e Arduino do Brasil, contando com uma grande diversidade de produtos na linha de eletrônica.

    Sugestões

    Artigos Relacionados