Projeto 16 - Sequência de LEDs controlados por potenciômetro

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 Resultado de imagem para protoboard 830v 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 Resultado de imagem para potenciômetro 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

×

Infomações do site / SEO








×

Adicionar Marcadores