Básico - Projeto 59

Contador de cliques com display 7 segmentos

Objetivo

Neste projeto vamos criar um contador de cliques usando um display de 7 segmentos e dois botões. O programa inicia no número zero. Ao clicar no botão direito, incrementa em +1 o valor no display. Ao clicar no botão esquerdo, decrementa -1 o valor no display.

Observações:

1. Neste projeto você poderá utilizar um display catodo comum ou anodo comum..

2. Antes de iniciar este projeto, recomendo que veja o seguinte tutorial: Projeto 55 - Usando display 7 segmentos com Arduino (código otimizado), onde mostramos como usar no código um array multidimensional (matriz).

Display de 7 segmentos: é um componente eletrônico utilizado para apresentar informações visuais. Possui apenas 1 dígito, formado por 7 segmentos de leds acionados de forma independente mais o led do ponto que fica no canto inferior direito do display. Desta forma é possível formar caracteres de 0 a 9, hexadecimais de A a F, e algumas letras do alfabeto latino. O display e formado pelo arranjo de LEDs (diodos emissores de luz) encapsulados em um invólucro apropriado, controlados individualmente, que podem estar acesos ou apagador, formando assim o caractere desejado. É possível encontrar no mercado, displays de catodo comum e de anodo comum.

Display de LED de Sete Segmentos

Aplicação

Para fins didáticos e projetos com relógios digitais e equipamentos com contadores.

Componentes necessários

Protoboard Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v

No mínimo utilizar protoboard com 415 pontos

Jumpers Kit cabos ligação macho / macho 1  
Display de 7 segmento Display de 7 segmentos (catodo comum) 1 Display de 7 Segmentos

Somente utilizar display catodo comum com CD4511.

O display poderá ser de qualquer cor.

datasheet

Resistor Resistor 1

1 Resistor de 150Ω ou superior

Push Button Push button 6X6X5mm 1  
Arduino UNO R3 Arduino UNO 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.

Montagem com display 7 segmentos (catodo comum) - Simulação

Atenção

1. Conheça a disposição dos pinos do display:

2. Faça a ligação do display com o arduino conforme a tabela abaixo:

ARDUINO DISPLAY 7 SEGMENTOS SEGMENTOS
Pino 2 Pino 7 A
Pino 3 Pino 6 B
Pino 4 Pino 4 C
Pino 5 Pino 2 D
Pino 6 Pino 1 E
Pino 7 Pino 9 F
Pino 8 Pino 10 G
Pino 9 Pino 5 DP (PONTO) - opcional

3. Para a montagem do circuito é necessário saber se o display de 7 segmentos utilizado é catodo comum ou anodo comum. Esta informação você poderá obter no momento da compra do componente ou através da datasheet do mesmo.

2. Se você não possui a datasheet e não sabe se o display é catodo comum ou anodo comum, veja a seguir como identificar um display de 7 segmentos:

2.1. Conecte o pino 8 (ou o pino 3) do display de 7 em uma fonte de 3,3V ou 5V (colocar um resistor de 150 ohms ou superior em série) e o pino 5 ao terra (por exemplo, o GND do Arduino). Veja a montagem abaixo:

2.2. Se tivermos um display de 7 segmentos anodo comum o led do ponto, como mostra a figura acima, se acenderá.

2.3. Se tivermos um display de 7 segmentos catodo comum o led não acenderá (lembre-se de que, em um led, a corrente flui em um única direção, ou seja, o led possui polaridade).

3. Agora que já foi identificado o componente display catodo comum, vamos entender como funciona o display de 7 segmentos.

3.1. Como já vimos, o display de 7 segmentos é formado por leds dos 7 segmentos e do ponto. De acordo com a imagem abaixo, observe que os pinos 3 e 8 são referentes à conexão do display com o Vcc (5V) ou (3,3V) do Arduino para display anodo comum e com o GND do Arduino para display catodo comum. Já os demais pinos são referentes aos leds dos segmentos A, B, C, D, E, F, G e DP (ponto):

