Utilizando o módulo Display 7 Segmentos para Relógio
Autor: Eletrodex eletrônica | Publicado: 2015-06-09T09:33:00-03:00

Hoje falaremos sobre como realizar a interface entre o Módulo Display 7 Segmentos para Relógio e o 
Modulo DS1302 relógio em tempo real para arduino que em conjunto possibilitam a elaboração de um relógio bastante simples de construir, que com os ajustes adequados, pode realizar diversas tarefas, que podem ser iniciadas em uma determinada hora, a ser programada previamente.
Na demonstração abaixo, o Arduino está também conectado a um Módulo Relé 5V 1 canal, que será utilizado para acionar uma lâmpada do tipo "Olho de Boi", bastante utilizada para indicar se um sistema está energizado pela rede CA convencional.
Na montagem, o Arduino irá acionar o Relé, acendendo a lâmpada em um determinado horário, e apagando-a após um determinado intervalo de tempo.
Para a montagem, serão necessários os seguintes itens:


- Arduino Uno
- Shield Placa Expansora para Arduino UNO
- Modulo DS1302 relógio em tempo real para arduino
- Módulo Display 7 Segmentos para Relógio
- Módulo Relé 5V 1 canal
- Cabo de força rabicho 2 pinos paralelo c/1,5M
- Lâmpada tipo "Olho de Boi"
- Fios para ligação (Sugestão: Cabo Jumper MACHO/FÊMEA 20cm 40 vias)




Arduino Uno





Shield Placa Expansora para Arduino UNO




Modulo DS1302 relógio em tempo real para arduino






Módulo Display 7 Segmentos para Relógio





Módulo Relé 5V 1 canal



As Conexões devem ser feitas da seguinte forma:
Módulo RTC &nbsp; &nbsp; | &nbsp; &nbsp;   Arduino
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     GND &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;     |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      GND
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     VCC &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;      | &nbsp; &nbsp; &nbsp;      5v
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     SCK &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;      | &nbsp; &nbsp;&nbsp;     D6
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I/O &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;      | &nbsp; &nbsp; &nbsp;      D7
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     RST &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;      |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      D8

Módulo 7Seg &nbsp; &nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; Arduino
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     GND &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;      | &nbsp; &nbsp; &nbsp;      D2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     VCC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;     | &nbsp; &nbsp; &nbsp;      D3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     DIO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;      | &nbsp;&nbsp; &nbsp;&nbsp;     D4
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     CLK &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;     |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      D5

Módulo Relé &nbsp; &nbsp;&nbsp;  | &nbsp; &nbsp;  Arduino
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     IN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;       |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;      D12
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     GND &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;      | &nbsp; &nbsp; &nbsp;     GND
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;     VCC &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;      | &nbsp; &nbsp; &nbsp;      5v




Diagrama de Conexão



O cabo de força deve ser conectado à rede elétrica, sendo que um dos fios deve ser diretamente conectado à lampada e o outro deve passar pelo terminal C do Relé. O outro fio da lâmpada deve ser conectado ao terminal NO do Relé.
Confira um vídeo mostrando o funcionamento do projeto.
Foi configurado para ativar o relé as 17:40 e permanecer aceso por um minuto.




