Básico - Projeto 14

Led com efeito dimmer usando potenciômetro

Objetivo

Criar um circuito simples onde o led fica mais claro (maior luminosidade) ou mais escuro (menor luminosidade) conforme o valor do potenciômetro é alterado.

Aplicação

Para fins didáticos e estudo do PWM (Pulse Width Modulation). 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 No mínimo utilizar protoboard com 830 pontos
Jumpers Kit cabos ligação macho / macho 1  
Led Alto Brilho 5mm Led Alto Brilho 5mm 1 Se você não tiver um led de alto brilho poderá utilizar um led difuso 5mm de qualquer cor.
Resistor  Resistor 300 Ω  1 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.

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 14 - 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 (anodo) e o GND no terminal negativo (catodo) do led.

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 superiores a 150 Ω poderão ser utilizados em LEDs de todas as cores para um circuito com tensão igual ou inferior a 5V).

Valores utilizados para nossos projetos: LEDs difusos ou de alto brilho: Vermelho, Laranja e Amarelo: 150 Ω | Led Verde e Azul: 100 Ω ou 150 Ω

Montagem do potenciômetro:

3) Veja na figura abaixo como foi montado o potenciômetro do nosso exemplo no circuito. Observe a ligação do cabo positivo (vermelho) e negativo (preto) no potenciômetro. O cabo amarelo se conecta com o pino analógico do Arduino. Nesta montagem, quando girarmos o eixo do potenciômetro no sentido horário, o led piscará mais rápido.

4) Para inverter o sentido de rotação do eixo do potenciômetro, basta trocar a polaridade dos cabos como mostra a figura abaixo:

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 14 – Dimmer para led de alto brilho
*
*******************************************************************************/

const int Potenciometro = 5;
const int LedX = 11;
int ValorPoten = 0;
int ValorPwm = 0;
 
void setup() {
pinMode(LedX, OUTPUT);
}
 
void loop() {
ValorPoten = analogRead(Potenciometro);
ValorPwm = map(ValorPoten, 0, 1023, 0, 255);
analogWrite(LedX, ValorPwm);
}

Vídeo

 

Como o projeto deve funciona

1. Quando você iniciar o programa do Arduino, o led poderá estar aceso ou não, dependendo do valor do parâmetro potenciômetro lido. Se o valor do potenciômetro for zero, o led estará apagado.

2. Girando o eixo do potenciômetro no sentido horário ou anti-horário, o led ficará mais claro ou mais escuro, graças ao PWM (Pulse Width Modulation, em português, modulação por largura de pulso).

3. O sentido do eixo do potenciômetro será definido pela polaridade. Para conhecer mais, acesse:  Potenciômetro

PWM - Pulse With Modulation

Este experimento demonstra um conceito importante na eletrônica: o PWM (Pulse Width Modulation, em português, modulação por largura de pulso). No caso de controle de luminosidade, como realizado no nosso exemplo, podemos explicar este conceito de maneira bem simples: utilizando bases de tempo, conseguimos ligar e desligar uma porta tão rapidamente que para nossos olhos parece estar sempre ligado, e o que muda é a intensidade com a qual a porta está ligada.

Por exemplo, se nosso período for 10 milissegundos e ligarmos o PWM em 50%, ou seja, 5 milissegundos ligado e 5 milissegundos desligado, veremos a lâmpada (ilustrada pelo raio amarelo) acesa com metade da intensidade luminosa que teríamos se deixássemos a lâmpada ligada os 10 milissegundos:

O Arduino UNO, que utilizamos no exemplo, possui 6 saídas digitais que podem ser utilizadas como PWM, sendo elas: 11, 10, 9, 6, 5 e 3.

Nesses pinos de saída, o Arduino envia uma onda quadrada, ligando e desligando o pino muito rapidamente. O padrão de ligado/desligado pode simular uma voltagem variando entre 0 V e 5 V. Isso é feito alterando a quantidade de tempo em que a saída permanece alta (ligada) e baixa (desligada). A duração do tempo em que ela permanece ligada é conhecida como a largura do pulso.

