Início
/
Projetos Arduino
/
Projetos Squids
/
Básico
/
Projeto 16 - Sequência de LEDs controlados por potenciômetro
Projeto 16 - Sequência de LEDs controlados por potenciômetro
Angelo Luis Ferreira | 02/03/2017
Acessos: 28.913
Básico - Projeto 16
Sequência de leds controlados por potenciômetro
Objetivo
Criar 2 barras de LEDs controladas por um potenciômetro. Girando o eixo do potenciômetro, os LEDs das 2 sequências se acendem ou se apagam simultaneamente.
Aplicação
Para fins didáticos e aplicações em efeitos com led.
Componentes necessários
Referência
|
Componente
|
Quantidade
|
Imagem
|
Observação
|
Protoboard |
Protoboard 830 pontos |
1 |
|
Utilizar protoboard com pelo menos 830 pontos |
Jumpers |
Kit cabos ligação macho / macho |
1 |
|
|
Led Difuso 5mm |
Led 5mm ou 3mm |
10 |
|
5 leds azuis
5 leds vermelhos
Você poderá utilizar leds de outras cores
(Utilize leds de 5mm ou 3mm)
|
Resistor |
Resistor |
10 |
|
5 Resistores 100 Ω
5 Resistores 200 Ω
Se precisar usar outros valores, calcule o resistor apropriado para o led utilizado - Calcular Resistor.
|
Potenciômetro |
Potenciômetro 10K |
1 |
|
O valor do potenciômetro aumenta quando giramos o eixo do componente na direção do polo negativo para o polo positivo. |
Arduino UNO R3 |
Arduino UNO |
1 |
|
|
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. Veja a simulação no link --> Projeto 16 - simulação online.
Atenção:
1. Lembre-se que o LED tem polaridade: O terminal maior tem polaridade positiva e o lado do chanfro tem polaridade negativa.
1.1. Portanto, faça a conexão do Arduino no terminal positivo do led (anodo) e o GND no terminal negativo (catodo).
1.2. Para evitar danos ao led é necessário a inclusão de um resistor no circuito. Como o resistor é um limitador da corrente elétrica, ele poderá estar conectado no anodo (terminal maior) ou no catodo (terminal menor) do led, tanto faz.
2. Determinamos o valor do resistor através da tabela prática: Tabela prática de utilização de leds 3mm e 5mm. Entretanto, o mais correto é sempre verificar o datasheet do fabricante do LED para você ter os exatos valores de tensão e corrente do mesmo - leia Como calcular o resistor adequado para o led e Leds ligados em série e em paralelo.
Obs.: Resistores iguais ou superiores a 250 Ω poderão ser utilizados em LEDs de todas as cores para um circuito com tensão igual ou inferior a 5V.
2.1. Valores utilizados para nossos projetos: LEDs difusos ou de alto brilho: Vermelho, Laranja e Amarelo: 150 Ω | Led Verde e Azul: 100 Ω
Montagem do potenciômetro:
1. Veja na figura abaixo como foi montado o potenciômetro do nosso exemplo no circuito. Observe a ligação do cabo positivo e negativo no potenciômetro. O cabo amarelo (pino de centro) se conecta com o pino analógico do Arduino. Nesta montagem, quando girarmos o eixo do potenciômetro no sentido horário, os leds irão acender simultaneamente.
Código do Projeto (sketch)
Digite o código abaixo no ambiente de desenvolvimento do Arduino. Faça a verificação e o upload.
/*******************************************************************************
*
* Projeto 16 – Sequências de leds acionados por potênciometro
* (Por Squids Arduino | http://squids.com.br/arduino)
*
*******************************************************************************/
const int potPin = A2; //constante para definir o pino do potenciometro
const int quantLeds = 5; //quantidade de leds para cada bargraph
int ledPinsVerm[] = {6,5,4,3,2}; //pinos onde os leds vermelhos estão conectados
int ledPinsAzul[] = {11,10,9,8,7}; //pinos onde os leds azuis estão conectados
void setup()
{
for(int i = 0;i<quantLeds;i++) //configura todos os pinos como saídas
{
pinMode(ledPinsVerm[i],OUTPUT);
pinMode(ledPinsAzul[i],OUTPUT);
}
}
void loop (){
int valPoten = analogRead(potPin);
int ledNivel = map(valPoten,0,1023,0,quantLeds);
for(int i = 0;i<quantLeds;i++)
{
if(i<ledNivel)
{
digitalWrite(ledPinsVerm[i],HIGH);
digitalWrite(ledPinsAzul[i],HIGH);
}
else
{
digitalWrite(ledPinsVerm[i],LOW);
digitalWrite(ledPinsAzul[i],LOW);
}
}
}
Vídeo
Como o projeto deve funcionar
1. Após iniciar o programa, gire o eixo do potenciômetro para acender ou apagar os leds simultaneamente nas duas sequências.
2. O sentido do eixo do potenciômetro será definido pela polaridade. Para conhecer mais, acesse: Potenciômetro
Explicando o Código do Projeto
1. Primeiro declaramos as variáveis ledPinVerm[ ], ledPinAzul e as constantes potPin e quantLeds.
const int potPin = A2; //constante para definir o pino do potenciometro
const int quantLeds = 5; //quantidade de leds para cada bargraph
int ledPinsVerm[] = {6,5,4,3,2}; //pinos onde os leds vermelhos estão conectados
int ledPinsAzul[] = {11,10,9,8,7}; //pinos onde os leds azuis estão conectados
1.1. Observe que utilizamos variáveis tipo "int". Veja na tabela abaixo as diferenças nos tipos de constantes e variáveis:
Tipo |
Valores Válidos para Variáveis e Constantes
|
byte |
de 0 a 255 (valores de 8 bits não sinalizados) |
unsigned long |
de 0 a 429967295 (valores de 32 bits(4 bytes) não sinalizados) |
char |
letras e símbolos: 'a', 'b', 'H', '^', '*','1','0' |
int |
de -32767 até 32767 (apenas números inteiros) |
float |
de -3.4 x 1038 até +3.4 x 10+38com até 6 dígitos de precisão (2 casas depois da vírgula) |
double |
de -1.7 x 10308 até +1.7 x 10+308com até 10 dígitos de precisão |
1.2.Declaramos as constantes potPin e quantLeds como tipo inteiro.
1.3. A constante potPin se refere ao potenciômetro que deverá estar conectado no pino analógico do Arduino A2, mostrado na montagem do circuito.
1.4. A constante quantLeds define a quantidade de leds por sequência, ou seja, para cada barra de leds. No nosso projeto, vamos utilizar 2 barras de leds, com 5 leds cada.
1.5. Declaramos as variáveis lePinsVerm [] e ledPinsAzul[] como tipo inteiro. Ambas se referem à um Array onde declaramos a sequência os valores {6,5,4,3,2} para os leds vermelhos e {11,10,9,8,7} para os leds azuis. Da mesma forma, o leds deverão estar conectado na mesma sequência definida, como mostramos na montagem do circuito.
1.5.1. Leia Como declarar e utilizar arrays no Arduino - Vetores e Matrizes
2. Através da strutura void setup(), definimos:
void setup()
{
for(int i = 0;i<quantLeds;i++) //configura todos os pinos como saídas
{
pinMode(ledPinsVerm[i],OUTPUT);
pinMode(ledPinsAzul[i],OUTPUT);
}
}
2.1. Através a estrutura for loop, de 0 a 4 (pois i < quantLeds < 5), definimos os índices da variável array ledPinsVerm e ledPinsAzul, sendo: ledPinsVerm[0] até ledPinsVerm[4] e ledPinsAzul[0] até ledPinsAzul[4] conectados na saída (OUTPUT) do controlador. Portanto no nosso exemplo, a constante ledPinsVerm[0] ficará definida como saída do pino digital 6, ledPinsVerm[1] como saída do pino digital 5, e sucessivamente até ledPinsVerm[4] definido como saída do pino digital 2. O mesmo acontece com a constante ledPinsAzul[0] que deve estar conectada no pino 11 até a ledPinsAzul[4] no pino 7. Observe a montagem do circuito onde conectamos os leds aos pinos digitais do Arduino.
3. Através da estrutura voip loop(), criamos o loop definido como:
void loop (){
int valPoten = analogRead(potPin);
int ledNivel = map(valPoten,0,1023,0,quantLeds);
for(int i = 0;i<quantLeds;i++)
{
if(i<ledNivel)
{
digitalWrite(ledPinsVerm[i],HIGH);
digitalWrite(ledPinsAzul[i],HIGH);
}
else
{
digitalWrite(ledPinsVerm[i],LOW);
digitalWrite(ledPinsAzul[i],LOW);
}
}
}
3.1. A variável ValPoten será igual aos valores lidos diretamente pelo pino analógico onde está conectado o potenciômetro, através da função analogRead() que faz a conversão de analógico para digital. Esta leitura é feita pelo ADC (Analog to Digital Converter - conversor analógico para digital) sem tratamento nenhum. A variável declarada como tipo inteiro (int), vai de 0 a 1023, ou seja, possui 210 = 1024 valores inteiros (referente à resolução de 10 bits do ADC para controladores Arduino UNO, Mega e Leonardo). Assim, quando o eixo do potenciômetro estiver totalmente posicionado do lado do polo negativo, o valor lido será zero, e quando o eixo for deslocado totalmente para o lado do polo positivo, o valor lido será de 1023, variando proporcionalmente conforme a posição do eixo do componente entre estes dois extremos.
Observação: Nosso exemplo, o potenciômetro varia de 0V a 5V (leitura analógica), ou seja, de 0 a 1023 quando convertido em leitura digital através do ADC do controlador Arduino.
3.2. A variável ledNivel faz o mapeamento da variável ValPoten entre 0 e 5 (valor da constante quantLeds). Se a variável ValorPoten for igual a 0 (zero), o valor da variável ledNivel será também 0 (zero) e se o valor da variável ValPoten for igual a 1023, o valor da variável ledNivel será 5. Portanto, os valores da variável ledNivel irão variar de 0 a 5, conforme o potenciômetro varia de 0 a 1023 de acordo com a posição do seu eixo.
Função map(): Variável = map(Valor Lido, Mínimo do Potenciômetro, Máximo do Potenciômetro, Novo Mínimo definido por você, Novo Máximo definido por você)
3.3. Através do loop for, para i de 0 a 4, verificamos: Se i < que o valor de ledNivel (0 até 5), os leds vermelhos e azuis se acenderão através da função digitalWrite(), caso contrário os leds ficarão apagados.
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários