Como configurar displays de 7 segmentos no Arduino

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Os displays de sete segmentos são usados ​​em muitos dispositivos de consumo do dia a dia, como fornos de microondas, máquinas de lavar e condicionadores de ar. Eles são uma maneira simples, mas eficaz, de exibir dados numéricos, como tempo ou quantidade. Como são feitos de LEDs, são uma opção de baixo custo para exibição de informações.

Como configurar displays de 7 segmentos no Arduino 1

Neste tutorial, mostrarei como configurar e programar displays de um e vários dígitos de sete dígitos em um Arduino.

As telas de sete segmentos vêm em uma ampla variedade de tamanhos e cores. Vermelho, azul e verde são as cores mais fáceis de encontrar. Os tamanhos variam de telas pequenas de 0,56 polegadas a telas grandes de 4 polegadas e até 6,5 polegadas. Alguns monitores têm um único dígito e outros dois ou quatro.

Arduino 7 Segment Display - Monitores de um dígito e quatro dígitos

Antes de começarmos a trabalhar com 7 displays de segmento, precisamos entender algumas noções básicas de LEDs e como controlá-los.

Anúncio PCBWay

Noções básicas de LED

Um único LED consiste em dois terminais, um ânodo e um cátodo. O ânodo é o terminal positivo e o cátodo é o terminal negativo:

Tutorial para exibição de segmentos do Arduino 7 - ânodo e cátodo LED

Para alimentar o LED, conecte o cátodo ao terra e o ânodo à fonte de tensão. O LED pode ser ligado ou desligado alternando a energia no ânodo ou no cátodo.

Ânodo para GPIO

Com o ânodo do LED conectado a um pino digital, o cátodo é conectado ao terra:

Tutorial para exibição de segmentos do Arduino 7 - ânodo para GPIO

Nota: Todos os LEDs precisam de um resistor limitador de corrente colocado no lado do ânodo ou no lado do cátodo para impedir que o LED se queime. O valor do resistor determinará o brilho do LED. 1K ohms é um bom ponto de partida, mas você pode calcular o valor ideal com uma calculadora de resistores de LED.

Para acender um LED com o ânodo conectado a um pino digital, defina-o como ALTO:

void setup()
    pinMode(7, OUTPUT);
    digitalWrite(7, HIGH);


void loop() 

No configuração nula () bloco, configuramos o pino 7 do GPIO como uma saída com pinMode (7, SAÍDA); e leve-o alto com digitalWrite (7, ALTO);.

Cátodo para GPIO

Com o cátodo de um LED conectado a um pino digital, o ânodo é conectado ao Vcc. Para ligar o LED, o pino digital é comutado LOW, o que completa o circuito para o terra:

Tutorial para exibição em 7 segmentos do Arduino - cátodo para GPIO

Neste caso, dirigimos o pino GPIO 7 LOW com digitalWrite (7, BAIXO);. Isso fecha o circuito e permite que a corrente flua de Vcc para o terra:

void setup()
    pinMode(7, OUTPUT);
    digitalWrite(7, LOW);


void loop() 

Como as telas de 7 segmentos funcionam

Os displays de sete segmentos consistem em 7 LEDs, chamados segmentos, dispostos no formato de um “8”. A maioria dos displays de 7 segmentos possui 8 segmentos, com um ponto no lado direito do dígito que serve como ponto decimal. Cada segmento é nomeado com uma letra A a G e DP para o ponto decimal:

Tutorial para exibição em 7 segmentos do Arduino - Diagrama de layout de segmento

Cada segmento da tela pode ser controlado individualmente, como um LED comum.

Existem dois tipos de displays de 7 segmentos – cátodo comum e ânodo comum.

Displays de cátodo comuns

Em telas comuns de cátodo, todos os cátodos são conectados ao terra e os segmentos individuais são ligados e desligados alternando a energia para os ânodos:

Tutorial de 7 segmentos do Arduino - Diagrama esquemático comum

Telas de ânodo comuns

Em telas comuns de ânodo, todos os ânodos são conectados ao Vcc e segmentos individuais são ligados e desligados alternando a energia para os cátodos:

