Início
/
Projetos Arduino
/
Projetos Squids
/
Básico
/
Projeto 56 - Contando de 00 a 99 com dois displays 7 segmentos e Arduino
Projeto 56 - Contando de 00 a 99 com dois displays 7 segmentos e Arduino
Angelo Luis Ferreira | 06/05/2019
Acessos: 32.112
Básico - Projeto 56
Contando de 00 a 99 com dois display 7 segmentos - Arduino
Objetivo
Neste projeto vamos criar um contador de 00 a 99 utilizando dois displays de 7 segmentos com sketch otimizado. Os displays utilizados no projeto são displays anodo comum. No entanto, você poderá utilizar displays 7 segmentos cátodo comum apenas com algumas modificações que mostraremos neste tutorial. No sketch utilizamos arrays (vetores e matrizes) para definir os segmentos, dígito da unidade e dígito da dezena.
Definições
Array: Em programação de computadores, um arranjo (em inglês array) é uma estrutura de dados que armazena uma coleção de elementos de tal forma que cada um dos elementos possa ser identificado por, pelo menos, um índice ou uma chave. (Wikipédia). Leia também: Como declarar e utilizar arrays no Arduino - Vetores e Matrizes.
Vetor (array unidimensional): é uma variável que armazena várias variáveis do mesmo tipo.
Ex.: byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
Matriz (array multidimensional): é um vetor de vetores.
Ex.: byte displaySeg[10][8] ={
{ 1, 1, 1, 1, 1, 1, 0, 0 },
{ 0, 1, 1, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 1, 1, 0, 1, 0 },
{ 1, 1, 1, 1, 0, 0, 1, 0 },
{ 0, 1, 1, 0, 0, 1, 1, 0 },
{ 1, 0, 1, 1, 0, 1, 1, 0 },
{ 1, 0, 1, 1, 1, 1, 1, 0 },
{ 1, 1, 1, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 1, 1, 1, 1, 0 },
{ 1, 1, 1, 0, 0, 1, 1, 0 }
};
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, sendo eles:
Displays de Catodo comum
Em um display de Catodo Comum os catodos de todos os LEDs (segmentos) são conectados juntos ao terra. Ele é acionado por nível lógico alto em cada segmento, ou seja, HIGH ou 1.
Veja abaixo a disposição dos pinos no display:
Displays de Anodo comum
Em um display de Anodo comum os anodos de todos os segmentos estão conectados juntos em Vcc, sendo acionados por nível lógico baixo em cada segmento, ou seja, LOW ou 0.
Aplicação
Para fins didáticos e projetos com relógios digitais, e equipamentos com contadores.
Componentes necessários
Referência
|
Componente
|
Quantidade
|
Imagem
|
Observação
|
Protoboard |
Protoboard 830 pontos |
1 |
|
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 |
|
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 simila
|
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 (anodo comum) - Simulação
B) Montagem com display 7 segmentos (catodo comum)
Atenção
1. Neste projeto utilizamos o Arduino UNO R3 que possui apenas 14 pinos digitais. Entretanto, 3 deles devem ser evitados:
- O pino 0, porque é também usado para receber dados (RX). Ele pode ser usado, mas para que o upload seja possível ele precisa ser desligado (apenas durante o upload). Este pino também possui um LED ligado diretamente a ele, que irá roubar parte da corrente que alimenta o LED do display.
- O pino 1, porque é usado para transmitir dados (TX). Ele pode ser usado, mas se houver transmissão de dados (por exemplo, uso do monitor Serial) ele também irá roubar corrente do display (fazendo o LED acender mais fraco ou piscar durante a transmissão). Ele também tem um LED na placa que acende durante a transmissão.
- O pino 13, porque ele tem um LED na placa diretamente ligado a ele que precisará compartilhar corrente com o LED do display.
Como vamos utilizar o Arduino UNO para conectar dois displays de 7 segmentos, precisaremos de pelo menos 14 pinos para a conexão. Portando, neste projeto precisaremos utilizar os pino 0, 1 e 13, desde que:
- Mantenha o pino 0 desconectado no momento que fizer o upload do IDE para o Arduino.
- Para utilizar o pino 1, não utilize o Monitor Serial do IDE.
- Dependendo do resistor utilizado, o segmento do display conectado no pino 13 do Arduino poderá ficar com um brilho menor que os demais.
Sugestões: Para evitarmos os conflitos mostrados acima, o ideal seria utilizarmos o Arduino Mega que possui mais portas digitais ou o CI CD4511 junto com o display (mostraremos esta configuração nos próximos projetos). Entretanto, como exercício, vamos utilizar o Arduino Uno levando em conta as recomendações acima.
Leia: Projeto 57 - Display 7 segmentos com decodificador CD4511 e Arduino
2. Conheça a disposição dos pinos do display:
3. Faça a ligação do display com o arduino conforme a tabela abaixo:
Display da unidade (à direita)
ARDUINO |
DISPLAY 7 SEGMENTOS |
SEGMENTOS |
Pino 0 |
Pino 7 |
A |
Pino 1 |
Pino 6 |
B |
Pino 2 |
Pino 4 |
C |
Pino 3 |
Pino 2 |
D |
Pino 4 |
Pino 1 |
E |
Pino 5 |
Pino 9 |
F |
Pino 6 |
Pino 10 |
G |
Display da dezena (à esquerda)
ARDUINO |
DISPLAY 7 SEGMENTOS |
SEGMENTOS |
Pino 7 |
Pino 7 |
A |
Pino 8 |
Pino 6 |
B |
Pino 9 |
Pino 4 |
C |
Pino 10 |
Pino 2 |
D |
Pino 11 |
Pino 1 |
E |
Pino 12 |
Pino 9 |
F |
Pino 13 |
Pino 10 |
G |
4. 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.
5. 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:
5.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:
5.2. Se tivermos um display de 7 segmentos anodo comum o led do ponto, como mostra a figura acima, se acenderá.
5.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).
6. Agora que já definimos os componentes, vamos entender um pouquinho como funciona o display de 7 segmentos.
6.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.
6.2. Como dissemos antes também, 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.
7. 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:
7.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)
7.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 Ω.
7.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.
8. 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
Observação: O código apresentado abaixo foi desenvolvido para um display anodo comum. Para alterar o projeto para um display catodo 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 resistor ligado ao pino 3 do display no GND do Arduino.
1. Faça o dowload e abra o arquivo projeto56.ino no IDE do Arduino: DOWNLOAD - projeto56.ino
Se preferir, copie e cole o código abaixo no IDE do Arduino:
/*******************************************************************************
*
* Projeto 56: Contando de 0 a 99 com display de 7 segmentos e Arduino
* http://squids.com.br/arduino
*
*******************************************************************************/
// 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)
int unidades[] = {0, 1, 2, 3, 4, 5, 6};
int dezenas[] = {7, 8, 9, 10, 11, 12, 13};
byte digito[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
};
const int SEGMENTOS = 7;
const int NUMEROS = 10;
void setup(){
for(int i = 0; i < SEGMENTOS; i++) {
pinMode(dezenas[i], OUTPUT);
pinMode(unidades[i], OUTPUT);
}
}
void loop() {
for(int k = 0; k < NUMEROS; k++) {
acende(dezenas, k);
for(int i = 0; i < NUMEROS; i++) {
acende(unidades, i);
delay(500);
}
}
}
void acende(int* pino, int dig) {
for(int i = 0; i < SEGMENTOS; i++) {
digitalWrite(pino[i], digito[dig][i]);
}
}
Observação: Utilizamos no programa acima (linha 47) o conceito variável ponteiro (int *pino). Este é um conceito mais avançado de programação que abordarei futuramente. Se você quiser saber mais sobre ponteiros em C, veja os links: Ponteiro em C, Ponteiro em C: definição e Ponteiros.
ATENÇÃO 1: Antes de fazer o upload do IDE para a placa, desconecte o pino 0 do Arduino. Após feito o upload do o programa, refaça a conexão. Depois, não há mais necessidade de desconectar o pino 0 para desligar ou ligar o Arduino em uma fonte de energia.
ATENÇÃO 2: Se o display não acender, verifique todas as conexões dos segmentos. Verifique se o display é catodo comum ou anodo comum.
Simulação Tinkercad
- Acesse o link: Simulação do Projeto 56
Vídeo
Como o projeto deve funcionar
1. Ao iniciar o programa, o display irá mostrar o número zero.
2. Depois, a cada 30 segundos, o display irá incrementar em um a numeração apresentada, variando de 00 a 99.
3. Este processo se repetirá indefinidamente até que se desligue o Arduino de uma fonte de energia.
4. Para zerar o display, basta pressionar o botão "reset" do Arduino.
Desafios
Com base neste projeto, resolva o seguinte desafio: Desafio 42
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários