Projeto 14 – Contador Digital

O contador digital é um display de um dígito que vai aumentando conforme o tempo. Como ele é um contador de um dígito apenas, começa em 0 e vai até 9. O projeto 9 parece um projeto um pouco simples, mas que ensina o funcionamento de um display bastante usado em projetos de eletrônica.

Com certeza você já viu esse contador em algum lugar. Ele é feito com um componente chamado display de 7 segmentos e é composto por alguns LEDs distribuídos em segmentos, para formação de caracteres e números. Todos os LEDs estão inseridos dentro de um mesmo componente, onde cada pino corresponde a um terminal de um LED e há um terminal comum correspondente ao positivo de todos os LEDs. Esse tipo de display pode ser encontrado em relógios digitais, rádios-relógio e etc. 

Relógio digital com display de 7 segmentos

No display existem 8 LEDs, sendo um para cada segmento (traço) e mais um para o ponto.

Display de 7 segmentos

Note que temos 10 pinos, sendo um LED para cada segmento e 2 comuns a todos os LEDs, sendo um de cada lado. Por mais que tenhamos 2 pinos comuns, precisamos ligar apenas 1 para que o display funcione.

Para cada número se acende um conjunto de LEDs de forma a montar o dígito que se deseja. Por exemplo, para fazer o número 1, acendemos os LEDs B e C. Já para o número 8, acendemos todos.

Ligando cada um dos terminais dos LEDs a uma porta do Arduino conseguimos controlá-los individualmente formando caracteres e números. No projeto 14 iremos construir um contador digital com o display de 7 segmentos mostrando os números de 0 a 9 com um intervalo de 1 segundo.

Material necessário

1x  Display 7 segmentos
1x Resistor 220 ohm
10x Jumper Macho-macho
1x Cabo USB
1x Placa Uno

Montagem do projeto

Como se fossem vários LEDs, precisamos colocar um pino do Arduino para cada pino do display. Como o lado positivo dos LEDs é comum a todos, precisamos de apenas 1 resistor.

Programa Projeto 14 – Contador digital

O programa, apesar de comprido, é bastante simples. Apenas acendemos e apagamos os LEDs, conforme o número que desejamos.

// Projeto 14 - Contador digital

int segE = 7;
int segD = 8;
int segC = 9;
int segB = 13;
int segA = 12;
int segF = 11;
int segG = 10;

void setup()
{
  pinMode(segE, OUTPUT);
  pinMode(segD, OUTPUT);
  pinMode(segC, OUTPUT);
  pinMode(segB, OUTPUT);
  pinMode(segA, OUTPUT);
  pinMode(segF, OUTPUT);
  pinMode(segG, OUTPUT);
}

void loop()
{
  acende0();
  delay(1000);
  acende1();
  delay(1000);
  acende2();
  delay(1000);
  acende3();
  delay(1000);
  acende4();
  delay(1000);
  acende5();
  delay(1000);
  acende6();
  delay(1000);
  acende7();
  delay(1000);
  acende8();
  delay(1000);
  acende9();
  delay(1000);
}

void acende0()
{
  digitalWrite(segE, LOW);
  digitalWrite(segD, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, HIGH);  
}
void acende1()
{
  digitalWrite(segE, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, HIGH);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);  
}
void acende2()
{
  digitalWrite(segE, LOW);
  digitalWrite(segD, LOW);
  digitalWrite(segC, HIGH);
  digitalWrite(segB, LOW);
  digitalWrite(segA, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, LOW);  
}
void acende3()
{
  digitalWrite(segE, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, LOW);
}
void acende4()
{
  digitalWrite(segE, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, HIGH);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
}
void acende5()
{
  digitalWrite(segE, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
}
void acende6()
{
  digitalWrite(segE, LOW);
  digitalWrite(segD, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segB, HIGH);
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
}
void acende7()
{
  digitalWrite(segE, HIGH);
  digitalWrite(segD, HIGH);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, LOW);
  digitalWrite(segF, HIGH);
  digitalWrite(segG, HIGH);
}
void acende8()
{
  digitalWrite(segE, LOW);
  digitalWrite(segD, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
}
void acende9()
{
  digitalWrite(segE, HIGH);
  digitalWrite(segD, LOW);
  digitalWrite(segC, LOW);
  digitalWrite(segB, LOW);
  digitalWrite(segA, LOW);
  digitalWrite(segF, LOW);
  digitalWrite(segG, LOW);
}

Possíveis erros

Caso o projeto não funcione, verifique alguns dos possíveis erros:

  • Caso o display não acenda nenhum LED, verifique a ligação do pino comum;
  • Caso o display não acenda algum segmento, verifique a ligação desse segmento;
  • Verifique se os jumpers estão na mesma coluna dos terminais dos componentes, fazendo assim a conexão;
  • Verifique se os jumpers estão ligados nos pinos corretos no Arduino;
  • Verifique se o código carregou na placa através da IDE Arduino.

Desafios

Veja abaixo alguns desafios que você pode tentar!

  • Modifique o tempo de exibição entre um número e outro mudando os valores em delay(1000); por exemplo delay(350);
  • Modifique a sequência de exibição dos números fazendo uma contagem regressiva;
  • Desenhe letras no display criando novas funções para elas. Por exemplo a letra A:

    void acendeA()
    {
      digitalWrite(segE, LOW);
      digitalWrite(segD, HIGH);
      digitalWrite(segC, LOW);
      digitalWrite(segB, LOW);
      digitalWrite(segA, LOW);
      digitalWrite(segF, LOW);
      digitalWrite(segG, LOW);
    }

Alguma dúvida, comentário ou algo que queira acrescentar? Entre no tópico do nosso fórum!