Portanto, o pino 1 controla o segmento E do display, o pino 2 o segmento D e assim por diante. Desta forma se quisermos mostrar o número 1, por exemplo, deveremos ligar apenas os segmentos B e C. Portanto, a combinação de de 0's e 1's na entrada do display representam os número e letras visualizados. Veja abaixo a combinação dos bits que formarão os decimais:

Agora, veja a combinação dos bits que formarão as letras:

3.2. Para ligarmos os leds do display catodo comum ou anodo comum, precisaremos conectar os pinos 3 ou o 8 na porta GND do Arduino:

Display Catodo Comum: Acionar por nível lógico alto em cada segmento, ou seja, HIGH ou 1. Os pinos 3 ou o 8 deverão estar conectados no GND do Arduino.

Atenção: A ligação entre o display e o GND do Arduino deve ser precedida de um resistor para evitar danos aos leds do componente.

Display Anodo Comum: Acionar por nível lógico baixo em cada segmento, ou seja, LOW ou 0. Os pinos 3 ou o 8 deverão estar conectados no Vcc (5V) do Arduino.

Atenção: A ligação entre o display e o Vcc do Arduino deve ser precedida de um resistor para evitar danos aos leds do componente.

4. Para calcular o valor do resistor necessário para o nosso componente vamos utilizar a lei de Ohm, sendo:

4.1. Dados do display do nosso exemplo (valores retirados da datasheet do componente utilizado):

  • Tensão direta: 2,2 V (p/ segmento)
  • Corrente máxima: 30 mA (p/ segmento)

4.2. Desta forma, utilizando-se a tensão de 5,0V do Arduino, teremos:

R = (5,0V - 2,2V) / 0,03A => R = 93,33 Ω => Portanto, por segurança, utilizaremos um resistor de no mínimo 150 Ω.

4.3 . Se você não tiver os dados do componente, utilize um resistor maior que 150 Ω. Lembre-se, quanto maior o valor do resistor menor será a intensidade do brilho dos leds do display.

Atenção: Para evitar danos no componente, não utilize resistores menores que 150 Ω. Para saber mais como calcular o resistor, leia Teste 02 - Leds ligados em série e em paralelo.

5) Para otimizarmos o código deste projeto vamos utilizar uma matriz (array multidimensional) condicionando os dígitos de 0 a 9 com os segmentos de led do display. Portanto, o array multidimensional deverá ser definido como:

byte displaySeteSeg[10][7] = { 
 { 1,1,1,1,1,1,0 },  //DIGITO 0
 { 0,1,1,0,0,0,0 },  //DIGITO 1
 { 1,1,0,1,1,0,1 },  //DIGITO 2
 { 1,1,1,1,0,0,1 },  //DIGITO 3
 { 0,1,1,0,0,1,1 },  //DIGITO 4
 { 1,0,1,1,0,1,0 },  //DIGITO 5
 { 1,0,1,1,1,1,1 },  //DIGITO 6
 { 1,1,1,0,0,0,0 },  //DIGITO 7
 { 1,1,1,1,1,1,1 },  //DIGITO 8
 { 1,1,1,0,0,1,1 }  //DIGITO 9
};

 Atenção: Observe que os valores de "l" e "d" devem ser 0 ou 1, dependendo do display utilizado (catodo comum ou anodo comum).

6) Veja abaixo como realizamos a montagem do nosso projeto utilizando um protoboard. Observe que utilizamos um display catodo comum e ligamos o pino 8 no GND do Arduino.

Sketch do projeto

1. Faça o dowload e abra o arquivo projeto59.ino no IDE do Arduino:

ATENÇÃO: O código apresentado foi desenvolvido para um display catodo comum. Para alterar o projeto para um display anodo comum, altere as linhas 10 e 11, colocando as duas barras de comentários na linha 10 e retirando as 2 barras da linha 11. Também não esqueça de alterar o circuito, conectando o pino 3 do display no Vcc (5V) do Arduino.

Ou se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************
*
*    Projeto 59: Contador de cliques com display 7 segmentos - Arduino
*                 http://squids.com.br/arduino                
*
*******************************************************************************/

// Variaveis liga e desliga p/ display 7 segmentos
const int l = 1, d = 0; // Display 7 segmentos (catodo comum)
//const int l = 0, d = 1; // Display 7 segmentos (anodo comum)

byte displaySeteSeg[10][7] = { 
 { l,l,l,l,l,l,d },  //DIGITO 0
 { d,l,l,d,d,d,d },  //DIGITO 1
 { l,l,d,l,l,d,l },  //DIGITO 2
 { l,l,l,l,d,d,l },  //DIGITO 3
 { d,l,l,d,d,l,l },  //DIGITO 4
 { l,d,l,l,d,l,l },  //DIGITO 5
 { l,d,l,l,l,l,l },  //DIGITO 6
 { l,l,l,d,d,d,d },  //DIGITO 7
 { l,l,l,l,l,l,l },  //DIGITO 8
 { l,l,l,d,d,l,l }  //DIGITO 9
};

byte btesq=12; // botão decremento (esquerda)
byte btdir=11; // botão incremento (direita

int number = 0; // número a ser mostrado no display deve ser int (inteiros posit. e negat.)
 
void setup(){
  for (int i = 2; i < 10; i++)
  {
    pinMode(i, OUTPUT); //conexão pinos dos 7 segmentos + o ponto
  }

  pinMode(btesq, INPUT_PULLUP);
  pinMode(btdir, INPUT_PULLUP);
}

void loop() {

  if (digitalRead(btdir) == 0 ){ // verifica se o botão direito foi acionado     
    number += 1;    
    while (digitalRead(btdir) == 0) {} // loop vazio - aguarda soltar o botão (evita a númeração constante
  }

  if (!digitalRead(btesq)){ // verifica se o esquerdo foi acionado    
    number -= 1;             
    while (!digitalRead(btesq)) {} // loop vazio - aguarda soltar o botão (evita a númeração constante
  }

  // reseta em caso de estouro (<0 ou >9)
  if (number < 0) {number = 9;}  
  if (number > 9) {number = 0;}
    
  
  // mostra o número no display  
  for (int j = 2; j < 9; j++) {
    digitalWrite(j, displaySeteSeg[number][j-2]);
  }
  delay(150);   // evitar que o botão seja acionado em um mesmo clique
}

ATENÇÃO: Se o display não acender verifique todas as conexões dos segmentos.

Vídeo

Como o projeto deve funcionar

1. Ao iniciar o programa, o display irá mostrar o número 0.

2. Ao pressionar o botão direito o valor do display será incrementado em +1.

3. Ao clicar o botão esquerdo,  valor do display será decrementado em -1.

4. Quando o valor for maior que nove, o display retornará ao valor 0.

5. Da mesma forma, quando e quando o valor for menor que 0, o display retornará 9 sem interromper a contagem.

Desafios

Com base neste projeto, resolva o seguinte desafio:

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Compartilhe:

Doações

Contribua pra manter o site online :)

Inscreva-se no canal Squids

Squids Arduino News

Desafio 86 - Projeto hub009 Piscar led de acordo com o potenciômetro usando millis() Com base no Hub 009 - Piscar led de acordo com o potenciômetro em intervalos de 0.5 a 3 segundos - Arduino r...

Básico - Hub 009 Piscar led no intervalo de 0.5 a 3 segundos conforme potenciômetro   Sugerido por: Jhulio Cesar Objetivo Faça com que um LED pisque em função da posição do potenciômetro, ...

Desafio 85 - Projeto 95 Acionando um motor DC por um sensor de som Com base no Projeto 95 - Usando o sensor de som para acender e apagar um led - Arduino resolva os seguintes desafios: 1. A...

Operador Ternário na programação com Arduino Objetivo Nesta dica vamos mostrar como usar o operador ternário na programação com Arduino. O operador ternário é uma alternativa elegante e compacta...

Básico - Projeto 95 Acender e apagar um led com som Objetivo O objetivo deste projeto é criar um circuito para acender e apagar um led batendo palmas. Para isso, vamos utilizar um módulo sensor...

Outros artigos

Mais: Desafios Básico Dicas de Software Projetos Básicos Circuitos básicos Projetos Intermediários

Você está preparado?

Topo