Framework Arduino II: Aula 09 Display de 7 segmentos

Imagem meramente ilustrativa


Introdução

    Nas duas últimas aulas exploramos o uso dos Displays LCD como dispositivos de saída padrão para os nossos projetos. Apesar de apresentarem inúmeras vantagens, não são a melhor opção para display em ambientes extremamente iluminados com a luz do sol devido ao reflexo. Seus dígitos pequenos também podem dificultar a leitura.

    Como alternativa temos os displays de sete segmentos que iremos explorar hoje.

Um display de 7 segmentos genérico
Um display de 7 segmentos genérico


Conhecendo o Display de 7 segmentos.

    Como o próprio nome diz, um display de sete segmentos é um dispositivo de exibição formado por sete segmentos de reta dispostos paralelamente em um encapsulamento retangular. Esses segmentos geralmente são Leds que ao serem ligados de maneira combinada formam dígitos e alguns caracteres alfabéticos.

Animação mostrando o funcionamento de um Display de 7 segmentos
Animação mostrando o funcionamento de um Display de 7 segmentos


    Cada led do conjunto é identificado com uma letra e possui um terminal para controlá-lo. Além dos leds em segmentos, o display conta com um led no seu canto inferior direito para representar um ponto decimal.

Identificação dos leds
Identificação dos leds


    Podemos encontrá-los no mercado sendo oferecidos em um dígito, como os mostrados até agora, mas na também em conjunto de dois, três ou quatro dígitos.

Cátodo comum x Anodo comum

    Além do seu próprio terminal, todos os leds são conectados a um terminal comum que, dependendo do tipo do display, poderá ser conectado a um pino positivo ou negativo de alimentação. Por essa razão encontramos no mercado Displays de 7 segmentos chamados de 5611Ax cátodo comum ou 5611Bx ânodo comum.

    Em termos práticos, o display cátodo comum é aquele que o terminal comum do display será ligado ao GND da placa. Da mesma forma, o display anodo comum terá o seu terminal comum ligado ao VCC.

A combinação de leds

    Conforme falamos, a exibição de caracteres é feita com uma combinação de Leds, conforme a tabela a seguir:

Combinação de Leds para formação de caracteres
Combinação de Leds para formação de caracteres

    Na parte traseira do display temos os respectivos terminais para serem ligados conforme o exemplo abaixo para um display anodo comum:

Disposição dos terminais em um Display anodo comum
Disposição dos terminais em um Display anodo comum

    Podem ser encontrados em voltagens de 2,2 a 3 Volts por segmentos e geralmente suportando uma corrente máxima de 30 mA por segmento. Veja que é um consumo muito alto se pensarmos nos oito leds ligados ao mesmo, sendo necessário um resistor externo para reduzir a corrente a níveis aceitáveis.

A Montagem

    Para ganhar tempo estou disponibilizando a montagem pronta que o estudante poderá salvar uma cópia no seu perfil. Veja que estou colocando um resistor de 330 ohms para cada led do conjunto e ligando um dos terminais comuns ao GND, portanto trata-se de um Display Cátodo Comum. 

    O Wokwi permite que o display seja ajustado para cátodo ou anodo. Eu preferi utilizar duas miniboards porque acho que fica mais bem aproveitado o espaço para conexões. Lembrando que a parte traseira do display tem pinos que se encaixam bem na protoboard.

Selecionando o display é possível ajustá-lo
Selecionando o display é possível ajustá-lo


     Link: https://wokwi.com/projects/413834434359822337

