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

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
Led Alto Brilho 5mm Led alto brilho 5mm 1 Imagem relacionada

1 led de alto brilho transparente azul

Se você não tiver um led de alto brilho poderá utilizar um led difuso 5mm de qualquer cor.

Resistor  Resistor 100 mΩ  1 Se precisar usar outros valores, calcule o resistor apropriado para o led utilizado - Calcular Resistor.
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 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.  

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 - sabia mais em protoboard

 Montagem do circuito:

1) Veja na figura abaixo como foi montado o nosso circuito no protoboard.

 

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 50%:

Resultado de imagem para pwm 50% gráfico

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.

 

Você está preparado?

JSN Epic template designed by JoomlaShine.com