Pular para o conteúdo principal

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!

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. GND DO DISPLAY NO D2 ISSO QUEIMA DISPLAY?

    ResponderExcluir
  4. boa noite.
    onde consigo essas bibliotecas?


    ResponderExcluir
  5. Este comentário foi removido pelo autor.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Controlando LED via Bluetooth utilizando o Módulo HC-05

Hoje abordaremos uma breve demonstração de conexão do Módulo Bluetooth HC-05 Master/Slave com um dispositivo externo, e após a conexão utilizar o dispositivo para controlar um LED. A Placa Base utilizada como controladora é a Arduino Uno , que foi utilizada em conjunto com o Protoshield compatível com a mesma. Todos os itens utilizados podem ser adquiridos em nossa loja . Note que o Módulo Bluetooth HC-05 Master/Slave possui níveis de tensão de alimentação e operação diferentes, sendo que pode ser alimentado com  uma tensão entre 3,3v e 6v (no projeto foi alimentado com 5v, direto de um dos pinos do Arduino Uno ), mas a sua tensão de operação é de 3,3v. IMPORTANTE:    O Arduino consegue reconhecer a tensão de 3,3v no terminal RX como nível lógico alto, mas somente fornece 5v no terminal Tx como nível lógico alto. Portanto, se for utilizar os terminais Rx e Tx para a comunicação com os terminais Tx e Rx do HC-05,  o terminal Tx do HC-05 pode ser conectado diretamente ao ter

Como programar com Programador KIT 3.5 para PIC

Nesta postagem iremos falar sobre o Programador KIT 3.5 O Programador KIT 3.5 é um programador para microcontroladores PIC bastante completo, até o momento compatível com  mais de 600 dispositivos da linha de microcontroladores da Microchip, incluindo a nova linha dsPIC. (Confira aqu i a lista com os microcontroladores compatíveis com o Kit 3.5) Permite a programação diretamente na placa (ICSP) ou então através de conectores ZIF (não inclusos). Detalhe para a interface ICSP Com ele é possível gravar (programar), ler, verificar e copiar os códigos dos microcontroladores, através do software gratuito PicKit 3 Programmer ( instruções de uso ), uma vez que ele é totalmente compatível com o PICkit3. Lembrando que este software é apenas para a gravação do arquivo HEX no seu microcontrolador, sendo que é necessário gerar esse arquivo em um compilador de sua escolha. Além disso, é possível utilizá-lo como ferramenta de depuração (debug) através do software MPLAB. Caract

Utilizando o Programador USB para PIC K150

Nessa postagem iremos demonstrar a utilização do Programador USB para PIC K150 O gravador possui um soquete do tipo ZIF (ZIF - Zero Insertion Force - é um soquete com uma alavanca, que permite a colocação e a retirada dos microcontroladores sem risco de danificar seus terminais) para a programação dos microcontroladores. Conta também com um conector para a programação ICSP (In Circuit Serial Programming, que será abordada futuramente em outra postagem, pois é necessário que se faça algumas adaptações no circuito a ser programado). O programador é controlado pelo PIC16F628A, e no site do fabricante do gravador é possível encontrar informações sobre como atualizar o firmware do gravador, para possibilitar a gravação de mais dispositivos. Instalação do Programador USB para PIC K150 Se você estiver utilizando o Windows 7/Vista/XP, o driver deve ser instalado normalmente, sem que seja necessária a interferência do usuário. Caso esteja utilizando o Windows 8/8.1, o processo é um po