Articles

How Seven Segment Display Works & Interface it with Arduino

Quantas vezes viu um filme em que alguém precisa de desactivar uma bomba? O herói vê a exibição enquanto o tempo passa, cada segundo mais precioso do que o anterior. Bem, se reparar, todas essas bombas nos filmes têm exibições de sete segmentos. Tem de ser! Caso contrário, como poderia um herói saber quanto tempo lhe resta?

Talvez as exibições de sete segmentos não pareçam suficientemente modernas para si, mas são a forma mais prática de exibir números. São fáceis de usar, rentáveis e altamente legíveis, tanto em condições de luz limitada como sob forte luz solar.

Um exemplo do mundo real que utiliza a exibição de sete segmentos é o famoso relógio de contagem decrescente no Cabo Canaveral, Florida, que a NASA utilizou para a aterragem Apollo.

Photo credit: NASA/Jim Grossmann

Hardware Overview

Discuta brevemente as características e funcionalidade do visor de 7 segmentos antes de o ligarmos a um Arduino.

Os ecrãs de 7 segmentos são na realidade apenas sete LEDs alinhados num determinado padrão. Neste caso, a forma do número ‘8’ que todos nós conhecemos. Cada um dos sete LEDs é chamado segmento porque quando iluminado, o segmento faz parte de um dígito numérico (tanto Decimal como Hex) a ser exibido. Um 8º LED adicional é por vezes utilizado para a indicação de um ponto decimal.

7 Segmento Estrutura Interna de Formação de LEDs e Pinout

Cada um dos sete LEDs no visor é dado um segmento posicional com um dos seus pinos de ligação a ser retirado directamente da embalagem plástica rectangular. Estes pinos LED individuais são rotulados de a a g representando cada LED individual. Os outros pinos LED são ligados entre si e ligados por fios para formar um pino comum.

Para ligar e desligar uma determinada parte do visor, define-se o pino apropriado ALTO ou BAIXO, tal como se faria com um LED normal. Para que alguns segmentos sejam claros e outros escuros, permitindo que o padrão de caracteres desejado do número seja gerado no mostrador. Isto permite-nos então exibir cada um dos dez dígitos decimais 0 até 9 no mesmo visor de 7 segmentos.

7 Segmento de Display Pinout

Agora vamos rever a configuração do segmento para sabermos quais os pinos que iluminam quais os segmentos. O pinout para a exibição do segmento de 7 segmentos é o seguinte.

7 Segmento ânodo comum ânodo comum pinout

a-g & DP De 10, os 8 pinos i.e. a, b, c, d, e, f, g e segmento DP (ponto decimal) estão ligados aos pinos digitais do Arduino. Ao controlar cada LED no segmento ligado, os números podem ser exibidos.

COM Os pinos 3 e 8 estão ligados internamente para formar um pino comum. Este pino deve ser ligado ao GND (cátodo comum) ou 5V (ânodo comum), dependendo do tipo de visualização.

Cátodo comum(CC) Vs ânodo comum(CA)

Apenas visualizações de segmentos são de dois tipos: Cátodo Comum (CC) e Ânodo Comum (CA). A estrutura interna de ambos os tipos é quase a mesma. A diferença é a polaridade dos LEDs e do terminal comum. Como o seu nome sugere, o cátodo comum tem todos os cátodos dos LEDs de um segmento de 7 ligados entre si e o ânodo comum tem todos os ânodos dos LEDs de um segmento de 7 ligados entre si.

No mostrador do cátodo comum, todas as ligações catódicas dos segmentos dos LEDs estão ligadas entre si à ‘lógica 0’ / GND. Os segmentos individuais são então iluminados através da aplicação do sinal HIGH / ‘logic 1’ aos terminais individuais dos ânodos (a-g).

Exibição interna de segmentos do Cátodo Comum 7 Animação
Trabalho do Cátodo Comum 7 Segmento

Na exibição do ânodo comum, todas as ligações anódicas dos segmentos LED são unidas à lógica “1”. Os segmentos individuais são iluminados através da aplicação de um sinal de terra, lógica “0” ou “BAIXO” ao cátodo do segmento particular (a-g).

Common Anode 7 Segment Display Internal Working AnimationEcrã interno do ânodo 7 do segmento Animação de trabalho
Anodo comum 7 Segmento de trabalho

Em geral, As exibições anódicas comuns (as que utilizámos nas experiências abaixo) são mais populares, uma vez que muitos circuitos lógicos podem afundar mais corrente do que a sua fonte.