Tutorial de 7 segmentos do Arduino - Esquema de ânodo comum

Conectando monitores de 7 segmentos ao Arduino

As telas de um dígito e sete segmentos geralmente têm 10 pinos. Dois pinos se conectam ao terra e os outros 8 se conectam a cada um dos segmentos. Aqui está um diagrama de pinos do popular display de catodo comum 5161AS:

Leia Também  A publicidade em outdoors faz sentido para os trabalhadores independentes? Vantagens, custos, fornecedores e dicas

Tutorial para exibição em 7 segmentos do Arduino - Diagrama dos pinos

Antes de conectar seu monitor ao Arduino, você precisa saber se é ânodo comum ou cátodo comum e quais pinos se conectam a cada segmento. Essas informações devem constar na folha de dados, mas se você não encontrar a folha de dados ou não souber o número de peça de sua tela, mostrarei como descobrir isso abaixo …

Como saber se você tem um ânodo comum ou exibição de cátodo comum

Para determinar se um monitor é ânodo comum ou cátodo comum, você pode testar os pinos com um circuito de teste construído desta maneira:

Tutorial para 7 segmentos do Arduino - Localização da pinagem

Conecte o fio terra (preto) a qualquer pino da tela. Em seguida, insira o fio positivo (vermelho) em cada um dos outros pinos. Se nenhum segmento acender, mova o fio terra para outro pino e repita o processo. Faça isso até que pelo menos um segmento acenda.

Quando o primeiro segmento acender, deixe o fio terra onde está e conecte o fio positivo a cada um dos outros pinos novamente. Se um segmento diferente acender com cada pino diferente, você terá uma exibição de cátodo comum. O pino conectado ao fio terra é um dos pinos comuns. Deve haver dois deles.

Se dois pinos diferentes acenderem o mesmo segmento, você terá uma exibição em ânodo comum. O pino conectado ao fio positivo é um dos pinos comuns. Agora, se você conectar o fio terra a cada um dos outros pinos, deverá ver que um segmento diferente acende com cada pino diferente.

Como determinar a pinagem para sua exibição

Agora desenhe um diagrama mostrando os pinos em sua tela. Com o pino comum conectado ao fio terra (cátodo comum) ou positivo (ânodo comum), apalpe cada pino com o outro fio. Quando um segmento acender, anote o nome do segmento (A-G ou DP) ao lado do pino correspondente no seu diagrama.

Conectando monitores de um dígito ao Arduino

Depois de descobrir o layout dos pinos, conectar a tela a um Arduino é muito fácil. Este diagrama mostra como conectar um display 5161AS de um dígito (observe o resistor limitador de corrente de 1K ohm conectado em série com os pinos comuns):

Monitor de 7 segmentos do Arduino - Diagrama de fiação de 1 dígito

Nos programas de exemplo abaixo, os pinos do segmento se conectam ao Arduino de acordo com esta tabela:

Tutorial para exibição em 7 segmentos do Arduino - Tabela de conexões de pinos

Programação de displays de um dígito

Instale a biblioteca

Usaremos uma biblioteca chamada SevSeg para controlar a exibição. A biblioteca SevSeg funciona com monitores de um e vários dígitos, com sete dígitos. Você pode baixar o arquivo ZIP da biblioteca no GitHub ou baixá-lo aqui:

Ícone do ZIP dos princípios básicos do circuito SevSeg.zip

Para instalá-lo, abra o IDE do Arduino, vá para Esboço> Incluir biblioteca> Adicionar biblioteca .ZIP e selecione o arquivo ZIP do SevSeg que você baixou.

Imprimir números no visor

Este programa imprimirá o número “4” em um display de 7 segmentos com um dígito:

#include "SevSeg.h"
SevSeg sevseg; 

void setup()
    byte numDigits = 1;
    byte digitPins[] = ;
    byte segmentPins[] = 6, 5, 2, 3, 4, 7, 8, 9;
    bool resistorsOnSegments = true;

    byte hardwareConfig = COMMON_CATHODE; 
    sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
    sevseg.setBrightness(90);


