Font Size

Nesse artigo, você aprenderá a criar um relógio com o Módulo TM1637 com Arduino e o módulo RTC DS1307. O relógio é um dos dispositivos mais utilizados em muitos equipamentos em nossa volta e seu principal objetivo é contar o tempo.

Assim, somos capazes de calcular outros parâmetros importantes em nosso dia a dia, como: velocidade média, alarmes e entre outros e outros dados importantes em nossa rotina.

Agora, iniciaremos a discussão e apresentamos o processo construtivo do relógio – Baixe o Projeto.

Desenvolvimento do Relógio com o Módulo TM1637 com Arduino

O projeto consiste em utilizar dois botões a fim de ajustar a hora e o minuto. Após a configuração, as informações serão enviadas para o RTC DS1307 e serão apresentadas, posteriormente, no display TM1637.

A seguir, apresentamos o circuito do projeto na Figura 1.

relogio-com-o-Modulo-TM1637-com-Arduino
Figura 1 – Circuito do Relógio com Módulo TM1637 e RTC DS1307.

Desse modo, para o desenvolvimento desse projeto necessitaremos da seguinte lista de componentes eletrônicos:

Lista de Componentes Eletrônicos

01 x Arduino Nano
01 x Relógio de Tempo Real DS1307
01 x Módulo TM1637
02 x Botões de Toque 6x6x5 mm
02 x Resistores de 10k
01 x Jumpers

Portanto, por meio desse circuito implementamos a lógica para realizar o controle e o apresentaremos a seguir.

Desenvolvimento da Lógica de Controle

Primeiramente, apresentamos a programação completa do relógio e, a seguir, iniciaremos a discussão passo a passo do projeto.

<code>#include &lt;TM1637Display.h&gt;
#include &lt;DS1307.h&gt;

TM1637Display display(2,3);

bool BotaoHora = 0, BotaoMinuto = 0;
bool  EstadoBotaoHoraAnt = 0, EstadoBotaoMinutoAnt = 0;

int valorfinal;
int DataTime[7];
byte segto = 0x80, hora = 0, minuto = 0;

#define PinoHora 10
#define PinoMinuto 12

void setup()
{
   display.setBrightness(0x0f);
   
   DS1307.begin();
   
   pinMode(5, INPUT);
   pinMode(6, INPUT); 
}

void loop()
{
   DS1307.getDate(DataTime);

   hora = DataTime[4];
   minuto = DataTime[5];
    
   display.showNumberDecEx((hora * 100) + minuto, 0x40, 1, 4, 0);   // 
   dispaying value of hour and minutes on display
   
   BotaoHora = digitalRead(PinoHora);
   BotaoMinuto = digitalRead(PinoMinuto);

   if(BotaoHora == 1 &amp;&amp; EstadoBotaoHoraAnt == 0)
   {
    hora++;
    DS1307.setDate(0,0,0,0,hora,minuto,0);//Ano, Mes, Data do Mes, Dia da Semana, hora, minuto, segundo
    EstadoBotaoHoraAnt = 1;
    
      if(hora &gt; 23)
      {
        hora = 0;   
      }
   }

   if(BotaoHora == 0 &amp;&amp; EstadoBotaoHoraAnt == 1)
   {
    EstadoBotaoHoraAnt = 0;
   }

   if(BotaoMinuto == 1 &amp;&amp; EstadoBotaoMinutoAnt == 0)
   {
    minuto++;
    DS1307.setDate(0,0,0,0,hora,minuto,0);//Ano, Mes, Data do Mes, Dia da Semana, hora, minuto, segundo
    EstadoBotaoMinutoAnt = 1;
    
      if(minuto &gt; 59)
      {
        minuto = 0;   
      }    
   }

   if(BotaoMinuto == 0 &amp;&amp; EstadoBotaoMinutoAnt == 1)
   {
    EstadoBotaoMinutoAnt = 0;
   }
      
}</code>

Inicialmente, realizamos a declaração das bibliotecas dos módulos utilizados e declaramos as variáveis do projeto, conforme apresentado no código a seguir.

<code>#include &lt;TM1637Display.h&gt;
#include &lt;DS1307.h&gt;

TM1637Display display(2,3);

bool BotaoHora = 0, BotaoMinuto = 0;
bool  EstadoBotaoHoraAnt = 0, EstadoBotaoMinutoAnt = 0;

