Controlando brilho de LED com potenciômetro e Arduino

Eletrônica Arduino 17 de Novembro de 2019 às 12:03

O Fade (Desvanecer) é um efeito suave de transição que podemos utilizar em diversas aplicações, como por exemplo em edições de som, vídeo e controle de luminosidade. O intuito desde tutorial é realizar o controle de brilho de um LED utilizando a plataforma Arduino e seus recursos, para isso é necessário entender alguns conceitos básicos como sinal PWM, escrita e leitura de dados e as diferenças entre porta analógica e digital do microcontrolador.

Entendendo o conceito

Os conceitos básicos do sinal PWM (Pulse Width Modulation) foram explicados detalhadamente no artigo Utilizando PWM para controlar LED no Raspberry Pi com Guizero, é uma leitura recomendada para entender o funcionamento das funções do Arduino. Para trabalhar com o sinal PWM no Arduino Uno é necessário utilizar os pinos que possuem a marcação "~" que são os pinos 3, 5, 6, 9, 10 e 11, além disso precisamos acionar este sinal no código aplicando a função analogWrite(pino, valor), onde o valor será a porcentagem de duty cycle, variando de 0% a 100% e refletindo no pino digital de 0 a 255.

Podemos realizar um teste para visualizar o sinal PWM agindo na luminosidade de um LED com o efeito de Fade In e Out automático. Para isso separe os seguintes materiais necessários e veja o diagrama esquemático abaixo.

  • Arduino Uno R3 com cabo USB
  • 1 Protoboard
  • 1 LED
  • 1 Resistor de 220R
  • Fios
Esquema para controle de luminosidade com PWM e Arduino.

Abra a IDE oficial do Arduino e cole este código, configure a porta COM e placa conforme o seu Arduino. Compile e envie este Sketch para ver o resultado final.

/*
 * Efeito de Fade In e Out em LED.
 * 
 * Autor: tecdicas
 * https://tecdicas.com/
 * 
 * 09/05/2019
 */

// Pino PWM
#define led 9 

// Valor máximo = 255
int valor = 255;
int tempo = 10;

void setup()
{
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}

void loop()
{
  // Utilize o Monitor serial
  for(int x = 0; x < valor; x++)
  {
    analogWrite(led, x);
    Serial.print("Aumentando..");
    Serial.println(x);
    delay(tempo);
  }

  for(int y = valor; y > 0; y--)
  {
    analogWrite(led, y);
    Serial.print("Diminuindo..");
    Serial.println(y);
    delay(tempo);
  }
}

Este código faz o efeito de forma automática utilizando duas estruturas de repetição FOR, a primeira estrutura compara se a variável local x (0) é menor que o valor (255), se x é igual a 255 o incremento e a estrutura são finalizados pela condição. A segunda estrutura entra em ação, onde a variável local y recebe o valor (255) e compara se y é maior que 0, se y é igual a 0, o decremento e a segunda estrutura são finalizados pela condição, repetindo este processo infinitamente pelo void loop().

Você pode testar modificando a variável valor, utilizando valores como 100 ou 50, deixando o efeito mais rápido e menos luminoso, pois o duty cycle e a tensão do pino não estão em seu 100%! No artigo recomendado anteriormente possui um cálculo para a tensão média, utilizando o valor de duty cycle e tensão do pino. Também é interessante visualizar esta tensão utilizando um multímetro em DC Volts.

Controle manual

Entendendo o funcionamento do PWM no Arduino Uno, podemos adicionar um controle manual para variar o duty cycle, como um potenciômetro. O potenciômetro é um resistor variável, ele tem a capacidade de alternar sua resistência até o limite especificado pelo componente, sendo os mais comuns de 10KOhms e 100KOhms. Utilizando a mesma montagem anterior adicione um potenciômetro de 100K, onde seu pino central será conectado no pino analógico A0 e os demais no 5V e GND.

Esquema para controle de luminosidade utilizando um potenciômetro e Arduino.

Abra um novo projeto na IDE Arduino e cole este código, compile e envie para o microcontrolador.

/*
 * Efeito de Fade In e Out em LED com potenciômetro.
 * 
 * Autor: tecdicas
 * https://tecdicas.com/
 * 
 * 09/05/2019
 */

#define led 9
#define potenciometro A0

int valor = 0;

void setup()
{
  pinMode(led, OUTPUT);
  pinMode(potenciometro, INPUT);
}

void loop()
{
  valor = analogRead(potenciometro); // Ler o potenciometro e colocar na variável "valor"

  analogWrite(led, valor / 4); // Max pino analógico 1023 - Max pino digital 255.

}

Com o pino analógico do potenciômetro configurado como INPUT, podemos ler o seu valor utilizando a função analogRead(pino) e armazenando na variável valor. Utilizando a função analogWrite(pino, valor) podemos modificar a luminosidade do LED com o valor recebido do potenciômetro dividido por 4, esta divisão é uma compatibilidade necessária para o pino digital, onde 1023 / 4 = 225,75.

Montagem para controle manual de luminosidade de LED com potenciômetro e Arduino Uno.