void loop()
        sevseg.setNumber(4);
        sevseg.refreshDisplay();        

Neste programa, criamos um sevseg objeto na linha 2. Para usar telas adicionais, você pode criar outro objeto e chamar as funções relevantes para esse objeto. O visor é inicializado com o sevseg.begin () na linha 11. As outras funções são explicadas abaixo:

hardwareConfig = COMMON_CATHODE; Isso define o tipo de exibição. Estou usando um cátodo comum, mas se você estiver usando um ânodo comum, use COMMON_ANODE em vez de.

byte numDigits = 1; Isso define o número de dígitos no seu visor. Estou usando uma tela de um dígito, então defino-a como 1. Se você estiver usando uma tela de quatro dígitos, defina-a como 4.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

byte digitPins[] = ; Cria uma matriz que define os pinos de aterramento ao usar um display de 4 ou vários dígitos. Deixe em branco se você tiver uma tela de um dígito. Por exemplo, se você tiver uma tela de 4 dígitos e quiser usar os pinos 10, 11, 12 e 13 do Arduino como pinos de aterramento, deverá usar o seguinte: byte digitPins[] = 10, 11, 12, 13;. Veja o exemplo de exibição de 4 dígitos abaixo para obter mais informações.

Leia Também  Site de nicho com produtos de alto preço - receitas, experiências e dicas

segmento de bytes[] = 6, 5, 2, 3, 4, 7, 8, 9; Isso declara uma matriz que define quais pinos do Arduino estão conectados a cada segmento da tela. A ordem é alfabética (A, B, C, D, E, F, G, DP, onde DP é o ponto decimal). Portanto, neste caso, o pino 6 do Arduino se conecta ao segmento A, o pino 5 se conecta ao segmento B, o pino 2 se conecta ao segmento C e assim por diante.

resistorsOnSegments = true; Isso precisa ser definido como verdadeiro se os resistores limitadores de corrente estiverem em série com os pinos do segmento. Se os resistores estiverem em série com os pinos dos dígitos, defina-o como falso. Defina como true ao usar telas com vários dígitos.

sevseg.setBrightness (90); Esta função define o brilho da tela. Pode ser ajustado de 0 a 100.

sevseg.setNumber (); Esta função imprime o número no visor. Por exemplo, sevseg.setNumber (4); imprimirá o número “4” no visor. Você também pode imprimir números com pontos decimais. Por exemplo, para imprimir o número “4.999”, você usaria sevseg.setNumber (4999, 3);. O segundo parâmetro (o 3) define onde o ponto decimal está localizado. Nesse caso, são três dígitos do dígito mais à direita. Em uma exibição de um dígito, definir o segundo parâmetro como “0” ativa o ponto decimal, enquanto definir o “1” o desativa.

sevseg.refreshDisplay (); Esta função é necessária no final da seção do loop para continuar exibindo o número.

Temporizador de contagem

Este programa simples conta de zero a 9 e depois volta ao início:

#include "SevSeg.h"
SevSeg sevseg; 

void setup()
    byte numDigits = 1;
    byte digitPins[] = ;
    byte segmentPins[] = 6, 5, 2, 3, 4, 7, 8, 9;
    bool resistorsOnSegments = true;

    byte hardwareConfig = COMMON_CATHODE; 
    sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
    sevseg.setBrightness(90);


void loop()
    for(int i = 0; i < 10; i++)
        sevseg.setNumber(i, i%2);
        delay(1000);
        sevseg.refreshDisplay(); 
        

O código é semelhante ao esboço anterior. A única diferença é que criamos uma variável de contagem “i” na instrução for na linha 16 e a incrementamos um número por vez.

o sevseg.setNumber (i, i% 2); A função imprime o valor de i. O argumento i% 2 divide i por 2 e retorna o restante, o que faz com que o ponto decimal seja ativado em qualquer outro número.

O cronômetro de contagem é uma ótima maneira de demonstrar o básico de como programar a exibição, mas agora vamos tentar tornar algo mais interessante.

Dados de rolamento

