Ajustando o Brilho de um LED por PWM 11

Conforme prometido no post anterior,  iremos mostrar como você pode ajustar o brilho de um LED através de um PWM (Pulse Widht Modulation). Os conceitos serão explicados posteriormente, vamos nos concentrar agora na montagem.

Materiais necessários: 1 LED, 1 resistor para limitar a corrente no LED, jumpers, protoboard e Arduino. Para este projeto a FILIPELOP recomenda o Kit Arduino Start.

Conecte os componentes como mostra a imagem abaixo:

Ajustando o Brilho de um LED por PWM

Código.:

Compile o código e rode em seu Arduino. Você verá que o LED pulsará em ON/OFF suavemente em vez de um simples ON/OFF abrupto. Será desta forma que controlaremos o brilho de um LED. Abaixo uma explicação mais profunda do código.

Código Overview.:

Primeiramente foi setado as variáveis do LED Pin, um float (floating point data type) para a onda seno, e um ledVal que será o valor inteiro a ser enviado para saída digital PWM Pin 11.

O conceito aqui é que estamos criando uma onda seno em que o brilho do LED a está seguindo em parte da onda, fazendo com que o valor do brilho seja alterado mais vagarosamente do que simplesmente brilho máximo e mínimo.

Como a função seno é somente positiva até 180 graus o laço for limita os valores entre 0 e 179, logo não haverá resultados negativos e o valor para o brilho somente poderá variar entre 0 e 255. Vale ressaltar que a função seno recebe valores apenas em radianos, logo é necessário converter de graus para radianos como mostra o código abaixo.

sinVal = (sin(x*(3.1412/180)));

Os valores do seno serão multiplicados por 255 e o resultado será transformado em inteiro, trancando assim a casa decimal para que seja possível enviar para a saída digital PWM Pin 11.

analogWrite(ledPin, ledVal); 

Este trancamento significa que você converteu o ponto flutuante float em um inteiro, eliminando assim possíveis casas decimais. Mas como posso enviar um sinal analógico por uma porta digital?

Se você olhar o Arduino verá que em alguns pinos digitais está escrito PWM, este pinos são diferentes dos outros pois são capazes de enviar um sinal PWM, que é uma técnica usada para digitalizar sinais analógicos.  Nestes pinos, o Arduino envia uma onda quadrada alternando o pino em ON/OFF rapidamente. A sequência destes ON/OFFs podem simular a variação de tensão entre 0 a 5v. Isto é feito trocando-se a quantidade de tempo que a saída fica em 1 (on) ou em 0 (off). A duração deste tempo é conhecida como pulse widht (largura de pulso).

Por exemplo, caso você envie o valor 0 pela saída digital PWM Pin 11 usando analogWrite(), o período em ON será zero, ou terá 0% de duty cycle (ciclo de trabalho). Se enviar o valor 64 (25% do valor máximo 255) o pino ficará em ON por 25 porcento do tempo e 75 porcento em OFF, logo duty cicle de 25%. O valor 191 terá o teu duty cicle de 75% e o valor 255 de 100%.

Logo basta escolher a intensidade do brilho que se encaixa melhor em seu projeto e enviar via PWM conforme explicamos acima.

Este foi mais um projeto da FILIPELOP. Gostou? Compartilhe!

Posts Relacionados

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

11 Comentários

  1. Gostei, simples, bem explicado e funcional!

    1. Valeu Celso !

      Abraço.

      Adilson – Equipe FILIPEFLOP

  2. Muito bem explicado!
    Me ajudou muito num projeto aqui..
    Obrigado!

    1. Valeu Rafael! Abraço.

      Equipe FILIPEFLOP

  3. Olá obrigado por nos ajudar sempre, como faria se fosse fazer este controle, mas, com uma fita de LED por exemplo, pois, ai a corrente seria maior que o pino do Arduino suporta.
    Estou querendo fazer isso no meu aquário como se fosse o amanhecer e o anoitecer.

    1. Bom dia Tiago,

      São leds endereçáveis ? Você pode usar esse post como base: http://blog.filipeflop.com/arduino/pisca-pisca-com-arduino.html

      Abraço!

      Adilson – Equipe FILIPEFLOP

  4. Como faria para controlar um motor de passo (acionado junto ao tb6560) por pwm, sendo que o sinal de referencia é um encoder?

  5. Boa noite.

    Executei seu código, e funcionou perfeitamente.
    Tentei adaptar para aumentar o brilho com determinada tecla do IR, e diminuir com outra tecla, mas não funcionou.
    Poderia dar um auxilio?
    Segue o código:

    #include

    int RECV_PIN = 2;
    float armazenavalor;
    int led = 11;
    float sinVal;
    int ledVal;
    int valor = 0;

    IRrecv irrecv(RECV_PIN);
    decode_results results;

    void setup()
    {
    pinMode(led, OUTPUT);
    Serial.begin(9600);
    irrecv.enableIRIn(); // Inicializa o receptor IR
    }

    void loop()
    {
    if (irrecv.decode(&results))
    {
    Serial.print(“Valor lido : “);
    Serial.println(results.value, HEX);
    armazenavalor = (results.value);
    if (armazenavalor == 0x20DF8877) //Verifica se a tecla 1 foi acionada
    {
    valor = valor + 50;
    sinVal = (sin(valor*(3.1412/180)));
    ledVal = int(sinVal*255);
    analogWrite(led, valor); //Aumenta brilho
    delay(25);
    }
    if (armazenavalor == 0x20DF48B7) //Verifica se a tecla 2 foi acionada
    {
    valor = valor – 50;
    sinVal = (sin(valor*(3.1412/180)));
    ledVal = int(sinVal*255);
    analogWrite(led, ledVal); //Diminui brilho
    delay(25);
    }
    irrecv.resume(); //Le o próximo valor
    }
    }

  6. Olá
    Estou fazendo um projeto com fita de led rgb e quero controlar ela usando arduino, modulo bluetooth e um app. Posso fazer o mesmo processo do que com o led ou tenho que fazer alguma modificação?

  7. Olá Adilson tudo bem?!

    Show de bola seu exemplo de controle pwm com o led, porém tenho um projeto que preciso controlar manual a intensidade da saída pwm, por exemplo, num determinado momento preciso que o led tenha 20% da sua luminosiadade, num outro momento preciso que tenha 70%, em um outro 50% em outro 100% e assim por diante!
    Como posso fazer este controle sem o potenciomentro?
    Vou controlar por uma página web mas tendo como controlar ele pelo Serial Monitor depois para a página web consigo, não sei como descrever o código do arduino pra fazer este controle, podes me ajudar?
    Grande Abraço

  8. Como faço para utilizar em duas portas? No caso portas 11 e 10!