Usando as saídas PWM do Arduino

Aprenda as saídas PWM do Arduino e controle a intensidade de LEDs, velocidades de motores, cores de LEDs RGBs e crie novos projetos usando Arduino.

Continuando a sequência de artigos básicos sobre a plataforma Arduino, vamos aprender como utilizar sinais PWM na placa Arduino UNO. No final desse artigo você saberá o que é PWM e como usar o PWM do Arduino para controlar a intensidade de um LED. O conteúdo apresentado servirá de base para suas aplicações usando o PWM do Arduino. 

O que é PWM?

PWM, do inglês Pulse Width Modulation, é uma técnica utilizada por sistemas digitais para variação do valor médio de uma forma de onda periódica. A técnica consiste em manter a frequência de uma onda quadrada fixa e variar o tempo que o sinal fica em nível lógico alto. Esse tempo é chamado de duty cycle, ou seja, o ciclo ativo da forma de onda. No gráfico abaixo são exibidas algumas modulações PWM:

PWM do Arduino

Fonte: http://arduino.cc/en/Tutorial/PWM

Analisando as formas de onda nota-se que a frequência da forma de onda tem o mesmo valor e varia-se o duty cycle da forma de onda. Quando o duty cicle está em 0% o valor médio da saída encontra-se em 0 V e consequentemente para um duty cycle de 100% a saída assume seu valor máximo, que no caso é 5V. Para um duty cycle de 50% a saída assumirá 50% do valor da tensão, 2,5 V e assim sucessivamente para cada variação no duty cycle. Portanto, para calcular o valor médio da tensão de saída de um sinal PWM pode-se utilizar a seguinte equação:

Vout = (duty cycle/100)* Vcc

Onde:

  • Vout – tensão de saída em V;
  • duty cycle – valor do ciclo ativo do PWM em %;
  • Vcc – tensão de alimentação em V.

PWM pode ser usada para diversas aplicações, como por exemplo:

  • controle de velocidade de motores;

  • variação da luminosidade de leds;

  • geração de sinais analógicos;

  • geração de sinais de áudio.

PWM do Arduino

A placa Arduino Uno possui pinos específicos para saídas PWM e são indicados pelo carácter ‘~’ na frente de seu número, conforme exibido a seguir:

PWM do Arduino UNO
Figura 2 – Saídas PWM na placa Arduino UNO

Observa-se na figura acima, que a Arduino Uno possui 6 pinos para saída PWM (3,5,6,9,10,11). Para auxiliar na manipulação desses pinos a plataforma possui uma função que auxilia na escrita de valores de duty cycle para esses pinos, assim você pode facilmente usar o PWM do Arduino UNO e outras placas.

Função analogWrite()

A função analogWrite() escreve um valor de PWM em um pino digital que possui a função PWM. Após a chamada dessa função, o pino passa a operar com uma onda quadrada de frequência fixa e com duty cycle conforme valor passado pela função. A frequência dessa onda, na maioria dos pinos é em tordo de 490 Hz, porém, os pinos 5 e 6 da Arduino UNO operam em 980 Hz.

Para utilizar a função analogWrite() , deve-se configurar o pino correspondente como saída digital. É interessante notar que essas saídas não são conversores digital-analógico como o nome sugere, e estes pinos não estão relacionados às entradas analógicas.

A função analogWrite deve ser utilizada da seguinte forma:

Sintaxe:

analogWrite(pino, valor);

Onde:

  • pino corresponde ao pino que será gerado o sinal PWM;
  • valor corresponde ao duty cycle, ou seja, o valor que permanecerá em nível alto o sinal.

O valor deve ser de 0 a 255 onde com  0 a saída permanece sempre em nível baixo e 255 a saída permanece sempre em nível alto.

Exemplo – Variando o brilho de um LED usando PWM do Arduino

Vamos utilizar a montagem a seguir para exemplificar o uso de um sinal PWM para variação do brilho de um LED, com a placa Arduino UNO:

PWM do Arduino
Figura 3 – Circuito para teste de PWM com Arduino

O circuito possui um LED ligado ao pino 3 (~:PWM) com seu devido resistor e um potenciômetro ligado à entrada analógica 0.  A proposta é controlar a intensidade do brilho do LED através da variação do valor do potenciômetro. Vejamos o sketch a seguir:

Conclusões sobre o PWM do Arduino

A função analogWrite() fornece um modo simples para se trabalhar com sinais PWM, porém não fornece nenhum controle sobre a frequência do sinal aplicado ao pino. Em alguns casos a frequência do sinal é muito importante para o sistema, como por exemplo a frequência de acionamento de uma bobina de um motor. Em um artigo futuro vamos abordar como manipular os registradores do ATmega328 para alterar a frequência do sinal PWM.

