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Ω  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.

 

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