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
Led Difuso 5mm Led 5mm ou 3mm 10 Resultado de imagem para led vermelho

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  

Obs.: Utilizar também cabos de ligação (jumpers).

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. (Obs.: Resistores iguais ou superiores a 200 Ω 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 Ω - (utilizamos resistores de 200Ω e 100Ω neste projeto)

3. A montagem abaixo foi simulada em um protoboard com linhas de alimentação contínuas. Verifique se o seu protoboard possui linhas de alimentação contínuas ou separadas - sabia mais em protoboard

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.

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.

Compartilhe:

Doações

Contribua pra manter o site online :)

Inscreva-se no canal Squids

Squids Arduino News

CB09 : Dimmer para leds com CI 555 sem Arduino Objetivo Criar um circuito gerador de pulsos modulados (PWM - Pulse Width Modulation) para alterar a intensidade do brilho de um led. Para este pro...

Como usar temporizadores no Arduino

Funções de temporização na programação com Arduino Objetivo Nesta dica vamos mostrar utilizar as diversas funções de temporização disponíveis na programação com Arduino. As funções de Temporizaç...

Intermediário - Projeto 11 Contador de acessos utilizando leds infravermelhos e Arduino Objetivo O objetivo deste projeto é criar um sistema de contagem de visitantes que entram e saem de uma s...

Básico - Projeto 94 Simulando um botão na tela do display OLED Objetivo O objetivo deste projeto é simular um botão de controle no display OLED. O botão servirá para controlar a iluminação de u...

Básico - Projeto 93 Criando um relógio analógico com Oled SSD1306 Objetivo O objetivo deste projeto é exibir no display OLED um relógio com estilo analógico, ou seja, com ponteiros. Utilizaremo...

Outros artigos

Mais: Circuitos básicos Dicas de Software Projetos Intermediários Projetos Básicos Desafios Jogos

Você está preparado?

Topo