PWM é uma técnica utilizada para controle de dispositivos variando a intensidade. Por exemplo, intensidade de giro de um motor, brilho de uma lâmpada e etc. Para exemplificar o uso de PWM vamos montar um circuito com Arduino para controlar o brilho de um LED. Iremos explicar mais sobre a técnica do PWM analisando o código exemplo mais adiante. Assim você já terá uma ideia para usar em seus projetos o PWM com Arduino.
Material Necessário
1x LED 5mm vermelho
1x Resistor 1K ohm
1x Jumpers macho-macho
Montagem do projeto PWM com Arduino
Programação Arduino
// Projeto Brilho LED PWM int ledPin = 11; float sinVal; 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 sinVal = (sin(x*(3.1412/180))); ledVal = int(sinVal*255); analogWrite(ledPin, ledVal); delay(25); } }
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.
Entendendo a programação PWM com Arduino
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 com Arduino, 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.
Gostou de usar 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! Vejas também outros projetos de eletrônica aqui.