Notem também que uma visualização catódica comum não é um substituto directo num circuito para uma visualização anódica comum e vice-versa, pois é o mesmo que ligar os LEDs ao contrário, e portanto a emissão de luz não terá lugar.

Como funciona a visualização de 7 segmentos?

Dependente do dígito decimal a ser exibido, o conjunto particular de LEDs é iluminado. Por exemplo, para exibir o dígito numérico 4, teremos de iluminar quatro dos segmentos de LED correspondentes a b, c, f e g. Assim, os vários dígitos de ‘0 a 9’ e os caracteres de ‘A a F’ podem ser exibidos usando uma exibição de 7 segmentos, como mostrado.

7 Segmento de Exibição Número de Segmento de Formação de Segmento Contol

Below truth table mostra os segmentos individuais que precisam de ser iluminados a fim de produzir dígitos e caracteres. Note-se que a tabela de verdade para exibição de ânodo 7 segmentos comuns é exactamente oposta à de exibição de catodo 7 segmentos comuns.

Tabela de verdade do cátodo comum de 7 segmentos
Comum Tabela de Verdade da Exibição de 7 Segmentos do Ânodo 7

Cablagem – Ligação da Exibição de 7 Segmentos ao Arduino UNO

Agora temos um entendimento de como o 7-obras de exibição de segmentos, podemos começar a cablagem até ao Arduino!

Comece colocando o expositor de 7 segmentos na sua tábua de cortar pão, assegurando que cada lado do expositor está num lado separado da tábua de cortar pão. Com o ponto decimal virado para baixo, os pinos são 1-5 no lado inferior da esquerda para a direita e 10-6 no lado superior da esquerda para a direita como pode ser visto na ilustração abaixo.

Para começar, vamos ligar um dos pinos comuns 3 ou 8 ao pino de 5V no Arduino (se estiver a utilizar um ecrã comum de 7 segmentos do ânodo) ou ao pino GND no Arduino (se estiver a utilizar um ecrã comum de 7 segmentos do cátodo). Descanso 4 pinos na posição superior estão ligados ao pino digital 2 ao pino digital 5. Os outros 4 pinos na posição inferior com ponto decimal estão ligados ao pino digital 6 a 9,

p>Embora a visualização possa funcionar sem resistências limitadoras de corrente, é sempre uma boa ideia tê-los no seu circuito para evitar queimar a sua visualização.

Tipicamente para um ecrã padrão vermelho de 7 segmentos, cada segmento LED pode desenhar cerca de 15 mA para iluminar correctamente, por isso, num circuito lógico digital de 5 volts, o valor da resistência limitadora de corrente seria cerca de 200Ω (5v – 2v)/15mA, ou 220Ω para o valor preferido mais próximo.

Após ter terminado, deverá ter algo semelhante à ilustração mostrada abaixo.

Conexões de Fiação do Arduino com Exibição de Sete Segmentos de Ânodo Comum
Exibição de Sete Segmentos de Ânodo Comum com Arduino UNO
Conexões de Fiação do Arduino com Exibição do Cátodo Comum de Sete Segmentos
Exibição do Cátodo Comum de Sete Segmentos para Arduino UNO

Arduino Code

Now, é tempo de iluminar o visor com algum código.

Antes de poder começar a escrever o código para controlar os ecrãs de 7 segmentos, terá de descarregar primeiro a Biblioteca SevSeg Arduino. Pode fazê-lo visitando o repo GitHub e descarregando manualmente a biblioteca ou, basta clicar neste botão para descarregar o zip:

Para o instalar, abra a IDE do Arduino, vá a Sketch > Incluir Biblioteca > Adicionar Biblioteca .ZIP, e depois seleccione o ficheiro SevSeg ZIP que acabou de descarregar. Se precisar de mais detalhes sobre a instalação de uma biblioteca, visite este tutorial Instalando uma Biblioteca Arduino.

Após ter a biblioteca instalada, pode copiar este esboço para a IDE Arduino. O seguinte esboço de teste irá contar de 0 a 9. Experimente o esboço; e depois explicá-lo-emos com algum pormenor.

#include "SevSeg.h"SevSeg sevseg;void setup(){//Set to 1 for single digit displaybyte numDigits = 1;//defines common pins while using multi-digit display. Left empty as we have a single digit displaybyte digitPins = {};//Defines arduino pin connections in order: A, B, C, D, E, F, G, DPbyte segmentPins = {3, 2, 8, 7, 6, 4, 5, 9};bool resistorsOnSegments = true;//Initialize sevseg object. Uncomment second line if you use common cathode 7 segmentsevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);//sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments);sevseg.setBrightness(90);}void loop(){ //Display numbers one by one with 2 seconds delay for(int i = 0; i < 10; i++) { sevseg.setNumber(i); sevseg.refreshDisplay(); delay(2000); }}

