Básico - Projeto 62

Display 7 segmentos com Arduino (Comunicação Serial)

Objetivo

O objetivo deste projeto é montar um display de 7 segmentos para exibir números digitados no teclado do computador. Assim, através da comunicação serial do Arduino, podemos enviar os dados do computador para o display de 7 segmentos. Também neste projeto veremos como utilizar a classe String() e os seus métodos toInt(), length() e substring() para manipular dados na programação.

Comunicação Serial: É a comunicação entre uma placa Arduino e um computador ou outros dispositivos. Todas as placas Arduino possuem pelo menos uma porta serial. No Uno, Nano, Mini, e Mega, pinos 0 e 1 são usados para comunicação com o computador. Também podemos utilizar o Monitor Serial integrado na IDE para a comunicação do computador com uma placa Arduino.

a) Conectar qualquer coisa com os pinos 0 e 1 do Arduino poderá interferir na comunicação serial, incluindo causar falhas nos projetos e na gravação da placa.

b) Neste projeto, assim como no projeto projeto 46, utilizamos o Monitor Serial para a comunicação do teclado para o componente eletrônico.

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

Observações:

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

2. Antes de iniciar este projeto, recomendamos que veja os seguintes projetos: Projeto 55 - Usando display 7 segmentos com Arduino (código otimizado), onde mostramos como usar no código um array multidimensional (matriz) e o Projeto 46 - Mostrando texto digitado pelo computador no display LCD que mostramos como utilizar a comunicação serial do Arduino com um display LCD.

3. Serão apresentadas noções de alguns conceitos muito importantes para utilizar nos seus projetos, sendo eles:

a) Como utilizar o objeto Srting() e seus métodos toInt(), length() e substring() - Para saber mais leia: Classe String().

b) Comunicação serial usando a função Serial.read() e Serial.available() - Para saber mais leia: Comunicação Serial e Utilizando a Comunicação Serial do Arduino.

Aplicação

Para fins didáticos e projetos e equipamentos com display com um dígito.

Componentes necessários

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

No mínimo utilizar protoboard com 830 pontos

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

Você poderá utilizar no projeto um display de 7 segmentos anodo comum fazendo apenas algumas alterações (mostraremos no tutorial)

O display poderá ser de qualquer cor.

datasheet

Resistor Resistor 1

1 Resistor de 150Ω ou superior

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.

a) Montagem com display 7 segmentos (catodo comum)

B) Montagem com display 7 segmentos (anodo comum)


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)

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.

4. 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:

4.1. Conecte o pino 3 (ou o pino 8) 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:

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

4.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).

5. Agora que já definimos os componentes, vamos entender um pouquinho como funciona o display de 7 segmentos.

5.1. Como já dissemos anteriormente, 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:

5.2. Para ligarmos os leds (segmentos e o ponto) precisaremos:

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.

6. Sabendo as características do display de 7 segmentos, podemos calcular o valor da resistência necessária para o nosso componente através da lei de Ohm, sendo:

6.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)

6.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 Ω.

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

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

Sketch do projeto

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

Obs. 1: 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 62: Comunicação serial com display 7 segmentos - Arduino
*                 http://squids.com.br/arduino                
*
*******************************************************************************/
// Define as variáveis e constantes
String lnumber; // constrói uma instacia da classe String
char caractere; 
byte ini = 1;
byte verificador = 0;
byte number = 0; // número a ser mostrado no display

// 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 error[7] = {1,d,d,l,1,1,1};
 
void setup(){
  for (int i = 2; i < 10; i++)
  {
    pinMode(i, OUTPUT); //conexão pinos dos 7 segmentos + o ponto    
  }

  Serial.begin(9600);// inicializa a comunicação serial
  Serial.print("Digite um número de 0 a 9:\n");
  Serial.println("--------------------");
}

