Ajustando o brilho de um LED por PWM com Arduino Deixe um comentário

Neste pequeno tutorial iremos mostrar como controlar o brilho de um LED utilizando a técnica de PWM com Arduino. Além de controle de LEDs também é possível utilizar essa mesma técnica para controle de rotação de motores, servos e etc.

Montagem do circuito

O circuito do PWM (Pulse Width Modulation) com Arduino é bem simples e requer apenas um LED, resistor limitador de corrente, jumpers macho/macho e protoboard.

No Kit Arduino Start da FILIPEFLOP você encontra todos esses componentes e mais alguns, para avançar nos estudos criando outros projetos.

Kit Arduino

O circuito deve ficar da seguinte maneira:

Circuito LED com PWM com Arduino

Programação Arduino

Compile o código e grave em seu Arduino. Note que o LED começa com um brilho bem fraco, vai aumentando seu brilho suavemente até alcançar seu brilho máximo. O olho humano não vê, mas o que está acontecendo é um processo de ligar/desligar o LED rapidamente variando assim a tensão e consequentemente o brilho. A seguir faremos uma explicação mais detalhada do código.

Código PWM com Arduino em detalhes

Primeiramente foram setadas as variáveis do ledPin, 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% do tempo e 75% em OFF, logo duty cicle de 25%. O valor 191 terá o teu duty cicle de 75% e o valor 255 de 100%. Veja a figura a seguir exemplificando este processo:

PWM

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

Veja também mais algumas informações sobre a função analogWrite() e PWM no site do Arduino.

Gostou do post do PWM com Arduino? Deixe seu comentário logo abaixo. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!

Posts Relacionados

Deixe uma resposta

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