Este exemplo consiste em um botão e uma única exibição de 7 segmentos. Sempre que o botão é pressionado e pressionado, o visor percorre os números de 0 a 9 rapidamente. Depois que o botão é solto, o visor continua em loop por um período quase igual ao tempo em que o botão foi pressionado e, em seguida, exibe um número junto com o ponto decimal para indicar o novo número.

Para construir o circuito (com o monitor 5161AS), conecte-o assim:

Exibição de 7 segmentos do Arduino - Dados do rolamento

Em seguida, faça o upload deste programa para o Arduino:

#include "SevSeg.h"
SevSeg sevseg;

const int  buttonPin = 10;    // the pin that the pushbutton is attached to
int buttonState = 0;          // current state of the button
int lastButtonState = LOW;    // previous state of the button
int buttonPushCounter = 0;    // counter for the number of button presses
long counter = 0;
long max_long_val = 2147483647L;

void setup()
  byte numDigits = 1;
  byte digitPins[] = ;
  byte segmentPins[] = 6, 5, 2 , 3, 4 , 7, 8, 9;
  bool resistorsOnSegments = true; 

  byte hardwareConfig = COMMON_CATHODE;
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.setBrightness(90);

  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
  lastButtonState = LOW;


void loop()
  buttonState = digitalRead(buttonPin);
  if(buttonState == HIGH)
    buttonState = LOW;
    

  else
   buttonState = HIGH;

  if(buttonState == HIGH)
     Serial.println("on");
     lastButtonState = HIGH;
     buttonPushCounter++;
     if(counter < max_long_val)
       counter++;
     buttonPushCounter %= 9;
     sevseg.setNumber(buttonPushCounter, 1);    
     sevseg.refreshDisplay();     
     delay(100 - (counter%99));
     
  
  else
     Serial.println("off");
     if(lastButtonState == HIGH)
       Serial.println("in");
       buttonPushCounter++;
       buttonPushCounter %= 7;
       if(buttonPushCounter == 0)
         buttonPushCounter = 1;
       counter--;
       sevseg.setNumber(buttonPushCounter, 1);    
       sevseg.refreshDisplay();
       delay(100 - (counter%99));
       if(counter == 0)
         lastButtonState = LOW;
         sevseg.setNumber(buttonPushCounter, 0);
         sevseg.refreshDisplay();         
         
       
     

Displays de 4 dígitos e 7 segmentos

Até agora, trabalhamos apenas com monitores de 7 segmentos de um dígito. Para exibir informações como hora ou temperatura, convém usar uma tela de 2 ou 4 dígitos ou conectar várias telas de um dígito lado a lado.

Leia Também  VG Wort - Início do registro 2020, problemas de carregamento lento, cookies e o futuro

Tutorial para 7 segmentos do Arduino - exibição de 4 dígitos

Em telas com vários dígitos, um pino de segmento (A, B, C, D, E, F, G e DP) controla o mesmo segmento em todos os dígitos. Os displays de vários dígitos também possuem pinos comuns separados para cada dígito. Estes são os pinos dos dígitos. Você pode ativar ou desativar um dígito, alternando o pino do dígito.

Tutorial de 7 segmentos do Arduino - Esquema de exibição de 4 dígitos

Estou usando um display de 4 dígitos e 7 segmentos com o número do modelo 5641AH, mas os diagramas de fiação abaixo também funcionarão com o 5461AS.

Aqui está um diagrama mostrando a pinagem dessas telas:

Tutorial para 7 segmentos do Arduino - Diagrama do pino de exibição de 4 dígitos

Os pinos dos dígitos D1, D2, D3 e D4 precisam ser conectados aos resistores limitadores de corrente, pois são os terminais comuns dos dígitos. As conexões são mostradas abaixo:

Monitor de 7 segmentos do Arduino - Diagrama de conexão do monitor de 4 dígitos

Este programa simples imprime o número "4.999" no visor:

#include "SevSeg.h"
SevSeg sevseg; 

void setup()
  byte numDigits = 4;
  byte digitPins[] = 10, 11, 12, 13;
  byte segmentPins[] = 9, 2, 3, 5, 6, 8, 7, 4;

  bool resistorsOnSegments = true; 
  bool updateWithDelaysIn = true;
  byte hardwareConfig = COMMON_CATHODE; 
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.setBrightness(90);