Acontece que existe um tempo de varredura, que quando um período chega ao fim, outro começa instantaneamente como podemos ver na figura a seguir para um PWM em 25%, 50% e 75%:

https://upload.wikimedia.org/wikipedia/commons/b/b8/Duty_Cycle_Examples.png

Como o tempo em que isso ocorre é muito rápido, não enxergamos o led ligar e desligar. Isto gera um efeito onde enxergamos a lâmpada mais clara ou mais escura dependendo da largura do pulso (tempo em que a saída permanece ligada).

Explicando o Código do Projeto

1. Primeiro declaramos as constantes (Potenciometro e LedX) e as variáveis (ValorPoten e ValorPwm).

const int Potenciometro = 5;
const int LedX = 11; // saída para PWM
int ValorPoten = 0;
int ValorPwm = 0;

  1.1. Observe que utilizamos apenas constantes e 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
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. A constante Potenciometro se refere ao potenciômetro 10K (resistência máxima de 10KΩ) definido para estar conectado no pino analógico A5. A constante LedX se refere ao componente led 5mm de alto brilho que deve estar conectado no pino digital 11 (saída que pode ser utilizada como PWM).

1.3 A variável ValorPoten se refere à leitura do potenciômetro e a variável ValorPmw se refere à leitura do potenciômetro transformada  .

2. Através da strutura void setup(), definimos:

void setup() {
pinMode(LedX, OUTPUT);
}

2.1. A constante LedX fica definida como saída do controlador Arduino (OUTPUT).

3. Através da estrutura void loop(), obtemos:

void loop() {
ValorPoten = analogRead(Potenciometro);
ValorPwm = map(ValorPoten, 0, 1023, 0, 255);
analogWrite(LedX, ValorPwm);
}

  3.1. A variável ValorPoten 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  portanto, 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 ValorPwm faz o mapeamento da variável ValorPoten entre 0 e 255. Se a variável ValorPoten for igual a 0 (zero), o valor da variável ValorPwm será também 0 (zero) e se o valor da variável ValorPoten for igual a 1023, o valor da variável ValorPwm será 255. Portanto, os valores da variável pwm irão variar de 0 a 255, 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. A função analogWrite faz uma escrita analógica, ou seja, faz a escrita da variável ValorPwm. No Arduino está predefinido que para ter 0% de PWM, basta escrever: analogWrite(pino a ser escrito, 0); do mesmo modo que, para obter 100% de PWM, basta escrever: analogWrite(pino a ser escrito, 255), ou seja, na estrutura que o Arduino entende como PWM, os valores vão de 0 (mínimo, ou seja, 0%) até 255 (máximo, ou seja,100%). Assim, dependendo da posição do eixo do potenciômetro, o led parecerá mais escuro ou mais claro, variando entre 0 e 255.

Compartilhe:

Doações

Contribua pra manter o site online :)

Inscreva-se no canal Squids

Você está preparado?

Squids Arduino News

Desafio 78 - Projeto I05 Controlando 2 motores - juntos e individualmente Com base no projeto I06 - Controlando um motor DC com L293D (Ponte H) e Arduino resolva os seguintes desafios: 1. A...

Básico - Projeto 91 Exibindo imagens bitmap em um Oled SSD1306 - bibliotecas Adafruit Objetivo Neste projeto vamos mostrar como exibir imagens bitmap em um display OLED SSD1306 com Arduino. Uti...

Intermediário - Projeto 06 Controle de velocidade e sentido de rotação de um motor DC Objetivo Neste tutorial vamos mostrar como criar um circuito para controlar a velocidade e o sentido de ro...

Desafio 77 - Projetos hub005 e hub007 Acessar leds com comunicação serial e manipulação direta de portas Com base nos projetos Hub 005 - Acender leds por comunicação serial - Arduino  e Hub 007...

Básico - Hub 007 Leds são acionados pelo teclado do computador   Sugerido por: Vinicius Medeiros Objetivo O projeto é composto por 3 leds, um verde, um amarelo e um vermelho. Ao digitar a ...

Outros artigos

Mais: Desafios Projetos Básicos Projetos Intermediários Básico

Topo