Baixe aqui o sketch com a programação do Arduino para esse projeto.
Segue abaixo o código fonte utilizado nesse projeto.

 //############### ELETRODEX ELETRÔNICA ###############  
 // Programa de interface entre o Módulo RTC   
 // e o Módulo Display 7 Segmentos para Relógio  
 //   
 // As Conexões devem ser feitas da seguinte forma:  
 // Módulo RTC  |  Arduino  
 //   GND   |   GND  
 //   VCC   |   5v  
 //   SCK   |   D6  
 //   I/O   |   D7  
 //   RST   |   D8  
 //  
 // Módulo 7Seg | Arduino  
 //   GND   |   D2  
 //   VCC   |   D3  
 //   DIO   |   D4  
 //   CLK   |   D5  
 //  
 // Módulo Relé | Arduino  
 //   IN    |   D12  
 //   GND   |   GND  
 //   VCC   |   5v  
 #include &lt;virtuabotixRTC.h&gt; // Carrega a biblioteca virtuabotixRTC  
 #include &lt;TimerOne.h&gt;    // Carrega a biblioteca TimerOne  
 #include "TM1637.h"     // Carrega a biblioteca TM1637  
 #define ON 1  
 #define OFF 0  
 virtuabotixRTC myRTC(6, 7, 8);        // Determina os pinos ligados ao modulo myRTC(clock, data, rst)  
 int8_t TimeDisp[] = {0x00, 0x00, 0x00, 0x00}; // Define a forma como serão mostrados os numeros no 7seg  
 unsigned char ClockPoint = 1;         // Inicializa a variavel que controla o ":" do Relógio  
 unsigned char Update;  
 unsigned char halfsecond = 0;  
 unsigned char second;  
 unsigned char minute;  
 unsigned char hour;  
 #define CLK 5                 // Determina os pinos de clock e dados do módulo Display 7seg (pode ser alterado)    
 #define DIO 4  
 TM1637 tm1637(CLK, DIO);           // Inicializa o módulo Display 7seg  
 void setup()  
 {  
  Serial.begin(9600);  
  pinMode(2, OUTPUT);             // Inicializa pino Digital 2 como saída  
  pinMode(3, OUTPUT);             // Inicializa pino Digital 3 como saída  
  pinMode(12, OUTPUT);            // Inicializa pino Digital 12 como saída  
  digitalWrite(2, LOW);            // Configura o pino 2 em 0v (necessário para alimentação do Módulo 7seg, mas pode ser alterado)  
  digitalWrite(3, HIGH);           // Configura o pino 3 em 5v (necessário para alimentação do Módulo 7seg, mas pode ser alterado)  
  tm1637.set();  
  tm1637.init();  
  Timer1.initialize(500000);//timing for 500ms  
  Timer1.attachInterrupt(TimingISR); //declare the interrupt serve routine:TimingISR  
 // Informacoes iniciais de data e hora  
 // Apos setar as informacoes, comente a linha abaixo  
 // (segundos, minutos, hora, dia da semana, dia do mes, mes, ano)  
 // myRTC.setDS1302Time(30, 11, 16, 2, 8, 6, 2015);  
 }  
 void loop()  
 {  
  myRTC.updateTime();            // Le as informacoes do CI  
  TimeUpdate();               // Atualiza as variáveis que controlam o Display 7seg  
  tm1637.display(TimeDisp);         // Comanda o módulo 7seg para mostrar as variaveus atualizadas acima.  
  Serial.print("Data : ");          // Imprime as informacoes no serial monitor  
  imprime_dia_da_semana(myRTC.dayofweek);  // Chama a rotina que imprime o dia da semana  
  Serial.print(", ");  
  Serial.print(myRTC.dayofmonth);  
  Serial.print("/");  
  Serial.print(myRTC.month);  
  Serial.print("/");  
  Serial.print(myRTC.year);  
  Serial.print(" ");  
  Serial.print("Hora : ");  
  if (myRTC.hours &lt; 10)           // Adiciona um 0 caso o valor da hora seja &lt;10  
  {  
   Serial.print("0");  
  }  
  Serial.print(myRTC.hours);  
  Serial.print(":");            // Adiciona um 0 caso o valor dos minutos seja &lt;10  
  if (myRTC.minutes &lt; 10)  
  {  
   Serial.print("0");  
  }  
  Serial.print(myRTC.minutes);  
  Serial.print(":");  
  if (myRTC.seconds &lt; 10)         // Adiciona um 0 caso o valor dos segundos seja &lt;10  
  {  
   Serial.print("0");  
  }  
  Serial.println(myRTC.seconds);  
  ClockPoint = (~ClockPoint) &amp; 0x01;    // Inverte o estado do ":" do relógio  
  despertador();  
  delay( 1000);  
 }  
 void despertador()  
 {  
 if (hour==17 &amp;&amp; minute==19)  
 {  
  digitalWrite(12, LOW);   
 }  
 else  
 {  
  digitalWrite(12, HIGH);   
 }  
 }  
 void imprime_dia_da_semana(int dia)  
 {  
  switch (dia)  
  {  
   case 1:  
    Serial.print("Domingo");  
    break;  
   case 2:  
    Serial.print("Segunda");  
    break;  
   case 3:  
    Serial.print("Terca");  
    break;  
   case 4:  
    Serial.print("Quarta");  
    break;  
   case 5:  
    Serial.print("Quinta");  
    break;  
   case 6:  
    Serial.print("Sexta");  
    break;  
   case 7:  
    Serial.print("Sabado");  
    break;  
  }  
 }  
 void TimingISR()  
 {  
  halfsecond ++;  
  Update = ON;  
  if (halfsecond == 2) {  
   second = (myRTC.seconds);    // Sincroniza as variáveis dos segundos, no RTC e no 7seg  
   minute = (myRTC.minutes);    // Sincroniza as variáveis dos minutos, no RTC e no 7seg  
   hour = (myRTC.hours);      // Sincroniza as variáveis das horas, no RTC e no 7seg  
   halfsecond = 0;  
  }  
  // Serial.println(second);  
 }  
 void TimeUpdate(void)        // Rotina de comando do Display 7seg  
 {  
  if (ClockPoint)tm1637.point(POINT_ON);  
  else tm1637.point(POINT_OFF);  
  TimeDisp[0] = hour / 10;  
  TimeDisp[1] = hour % 10;  
  TimeDisp[2] = minute / 10;  
  TimeDisp[3] = minute % 10;  
  Update = OFF;  
 }  



Conte-nos suas experiências utilizando os produtos adquiridos em&nbsp; nossa loja!

Até o próximo artigo!