fbpx

Controlando o brilho do LED usando potenciômetro e Arduino

O potenciômetro é um componente eletrônico utilizado para limitar o fluxo de corrente elétrica. Desta forma, este dispositivo impõe resistência elétrica em um circuito, assim como um resistor, no entanto esta resistência pode ser variada manualmente.

O potenciômetro normalmente possui três terminais e um eixo giratório para ajuste da sua resistência, que é medida em ohms (Ω). Este componente é amplamente utilizado em amplificadores de áudio, instrumentos musicais eletrônicos, mixers de áudio, eletrodomésticos, equipamentos industriais, joysticks, entre outros. A Figura 1 ilustra um tipo de potenciômetro e sua simbologia.

A imagem ilustra um potenciometro e ao seu lado a sua termologia
Figura 1 – Potenciômetro e sua simbologia.

A proposta deste projeto é controlar a intensidade do brilho de um LED utilizando potenciômetro e Arduino. Ao variarmos a resistência do potenciômetro ocorrerá, proporcionalmente, uma variação de tensão na entrada analógica do Arduino. Quanto maior for esta tensão, maior será a intensidade do brilho do LED.

Para tal, vamos utilizar a técnica PWM, do inglês Pulse Width Modulation, que significa Modulação por largura de pulso e que pode ser utilizado para emular um sinal analógico através de pulsos digitais.

Você já deve ter percebido que algumas portas digitais do Arduino apresentam o símbolo “~”. Esta marcação indica que estes pinos são capazes de realizar PWM. O Arduino UNO possui 6 pinos para saída PWM, sendo 3, 5, 6, 9, 10 e 11.

Nesses pinos de saída digital, o Arduino envia uma onda quadrada ao ligá-los e desligá-los muito rapidamente. Esse padrão ligado/desligado pode simular uma tensão variando entre 0 V e 5 V alterando o tempo em que a saída permanece alta (ligada) e baixa (desligada).  A técnica PWM consiste em manter a frequência de uma onda quadrada fixa e variar o tempo em que o sinal fica em nível alto.

Além disto, vamos usar uma função chamada map, que converte o valor lido da entrada analógica (entre 0 e 1023) para um valor entre 0 e 255 (8bits), que será utilizado para ajustar a intensidade do brilho do LED. Afinal, utilizaremos a leitura analógica para controlar o PWM.

Para saber mais sobre a função map acesse: https://www.arduino.cc/reference/pt/language/functions/math/map/.


MATERIAIS NECESÁRIOS


ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES

Inicialmente, certifique-se que sua placa Arduino UNO esteja desligada. Monte o circuito utilizando a protoboard, o potenciômetro, o LED, o resistor e os fios.

Ao montar seu circuito na protoboard preste atenção nos seguintes pontos:

  • Lembre-se que o LED tem polaridade. O terminar maior tem polaridade positiva, que deve ser conectado ao pino 9, e o lado chanfrado possui polaridade negativa;
  • O primeiro terminal do potenciômetro deve ser conectado ao terra (GND), o segundo ao pino analógico A5 e o terceiro ao 5 V.


ELABORANDO O CÓDIGO

Com o circuito montado, vamos a programação do Sketch. O intuito deste projeto é controlar a intensidade do brilho de um LED por meio da variação da resistência de um potenciômetro. Esta variação provocará uma variação de tensão na porta de entrada analógica (A5) do Arduino.

Vamos entender a lógica de programação :

1.Declarar as variáveis:
Inicializaremos o programa declarando quatro variáveis: Definimos o pino digital 9 à variável ledPin; Definimos o pino A5 à variável potPin; Declaramos a variável valorpot, do tipo inteiro, para armazenar os valores brutos de leitura do potenciômetro. Declaramos a variável pwm, do tipo inteiro, para armazenar os valores convertidos pela função map();

2. Configurar as portas de entrada e saída:
A variável ledPin deve ser configurada como saída (OUTPUT) e potPin como entrada (INPUT);

3. Iniciar a comunicação serial:
A comunicação serial foi inicializada por meio da instrução: Serial.begin(9600);

4. Realizar a leitura da porta analógica:
No loop, efetuamos a leitura da variável potPin (pino A5) e guardamos na variável valorpot, através da função analogRead;

5. Utilizar a função map:
A variável pwm recebe o valor do mapeamento da variável valorpot, convertendo a escala de 0 a 1023 para a escala de 0 a 255. Deste modo, se a variável valorpot for igual a zero, o valor de pwm também será zero, e se o valor da variável valorpot for igual a 1023, o valor da variável pwm será 255. Portanto, os valores da variável pwm irão variar de 0 a 255, conforme o potenciômetro varia de 0 a 1023 de acordo com a posição do seu eixo.

Sintaxe da função map():

Variável = map (valor lido, mínimo do potenciômetro (0), máximo do potenciômetro (1023), novo mínimo (0), novo máximo (255);

6. Imprimir o valor de pwm no monitor serial:
Imprimiremos o valor de pwm no monitor serial por meio da instrução Serial.println(pwm);.

7. Atribuir o valor de pwm para ledPin:
Atribuímos o valor de pwm a variável ledPin, ou seja, enviamos um sinal analógico para saída do LED, com intensidade variável através da instrução analogWrite(ledPin, pwm);

Ao fim, o Sketch ficará da seguinte forma:

/*
  = CONTROLANDO O BRILHO DO LED COM POTENCIÔMETRO =
  =================================================
  == BLOG DA ROBOTICA - www.blogdarobotica.com ==
  =================================================
  Autor: Carol Correia Viana
  E-mail: contato@blogdarobotica.com
  Facebook: facebook.com/blogdarobotica
  Instagram:@blogdarobotica
  YouTube: youtube.com/user/blogdarobotica
  =================================================
  == CASA DA ROBOTICA - www.casadarobotica.com ==
  =================================================
  Facebook: facebook.com/casadaroboticaoficial
  Instagram:@casadarobotica
  =================================================
*/

int ledPin = 9;//Atribui o pino 9 a variável ledPin
int potPin = A5;//Atribui o pino analógico A5 a variável potPin
int valorpot = 0;//Variável responsável pelo armazenamento da leitura bruta do potenciometro
int pwm = 0;//Variável responsável pelo armazenamento do valor convertido pela função map

void setup(){
  pinMode(ledPin, OUTPUT);//Configura ledPin como saída
  pinMode(potPin, INPUT);//Configura potPin como entrada
  Serial.begin(9600);//Inicializa a serial com velocidade de comunicação de 9600.
}

void loop(){
  valorpot = analogRead(potPin);//Efetua a leitura do pino analógico A5 
  pwm = map(valorpot, 0, 1023, 0, 255);//Função map() para converter a escala de 0 a 1023 para a escala de 0 a 255
  Serial.println(pwm);//Imprime valorpot na serial
  analogWrite(ledPin, pwm);//Aciona o LED proporcionalmente à leitura analógica
  delay(500);//Intervalo de 500 milissegundos
}

Espero ter ajudado,

Obrigada a todos e em caso de dúvidas deixe seu comentário abaixo!

Att. Carol Correia Viana

Dúvidas? Deixe seu comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.