void loop() {
   // quando caracteres são digitados no monitor serial
  if (Serial.available()) {
    delay(100); // espere um pouco para que toda a mensagem chegue...
    lnumber = "";    
    // lê todos caracteres
    while (Serial.available() > 0) {      
        caractere = Serial.read(); // lê o caractere digitado (char)
        lnumber += caractere; // cria a string até o enter no teclado
        ini = 0; 
    }
  }
 
    String firstchar = lnumber.substring(0,1); // pega o primeiro caractere da string   
    number = firstchar.toInt(); //converte string em um número inteiro
    String ver = String(number); // a variável 'ver' recebe a variável 'number' como string
    
    if (firstchar == ver) { // se o primeiro caractere for número
      // mostra o número no display  
      for (int j = 2; j < 9; j++) {
      digitalWrite(j, displaySeteSeg[number][j-2]);
      }      
      // exibe o ponto se a string possuir mais de dois caracteres
      if (lnumber.length() > 1) {
           digitalWrite(9, HIGH); // opcional    
       } else {
          digitalWrite(9, LOW); // opcional 
       }
    } else if(ini == 0) { // se o primeiro caractere não for número (após início)
      for (int k = 2;k < 9; k++) {
        digitalWrite(k, error[k-2]);
        ver = "E";        
      }
       digitalWrite(9, LOW); // opcional
    }
       
    // Mostra no monitor serial   
    displayTexto(ver);  // chama a função displayTexto()
}

void displayTexto(String ver) { // mostra o número no monitor serial
    if (ini == 0) {
      // Imprime no monitor serial
      Serial.print("Você digitou: ");
      Serial.println(lnumber); // mostra o texto digitado no monitor serial
      Serial.print("Mostra no display: ");
      Serial.println(ver);
      Serial.println("--------------------"); 
      Serial.flush(); //Esvasia o buffer de entrada da porta serial.
    }
     ini = 1;    
}

ATENÇÃO: Se o display não acender verifique todas as conexões dos segmentos. Verifique se o display é catodo comum ou anodo comum

Vídeo

Como o projeto deve funcionar

1. Ao iniciar o programa, o display ficará desligado. Abra o monitor serial do IDE do Arduino.

 2. Digite um número de 0 a 9 e clique no [Enter] do teclado.

3. Se você digitar um número entre 0 e 9, este número aparecerá no display de 7 segmentos e no monitor serial.

4. Se você digitar uma letra ou um caractere especial, aparecerá um "E" de "erro" no display.

5. Se você digitar um número com mais de um dígito, aparecerá apenas o primeiro número no display com acréscimo do ponto.

Obs.: Você poderá digitar quantos números desejar.

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

Você está preparado?

Squids Arduino News

Desafio 82 - Projeto 92 Relógio digital com temperatura, umidade e datas Com base no projeto Projeto 92 - Criando um relógio digital com OLED SSD1306, módulo DS3231 e Arduino resolva os seguin...

Básico - Projeto 92 Criando um relógio digital com Oled SSD1306 - bibliotecas Adafruit Objetivo O objetivo neste projeto é criar um relógio digital usando um display OLED junto com o Real Time ...

Desafio 81 - Projeto I09 Controlando 2 motores com driver L9110s (menu via display LCD) Com base no projeto I09 - Motores DC com Driver Ponte H L9110 e Arduino - Controle de 4 velocidades pelo ...

Intermediário - Projeto 09 Motores DC com driver ponte H L9110s e Arduino - 4 velocidades Objetivo Neste tutorial vamos mostrar como controlar a velocidade de 2 motores CC (corrente contínua) a...

Básico - Hub 008 Usar o módulo display 4 dígitos 74HC595   Sugerido por: Tim Santos Objetivo O objetivo é adaptar o  Projeto 63 - Usando o módulo TM1637 (display 4 dígitos) com Arduino e u...

Outros artigos

Mais: Desafios Projetos Básicos Projetos Intermediários Básico

Topo