O Sketch

    Não há muito o que comentar nesse código. Ele basicamente utiliza os conceitos das nossas primeiras aulas de Arduino para acender Leds. A diferença é que agora são muitos leds juntos. Nele eu defini algumas constantes que seriam os pinos utilizados para os leds. 

    Para facilitar, deixei uma sequência de pinos de 2 a 9 para ter um correspondência entre os terminais de A até G do display. A função setup() apenas precisou configurar os pinos para saída. O código ficou grande porque criei uma função para cada digito a ser mostrado, isto é, uma função um(), dois(), tres(), etc... 

    Cada função utiliza a função apaga() que deixa todos os leds que estavam acesos apagados, para depois acender apenas os leds necessários para formar o digito desejado, conforme aquela tabela que mostramos neste texto, com uma instrução digitalWrite().

    A função loop() apenas chama as funções fazendo uma contagem e dando um intervalo de dois segundos para o estudante poder acompanhar. Caso não lembre como se faz funções, recomendo uma revisada nas aulas de C++ clicando aqui.

  1. #define LedA 2
  2. #define LedB 3
  3. #define LedC 4
  4. #define LedD 5
  5. #define LedE 6
  6. #define LedF 7
  7. #define LedG 8
  8. #define LedP 9


  9. void setup() {
  10. pinMode(LedA,OUTPUT);
  11. pinMode(LedB,OUTPUT);
  12. pinMode(LedC,OUTPUT);
  13. pinMode(LedD,OUTPUT);
  14. pinMode(LedE,OUTPUT);
  15. pinMode(LedF,OUTPUT);
  16. pinMode(LedG,OUTPUT);
  17. pinMode(LedP,OUTPUT);
  18. }

  19. void loop() {
  20.   um();
  21.   delay(2000);
  22.   dois();
  23.   delay(2000);
  24.   tres();
  25.   delay(2000);
  26.   quatro();
  27.   delay(2000);
  28.   cinco();
  29.   delay(2000);
  30.   seis();
  31.   delay(2000);
  32.   sete();
  33.   delay(2000);
  34.   oito();
  35.   delay(2000);
  36.   todos();
  37.   delay(2000);
  38.   nove();
  39.   delay(2000);
  40.   zero();
  41.   delay(2000);
  42. }
  43. void todos() { 
  44.   digitalWrite(LedA,HIGH);
  45.   digitalWrite(LedB,HIGH);
  46.   digitalWrite(LedC,HIGH);
  47.   digitalWrite(LedD,HIGH);
  48.   digitalWrite(LedE,HIGH);
  49.   digitalWrite(LedF,HIGH);
  50.   digitalWrite(LedG,HIGH);
  51.   digitalWrite(LedP,HIGH);
  52. }
  53. void apaga() { 
  54.   digitalWrite(LedA,LOW);
  55.   digitalWrite(LedB,LOW);
  56.   digitalWrite(LedC,LOW);
  57.   digitalWrite(LedD,LOW);
  58.   digitalWrite(LedE,LOW);
  59.   digitalWrite(LedF,LOW);
  60.   digitalWrite(LedG,LOW);
  61.   digitalWrite(LedP,LOW);
  62. }
  63. void um() { 
  64.   apaga();
  65.   digitalWrite(LedB,HIGH);
  66.   digitalWrite(LedC,HIGH);
  67. }
  68. void dois() { 
  69.   apaga();
  70.   digitalWrite(LedA,HIGH);
  71.   digitalWrite(LedB,HIGH);
  72.   digitalWrite(LedD,HIGH);
  73.   digitalWrite(LedE,HIGH);
  74.   digitalWrite(LedG,HIGH);
  75. }
  76. void tres() { 
  77.   apaga();
  78.   digitalWrite(LedA,HIGH);
  79.   digitalWrite(LedB,HIGH);
  80.   digitalWrite(LedC,HIGH);
  81.   digitalWrite(LedD,HIGH);
  82.   digitalWrite(LedG,HIGH);
  83. }
  84. void quatro() { 
  85.   apaga();
  86.   digitalWrite(LedB,HIGH);
  87.   digitalWrite(LedC,HIGH);
  88.   digitalWrite(LedF,HIGH);
  89.   digitalWrite(LedG,HIGH);
  90. }
  91. void cinco() { 
  92.   apaga();
  93.   digitalWrite(LedA,HIGH);
  94.   digitalWrite(LedC,HIGH);
  95.   digitalWrite(LedD,HIGH);
  96.   digitalWrite(LedF,HIGH);
  97.   digitalWrite(LedG,HIGH);
  98. }
  99. void seis() { 
  100.   apaga();
  101.   digitalWrite(LedA,HIGH);
  102.   digitalWrite(LedC,HIGH);
  103.   digitalWrite(LedD,HIGH);
  104.   digitalWrite(LedE,HIGH);
  105.   digitalWrite(LedF,HIGH);
  106.   digitalWrite(LedG,HIGH);
  107. }
  108. void sete() { 
  109.   apaga();
  110.   digitalWrite(LedA,HIGH);
  111.   digitalWrite(LedB,HIGH);
  112.   digitalWrite(LedC,HIGH);
  113. }
  114. void oito() { 
  115.   apaga();
  116.   digitalWrite(LedA,HIGH);
  117.   digitalWrite(LedB,HIGH);
  118.   digitalWrite(LedC,HIGH);
  119.   digitalWrite(LedD,HIGH);
  120.   digitalWrite(LedE,HIGH);
  121.   digitalWrite(LedF,HIGH);
  122.   digitalWrite(LedG,HIGH);
  123. }
  124. void nove() { 
  125.   apaga();
  126.   digitalWrite(LedA,HIGH);
  127.   digitalWrite(LedB,HIGH);
  128.   digitalWrite(LedC,HIGH);
  129.   digitalWrite(LedF,HIGH);
  130.   digitalWrite(LedG,HIGH);
  131. }
  132. void zero() {
  133.   apaga(); 
  134.   digitalWrite(LedA,HIGH);
  135.   digitalWrite(LedB,HIGH);
  136.   digitalWrite(LedC,HIGH);
  137.   digitalWrite(LedD,HIGH);
  138.   digitalWrite(LedE,HIGH);
  139.   digitalWrite(LedF,HIGH);
  140. }

    Achou complicado? Eu também. É por isso que existe uma biblioteca chamada sevseg.h que facilita o uso de display de 7 segmentos, mas isso eu mostrarei daqui algumas aulas.

    Depois desse contato com esse tipo de display, o aluno pode estar com a seguinte dúvida: Se um display de um dígito utilizou todos esses pinos do Arduino, o que aconteceria se fossem dois dígitos? 

    A resposta a gente vê na próxima aula...

