Controlar (ajustar) o brilho de um LED com Arduino usando PWM

Por: Ricardo B. Morim e Diego J. Stefanello

 

Neste artigo vou lhe mostrar como controlar o brilho de um LED com Arduino utilizando o módulo PWM.

Primeiramente vou lhe mostrar algumas informações técnicas sobre os LEDs e a técnica de modulação denominada Pulse Width Modulation (PWM). Em seguida eu lhe apresentarei o código Arduino, em linguagem de programação C, para que enfim você possa realizar o experimento.

 

  O Diodo Emissor de LUZ (LED)

A abreviação LED ( Light Emitter Diode ) significa, em português, Diodo Emissor de Luz. Portanto, LED é um componente semicondutor que, quando diretamente polarizado, emite luz.

Figura 1: LED vermelho difuso e sua simbologia.

Desde alguns anos, com a evolução tecnológica, tornou-se possível a fabricação de LEDs de alto brilho, o que popularizou ainda mais este componente.

Antes do surgimento do LED de alto brilho, o componente era utilizado massivamente como indicador ou sinalizador, pois a intensidade luminosa era insuficiente para aplicações de iluminação.

Em se tratando de um componente fabricado a base de materiais semicondutores, que contém uma junção PN, o LED precisa ser polarizado corretamente para funcionar. Isto é, caso seja ligado invertido no circuito, o LED não funciona.

Figura 2: LED diretamente polarizado com resistor limitador de corrente.

Uma característica das junções PN é a sua baixa resistência elétrica, uma vez que esteja diretamente polarizada. Nesta condição, a junção PN passa a permitir a passagem de corrente elétrica a partir de uma determinada tensão, com resistência elétrica muito baixa. Com efeito, além da polarização, é necessário que se limite a corrente elétrica que circula pelo LED. Neste artigo esta limitação de corrente elétrica será feita através da utilização de um resistor em série com o LED.

 

A característica de tensão do LED

A tensão direta de uma junção PN de um LED varia de acordo com a cor do mesmo. Isto acontece pelo fato de que para obter diferentes cores são utilizados materiais semicondutores com dopagem diferente. A dopagem é o método pelo qual se adicionam os portadores de corrente ao material base, que geralmente é o silício. Portanto, o valor do resistor limitador de corrente deve ser adequado para cada tipo de LED.

Figura 3: Tensão e corrente nos LEDs vs cores.

 

Cada LED possui especificação da corrente máxima que o mesmo suporta. Ultrapassar este limite resultará em danos ao componente ou comprometimento de sua vida útil. No caso de LEDs pequenos, o limite é na faixa de 20 a 30 mA.

Além do limite prático de corrente do LED, é importante que você saiba que o Arduino possui capacidade limitada de corrente para cada pino. Assim você tomar cuidado para não drenar corrente além do limite individual de cada pino, pois isso poderá danificar a saída do microcontrolador!

Outra informação importante é o fato de que não é aconselhável utilizar o LED no seu limite. No nosso caso, vamos definir a corrente de operação em 80% da máxima, o que equivale a 16 mA.

Você pode consultar os manuais com especificações técnicas dos LEDs, que são fornecidos pelos fabricantes. Assim, você poderá verificar a queda de tensão da junção PN de acordo com a cor de LED, bem como verificar a corrente máxima suportada, ângulo de visão, intensidade luminosa e outros dados pertinentes.

 

O funcionamento do LED

Sabemos que a tensão máxima de saída de cada pino do Arduino é equivalente a tensão de alimentação do seu microcontrolador (Atmega), que no caso do Arduino Uno é de 5 V.

Imagine você, que o LED esteja ligado em série com um resistor e este a um pino do Arduino que está em nível lógico alto, isto é, com uma tensão de 5 V. O pino catodo do LED está ligado ao GND. O esquema elétrico desta ligação pode ser ser visto na Figura 4.

 

Figura 4: Ligação de um LED.

 

Através da Figura 4, você pode calcular a corrente que circula pelo LED, visto que sabemos a sua queda de tensão. Então, usaremos este circuito para estabelecer o valor do resistor, partindo da definição do valor de corrente que desejamos quando o LED estiver no máximo brilho.

Neste artigo vou utilizar a informação da queda de tensão disponível no datasheet para calcular o valor do resistor limitador de corrente para controlar o brilho do LED corretamente.

Vou utilizar inicialmente um LED de alto brilho vermelho, com diâmetro de 5 mm, que possui tensão de trabalho de aproximadamente 2,1 V.

Pelo que foi explicado, para uma corrente de 16 mA e alimentação do Arduino de 5 V, o cálculo do valor do resistor R1, por meio da Lei de Ohm, é dado por:

Observe que 0,016 A = 16 mA. Considere também que o valor calculado para R1 não é padrão comercial. Logo, você deve escolher um valor comercial mais próximo. Normalmente escolheríamos o próximo valor superior, mas neste caso, escolheremos o de 180Ω, pois está muito próximo do calculado.

Este raciocínio e cálculos que eu lhe mostrei serviram para calcular um resistor de polarização para acionar o LED no brilho máximo (dentro da faixa segura), que é proporcional a corrente elétrica que circula pelo mesmo. Agora vou lhe mostrar como modificar o brilho do LED ajustando a largura de pulso (PWM) utilizando o Arduino Uno.

Ajustando o brilho do LED com o PWM do Arduino

Sabemos que é possível variar o brilho do LED, variando a corrente elétrica que circula pela sua junção PN. Assim sendo, vamos utilizar esta propriedade para obter a variação de brilho.

Suponha que, no período de tempo de 1 s, comutemos o pino de saída do Arduino Uno que aciona o LED, invertendo o seu estado exatamente a cada 0,5 s. Nesta situação, o LED ficará piscando.

Se você realizar, hipoteticamente, a soma de luminosidade emitida no período de 1 s, ela será, na média, igual a metade da energia luminosa emitida caso o LED ficasse sempre ligado, sem piscar.

Mas não queremos um LED piscando e sim um ajuste de brilho, então devemos trabalhar com frequências mais altas, onde não conseguimos mais identificar as piscadas do LED. O limite que podemos identificar a cintilação é próximo aos 50Hz, então usaremos frequências acima destas.

OK, ficou confuso, mas você já vai entender. Vou usar um exemplo…. Melhor ainda, uma imagem:


Figura 5: Razão ciclo ativo.

O brilho do LED corresponde a razão entre o tempo do LED ligado e desligado. Com 50% do ciclo ativo, o LED deve brilhar com metade da intensidade, com 80% do clico ativo (80% do tempo ligado e 20% desligado) o LED brilhará mais forte e assim sucessivamente. Entendesse?

Outro detalhe muito importante: o brilho do LED não é proporcional ao ciclo ativo, pois o LED possui uma junção PN, e isso deixa o brilho com uma curva logarítmica.

Então como você deve fazer para controlar o ciclo ativo? Para isso, vamos utilizar o módulo PWM. Não vou entrar em detalhes aqui, pois teremos um post só pra ele, logo logo.. 😉

 


Hora da diversão: praticando a teoria

Para a realização deste experimento, objetivando a visualização do efeito de variação do brilho do LED, eu fiz a implementação de um programa que varia a intensidade luminosa do LED de 0 a 100 %.

Para realizar o experimento, você vai precisar de:

  • Uma placa Arduino (utilizamos o Arduino Uno)
  • Um LED vermelho 5mm (você pode utilizar outros modelos, só não esqueça de recalcular o resistor)
  • Um protoboard (placa de prototipagem)
  • Um resistor de 180Ω
  • Fios diversos para as conexões

 

Montando o circuito

Monte seu circuito conforme a Figura 6. Certifique-se que ele esteja desligado durante a montagem.

 

Figura 6: Ligação LED.

A placa Arduino Uno possui pinos específicos para saídas PWM e são indicados pelo caracter  ‘~’ na frente de seu número. Ao todo são 6 saídas PWM:  3,5,6,9,10,11.

Para auxiliar na manipulação desses pinos a plataforma possui uma função – analogWrite() – 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. Essa é a frequência padrão, porém ela pode ser alterada, caso necessário.

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.

Vamos ao código.

 

Depois de programado, você verá o LED variando o brilho suavemente, como no video abaixo.

 

Você pode usar a imaginação e criar muitos efeitos. Vou te mostrar um bem bacana. Ele é conhecido por heartbeat (batimento cardiaco).

 

Olha ele funcionando:

 

 

Conclusão

Neste artigo, nós mostramos uma forma simples de controlar o brilho de um LED utilizando o PWM do Arduino. Sugerimos que você replique o experimento e tente modificar o programa de acordo com o que achar interessante.

Compartilhe seus resultados conosco! Isto certamente vai ajudar muitas pessoas que também estão iniciando a programar Arduino.

Caso você teve alguma dificuldade com este artigo ou queira comentar a sua implementação, por favor deixe um comentário com a sua dúvida. Teremos prazer em ajudá-lo(a)!

 

1 thought on “Controlar (ajustar) o brilho de um LED com Arduino usando PWM”

  1. Gostaria que vocês postassem mais ideias de como resolver problemas cotidianos com Arduíno, como eliminar ruídos do ADC, modos de baixo consumo ou ainda, como usar ModBus no Arduino. Tem jeito?

E aí, gostou? Opine. Assim poderemos melhorar.

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