O exemplo apresentado acima exibiu como usar o PWM do Arduino para variar a intensidade de um LED. Você pode usar o mesmo programa para variar a velocidade de motores DC, adaptar para criar cores usando LEDs RGBs, etc. Use a imaginação para novos projetos e os coloque em prática. 

Se ficou alguma dúvida, deixe seu comentários abaixo.  

Saiba mais

Primeiros Passos com Arduino

Arduino UNO

Arduino – O documentário

Placas Arduino – trajetória até o UNO

Referências

Aduino Reference – analogWrite()

Arduino Tutorial PWM

Notificações
Notificar
guest
80 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Gabriel l Santos
Gabriel l Santos
11/04/2021 05:09

Ola professor, obrigado pelo conteúdo, tenho aprendido de mais. Tenho projetado uma luminária pro meu aquário, quero usar o Arduino pra controlar a intensidade dos leds mediante ao horário, a ideia é fazer um efeito amanhacer e anoitecer, acredito que com um módulo pwn e um rtc seja possível, a dúvida é como fazer isso com um circuito 12v, seria possível pela saída vin ? Fiquei feliz em saber que é entusiasta do DIY. =)

Felipe Alvarenga
Felipe Alvarenga
Reply to  Gabriel l Santos
08/09/2021 10:54

Gabriel, vc conseguiu ? estou com mesmo problema ….. usar PWM mais com uma saída maior igual a sua de 12 V

Daniel Adolpho
Daniel
09/07/2020 06:43

Olá , seria possível pulsar de 3 até 5 volts com tempo de 0,2 segundos?

Paulo Filho
Paulo Filho
06/12/2019 09:11

Olá, um ótimo artigo sobre o assunto. Com tudo isso queria saber com linha e sintaxe eu poderia acrescentar para mudar a frequencia do PWM em torno de 50hz se possível. Grato.

Rafael
Rafael
03/10/2019 20:48

Eu poderia usar o PWM do arduino para controlar a corrente que um transistor libera para uma carga? Eu estava pensando este sistema para um projeto, porém a corrente mínima para o transistor conduzir não afetaria o sistema? pois haverá um tempo que o PWM estará em OFF não liberando assim esta corrente mínima que o transistor necessita para conduzir.

Murilo
Murilo
04/09/2019 19:48

Olá Fábio quero fazer um controle de fluxo de um protótipo de uma caixa d’água e gostaria de saber se consigo faze-lo com o PWM para não desligar a bomba e só mante-la numa rotação menor para evitar picos e como posso interfacear para usar motor CA?

diar
diar
04/09/2019 10:05

olá sou novo na área e gostaria de saber o valor do resistor usado no projeto?

Alysson
Alysson
03/09/2019 20:29

Por que o valor deve ser de 0 a 255?

flashpaul
flashpaul
08/07/2019 23:25

Olá sou iniciante ! Gostaria de fazer funcionar 4 micro motores vibracall com o arduino nano, pelo que entendi tenho que usar saida do arduino PWM, minha dúvida sobre a Voltagem dos pinos… como cada micro vibracall tem o minimo de 1,5v e 90mA e maximo de 3v e 200mA tenho receio de queimar os pinos, pois me disseram que o maximo nos pinos do arduino é de 40mA. Minha intenção é funcionar um micro motor vibracall de cada vez e nunca mais de um, por um tempo de 3 segundos, porém cada micro motor pode funcionar alternativamente mais de… Leia mais »

Wesley santos maciel
Wesley santos maciel
Reply to  flashpaul
13/08/2019 14:19

Você pode usar transistores como chave para que estes consumam a corrente da fonte e não diretamente do arduino. Caso haja dúvidas visite WSM TRÔNIC (you tube) tenho um exemplo lá.

Berdinio
Berdinio
10/03/2019 09:23

Bom Dia
estou fazendo um projeto queria controlar a velocidade de um motor trifásico com arduino usando o rele shield para acionamento do motor é alguém pode me ajudar

Valdo Souza
Valdo Souza
16/02/2019 09:40

No inversor de frequência, para controle de velocidade em motores de Indução Trifásicos, como se faz para mudar a frequência do PWM? Ou esse valor já é ajustado automaticamente, ao se definir a velocidade no inversor?

WEBINAR

Visão Computacional para a redução de erros em processos manuais

DATA: 23/09 ÀS 17:00 H