Próxima Aula                                                                                                                        Aula Anterior

Referências

ARDUINO. SevSeg. Disponível em <https://docs.arduino.cc/libraries/sevseg/> Acesso em 06 nov 2024.

BLOG ELETROGRATE. Guia Completo dos Displays de 7 Segmentos – Arduino. Disponível em <https://blog.eletrogate.com/guia-completo-dos-displays-de-7-segmentos-arduino/> Acesso em 06 nov 2024.

BLOG DA ROBÓTICA. Como utilizar display de 7 segmentos com 4 dígitos – cátodo comum com Arduino. Disponível em <https://www.blogdarobotica.com/2022/06/30/como-utilizar-display-de-7-segmentos-com-4-digitos-catodo-comum-com-arduino/> Acesso em 06 nov 2024.

DISPLAY DE SETE SEGMENTOS. In: WIKIPÉDIA, a enciclopédia livre. Flórida: Wikimedia Foundation, 2021. Disponível em: <https://pt.wikipedia.org/w/index.php?title=Display_de_sete_segmentos&oldid=60976533>. Acesso em: 06 nov 2024.

ROBO CORE. Display de 7 Segmentos. Disponível em <https://www.robocore.net/display/display-7-segmentos> Acesso em 06 nov 2024.

WOKWI. Referência do wokwi-7segment. Disponível em <https://docs.wokwi.com/pt-BR/parts/wokwi-7segment/> Acesso em 06 nov 2024.