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

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