Código Explicação:

O esboço começa por incluir a biblioteca SevSeg que simplifica os controlos e os sinais para o segmento 7. Em seguida, temos de criar um objecto SevSeg que podemos depois utilizar em todo o esboço.

#include "SevSeg.h"SevSeg myDisplay;

Next, temos de especificar quantos dígitos tem o visor. Como estamos a utilizar uma exibição de um único dígito, definimos para 1. Caso esteja a utilizar uma exibição de 4 dígitos, definimos para 4.

//Set to 1 for single digit displaybyte numDigits = 1;

O conjunto digitPins define simplesmente os ‘pinos comuns’ quando se utiliza uma exibição de vários dígitos. Deixe-o vazio se tiver uma exibição de um único dígito. Caso contrário, forneça os números de pinos arduino a que estão ligados os ‘pinos comuns’ de dígitos individuais. Encomende-os da esquerda para a direita.

//defines common pins while using multi-digit display//Left empty as we have a single digit displaybyte digitPins = {};

O segundo conjunto que vemos a ser inicializado é o conjunto de pinos segmentPins. Este é um conjunto de todos os números de pinos do Arduino que estão ligados a pinos no visor LED que controlam os segmentos; por isso, neste caso, estes são os que ligamos directamente da placa de pão ao Arduino. Estes também têm de ser colocados na ordem correcta, uma vez que a biblioteca assume que os pinos estão na ordem seguinte: A, B, C, D, E, F, G, DP.

//Defines arduino pin connections in order: A, B, C, D, E, F, G, DPbyte segmentPins = {3, 2, 8, 7, 6, 4, 5, 9};

Depois de criarmos estas variáveis, passámo-las ao construtor SevSeg usando a função begin().

//Initialize sevseg objectsevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments);

na secção ‘loop’: O programa começa a contar de 0 a 9 utilizando o laço ‘for’ e a variável ‘i’. Cada vez, utiliza a função da biblioteca SevSeg setNumber() juntamente com refreshDisplay () para colocar o número no mostrador.

Então há um segundo atraso antes de ‘i’ ser incrementado e o próximo número exibido.

for(int i = 0; i < 10; i++){ sevseg.setNumber(i); sevseg.refreshDisplay(); delay(1000);}

Projecto Arduino

Rolling Dice

Como suplemento, eis outro projecto, que permite às pessoas que necessitam de tecnologia de acessibilidade “lançar” os dados. Pode utilizá-lo para jogar jogos como Yahtzee, ludo, etc. Utiliza a mesma configuração do Arduino, excepto que usamos um interruptor táctil para rolar rapidamente.

Rolling Dice Arduino Game Wiring Fritzing Connections with Common Anode 7 Segment
Rolling Dice Arduino Project – Wiring Exibição do ânodo comum de sete segmentos para Arduino UNO

O objectivo de um dado é fornecer uma forma de obter aleatoriamente um número de 1 a 6. E a melhor maneira de obter um número aleatório é utilizar uma função aleatória integrada (min,max). Isto requer dois parâmetros, o primeiro especifica o limite inferior do valor aleatório (incluindo este número) e o segundo parâmetro especifica o limite superior do valor aleatório (excluindo este número). Significa que será gerado um número aleatório entre min e max…1

#include "SevSeg.h"SevSeg sevseg; const int buttonPin = 10; // the number of the pushbutton pin// variables will change:int buttonState = 0; // variable for reading the pushbutton statusvoid setup(){ byte numDigits = 1; byte digitPins = {}; byte segmentPins = {3, 2, 8, 7, 6, 4, 5, 9}; bool resistorsOnSegments = true; sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins, resistorsOnSegments); sevseg.setBrightness(90);// initialize the pushbutton pin as an input:pinMode(buttonPin, INPUT);}void loop(){// read the state of the pushbutton value:buttonState = digitalRead(buttonPin); if (buttonState == HIGH) {sevseg.setNumber(random(1,7));sevseg.refreshDisplay(); }}

Seven Segment Arduino Project Rolling Dice OutputSegmento de equilíbrio Saída de Dados Arduino do Projecto Arduino de lançamento de dados
Saída de Dados Arduino de lançamento de dados

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *