Básico - Projeto 18
Efeito lâmpada pulsante (efeito Fade)
Objetivo
Criar efeito de lâmpada pulsante através do controle de brilho de um led.
Aplicação
Para fins didáticos e estudo do PWM (Pulse Width Modulation). Aplicações em efeitos com led.
Componentes necessários
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 18 - 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.
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.
Valores utilizados para nossos projetos: LEDs difusos ou de alto brilho: Vermelho, Laranja e Amarelo: 150 Ω | Led Verde e Azul: 100 Ω
3. A montagem abaixo foi realizada em um protoboard com linhas de alimentação separadas. Verifique se o seu protoboard possui linhas de alimentação contínuas ou separadas. Veja na figura abaixo como foi montado o nosso circuito no protoboard com linhas de alimentação separadas.
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 18 – Led com efeito pulsante
* http://squids.com.br/arduino
*
*******************************************************************************/
int ledPin = 9;
float senoVal;
int ledVal;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
for (int x=0; x<180; x++) {
// converte graus para radianos e, então, obtém o valor do seno
senoVal = (sin(x*(3.1416/180)));
ledVal = int(senoVal*255);
analogWrite(ledPin, ledVal);
delay(25);
}
}
Vídeo
Como o projeto deve funcionar
1. Após iniciar o programa, o led irá acender e apagar continuamente, criando um efeito pulsante através do controle de brilho definido por uma função senoidal.
2. Este efeito só é permitido, pois o led ficará mais claro ou mais escuro, graças ao PWM (Pulse Width Modulation, em português, modulação por largura de pulso).
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 10%, 50% e 90%:
Para saber mais sobre PWM, leia o tutorial: O que é PWM e para que serve?
Explicando o Código do Projeto
1. Primeiro declaramos as variáveis (ledPin, senoVal e ledVal).
int ledPin = 9;
float senoVal;
int ledVal;
1.1. Observe que utilizamos variáveis tipo "int" e tipo "float". 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 variável ledPin, tipo inteiro, se refere ao componente led 5mm de alto brilho que deverá estar conectado no pino digital 9 (saída do controlador Arduino utilizada como PWM).
1.3. A variável senoVal, tipo float (flutuante), se refere aos valores da função senoidal. Desta forma, cria-se uma valores referentes à uma onda senoidal.
1.4. A variável ledVal, também tipo inteiro, armazena o valor inteiro calculado a ser enviado para o pino digital PWW 9 do controlador.
a ser enviado para o pino digital.
2. Através da estrutura void setup(), definimos:
void setup() {
pinMode(ledPin, OUTPUT);
}
2.1. A constante LedPin ficará definida como saída do controlador Arduino (OUTPUT).
3. Através da estrutura void loop(), obtemos:
void loop() {
for (int x=0; x<180; x++) {
// converte graus para radianos e, então, obtém o valor do seno
senoVal = (sin(x*(3.1416/180)));
ledVal = int(senoVal*255);
analogWrite(ledPin, ledVal);
delay(25);
}
}
3.1. Primeiro criamos uma estrutura loop "for" para x que vai de 0 a 179. Acima deste limite resultaria em 0 e em valores negativos. Para o nosso sistema PWM, precisaríamos de valores entre 0 e 255.
3.2. A função sin() no IDE Arduino requer que o ângulo esteja em radianos, e não em graus. Assim, a equação x*(3.1416/180) converterá o grau do ângulo para radianos e poderemos ter os valores da variável senoVal. Observe no gráfico abaixo que os valores da função sin(x) varia de o a 1 para x variando de 0 a pi/2 (90º) e varia de 1 a o para x variando de p1/2 (90º) a pi (180º).
3.3. Definimos o valor da variável ledVal multiplicando o resultado da função seno (senoVal) por 255. Desta forma converteremos os valores flutuantes da função senoidal para valores inteiros entre 0 e 255. Isto significa que para x= 0 => senVal = 0 => ledVal = 0. Logo para x = pi/2 (90º) => senVal = 1 => ledVal = 255 e finalizando o ciclo, para x = pi (180º) => senVal = 0.
3.4.A função analogWrite grava um valor analógico referente à onda PWM, ou seja, grava um valor analógico na variável ledPin. Está predefinido no Arduino que para ter 0% de PWM, basta escrever: analogWrite(pino a ser gravado, 0); do mesmo modo que, para obter 100% de PWM, basta escrever: analogWrite(pino a ser gravado, 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%). Neste projeto, o led parecerá mais escuro ou mais claro, com intensidade do brilho variando entre 0, 255 e 0 de acordo com os valores de sin(x).
3.5. Finalmente temos a função de tempo delay(25). Desta forma a cada grau na função sin(x), teremos uma pausa de 25ms (milisegundos), criando assim um efeito pulsante.
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários