terça-feira, 9 de junho de 2015

Utilizando o módulo Display 7 Segmentos para Relógio

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     |     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


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 <virtuabotixRTC.h> // Carrega a biblioteca virtuabotixRTC  
 #include <TimerOne.h>    // 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 < 10)           // Adiciona um 0 caso o valor da hora seja <10  
  {  
   Serial.print("0");  
  }  
  Serial.print(myRTC.hours);  
  Serial.print(":");            // Adiciona um 0 caso o valor dos minutos seja <10  
  if (myRTC.minutes < 10)  
  {  
   Serial.print("0");  
  }  
  Serial.print(myRTC.minutes);  
  Serial.print(":");  
  if (myRTC.seconds < 10)         // Adiciona um 0 caso o valor dos segundos seja <10  
  {  
   Serial.print("0");  
  }  
  Serial.println(myRTC.seconds);  
  ClockPoint = (~ClockPoint) & 0x01;    // Inverte o estado do ":" do relógio  
  despertador();  
  delay( 1000);  
 }  
 void despertador()  
 {  
 if (hour==17 && 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  nossa loja!
Até o próximo artigo!

4 comentários:

  1. Olá Amigos da Eletrodex, utilizei este código em um projeto e funcionou tudo como descrito, parabéns. Agora gostaria de saber se vocês podem me ajudar a acionar um relé com uma contagem regressiva utilizando os mesmos componentes deste projeto. Tipo contagem de 10 segundos e quando o cronometro zerar o led acende.

    ResponderExcluir
  2. Olá Amigos da Eletrodex, utilizei este código em um projeto e funcionou tudo como descrito, parabéns. Agora gostaria de saber se vocês podem me ajudar a acionar um relé com uma contagem regressiva utilizando os mesmos componentes deste projeto. Tipo contagem de 10 segundos e quando o cronometro zerar o led acende.

    ResponderExcluir
  3. boa noite.
    onde consigo essas bibliotecas?


    ResponderExcluir