void loop()
    sevseg.setNumber(4999, 3);
    sevseg.refreshDisplay(); 

No código acima, definimos o número de dígitos na linha 5 com byte numDigits = 4;.

Como os displays de vários dígitos usam pinos de dígitos, também precisamos definir quais pinos do Arduino se conectarão aos pinos de dígitos. Usando byte digitPins[] = 10, 11, 12, 13; na linha 6 define o pino 10 do Arduino como o primeiro dígito, o pino 11 do Arduino no pino do segundo dígito e assim por diante.

Para imprimir números com um ponto decimal, definimos o segundo parâmetro em sevseg.setNumber (4999, 3); para três, o que coloca três casas decimais do dígito mais à direita.

Indicador de temperatura

Este exemplo lê a temperatura de um termistor e a exibe em um display de 4 dígitos.

Conecte o circuito assim:

Monitor de 7 segmentos do Arduino - Display de temperatura de 4 dígitos

If you have questions about using a thermistor, or just want to learn more about them, check out our other tutorial on using a thermistor with an Arduino.

Once everything is connected, upload this code to the Arduino:

#include "SevSeg.h"
SevSeg sevseg;

int ThermistorPin = 0;
int Vo;
float R1 = 10000;
float logR2, R2, T;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;

void setup() 
  byte numDigits = 4;
  byte digitPins[] = 10, 11, 12, 13;
  byte segmentPins[] = 9, 2, 3, 5, 6, 8, 7, 4;
  bool resistorsOnSegments = true;
  byte hardwareConfig = COMMON_CATHODE;

  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);


void loop() 
  Vo = analogRead(ThermistorPin);
  R2 = R1 * (1023.0 / (float)Vo - 1.0);
  logR2 = log(R2);
  T = (1.0 / (c1 + c2 * logR2 + c3 * logR2 * logR2 * logR2));
  T = T - 273.15;
  T = (T * 9.0) / 5.0 + 32.0; //Comment out for Celsius

  static unsigned long timer = millis();

  if (millis() >= timer) 
    timer += 300;
    sevseg.setNumber(T, 2);
  

  sevseg.refreshDisplay();

This will output the temperature in Fahrenheit. To display the temperature in Celsius, comment out line 28.

By itself, the display will update every time the temperature changes even slightly. This creates an annoying flickering. In order to deal with this, we introduce a timer mechanism, where we only read the value from the thermistor every 300 milliseconds (lines 30 to 34).

The temperature variable “T” is printed to the display on line 35 with sevseg.setNumber(T, 2, false);.

Hopefully this article should be enough to get you started using seven segment displays. If you want to display readings from other sensors, the example program above can easily be modified to do that. If you have any questions or trouble setting up these circuits, feel free to leave a comment below.

Krishna Pattabiraman is a frequent guest writer on Circuit Basics and the founder of www.codelectron.com.

Textos que podem interessar:
https://responsibleradio.com/hr-entrevista-perguntas-e-respostas-para-freshers-experienced/

https://draincleaningdenverco.com/compra-e-venda-pela-internet-sem-ter-capital-para-investir/

https://weeventos.com.br/hnbk-plan-vetretungsplan-app-para-o-heinz-nixdorf-berufskolleg/

https://clipstudio.com.br/voce-esta-fazendo-essa-pagina-de-destino-engano/

https://multieletropecas.com.br/trabalhe-com-freelance-atraves-do-crew-co-como-web-ou-designer-movel/

https://holidayservice-tn.com/trabalhar-com-marketing-na-fotografia/

https://teleingressos.com.br/nos-amamos-esta-nova-lei-de-wisconsin-destinada-a-tornar-as-criancas-mais-inteligentes-sobre-o-dinheiro/

https://proverasfestas.com.br/como-fazer-postagem-de-convidado-trafego-e-autoridade-de-alto-valor/

https://coniferinc.com/estrategias-de-marketing-na-internet-formas-altamente-eficazes-para-voce/

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br