int valorfinal;
int DataTime[7];
byte segto = 0x80, hora = 0, minuto = 0;

#define PinoHora 10
#define PinoMinuto 12</code>

Em seguida, configuramos o brilho do display, inicializamos o relógio de tempo real e foi realizada a configuração dos pinos de I/O dos botões de hora e minuto.

<code>void setup()
{
   display.setBrightness(0x0f);
   
   DS1307.begin();
   
   pinMode(5, INPUT);
   pinMode(6, INPUT); 
}</code>

Posteriormente, iniciamos a lógica principal na função loop. Primeiramente, realizamos a aquisição da hora e data do relógio de tempo real e salvamos no vetor tempo, conforme apresentado abaixo. A função retorna 7 parâmetros de data e hora: segundos, minutos, horas, dia da semana, data, mês e ano.

<code>DS1307.getDate(DataTime);

hora = DataTime[4];
minuto = DataTime[5];</code>

Portanto, os parâmetros de data e hora são retornados na posição 4 e 5 do vetor DataTime e apresentados no Display TM1637.

Apresentando as Horas no Display TM1637

Após a leitura dos valores de hora e minuto, necessitamos apresentar esses valores no módulo display TM1637. Para isto, utilizamos o comando a seguir:

<code>display.showNumberDecEx((hora * 100) + minuto, 0x40, 1, 4, 0);</code>

Logo, esse comando tem a finalidade de exibir um número decimal e realizar o controle de ponto. Para este modelo de display, utilizamos o valor 0x40, para realizar o acionamento dos dois pontos centrais.

Desse modo, transformamos o valor de data e hora em um único valor de 4 dígitos. Por fim, enviamos para o display por meio do comando apresentado e acionamos os dois pontos do relógio através do endereço 0x40, conforme apresentado na Figura 2.

relogio-com-o-Modulo-TM1637-com-Arduino
Figura 2 – Apresentando as Horas no Display TM1637.

Após este comando, realizamos a leitura dos botões de ajuste de hora e minuto.

Portanto, toda vez que qualquer um desses botões forem pressionados, o valor da hora e minuto serão incrementados . Além disso, o sistema permite incremento de hora até 23 e os minutos até 59.

Caso tenha dúvidas, acesse esse artigo e aprenda a implementar a contagem com botões.

Desse modo, caso o valor seja maior, o sistema reinicia a contagem do 0 novamente.

Finalmente, esses valores serão enviados para o relógio RTC, a fim de ajustar uma nova hora estabelecida pelo usuário, conforme apresentado a seguir.

<code>BotaoHora = digitalRead(PinoHora);
BotaoMinuto = digitalRead(PinoMinuto);

   if(BotaoHora == 1 &amp;&amp; EstadoBotaoHoraAnt == 0)
   {
    hora++;
    DS1307.setDate(0,0,0,0,hora,minuto,0); //Ano, Mes, Data do Mes, Dia da Semana, hora, minuto, segundo
    EstadoBotaoHoraAnt = 1;
    
      if(hora &gt; 23)
      {
        hora = 0;   
      }
   }

   if(BotaoHora == 0 &amp;&amp; EstadoBotaoHoraAnt == 1)
   {
    EstadoBotaoHoraAnt = 0;
   }

   if(BotaoMinuto == 1 &amp;&amp; EstadoBotaoMinutoAnt == 0)
   {
    minuto++;
    DS1307.setDate(0,0,0,0,hora,minuto,0);//Ano, Mes, Data do Mes, Dia da Semana, hora, minuto, segundo
    EstadoBotaoMinutoAnt = 1;
    
      if(minuto &gt; 59)
      {
        minuto = 0;   
      }    
   }

   if(BotaoMinuto == 0 &amp;&amp; EstadoBotaoMinutoAnt == 1)
   {
    EstadoBotaoMinutoAnt = 0;
   }</code>

Por fim, o valor de hora e minuto serão apresentados no display após um novo ciclo de execução.

Conclusão

Finalmente, por meio desse circuito implementamos um simples relógio com dois botões, que permitem realizar o ajuste de hora e minuto. Além disso, é possível aumentar a aplicabilidade desse projeto e inserir novas funcionalidades.

Portanto, por meio desse projeto é possível inserir apresentação de data, criação de alarme e entre outros projetos que envolvem o uso do tempo.

0.00 avg. rating (0% score) - 0 votes