Skip to Content

Como controlar um LED RGB com Arduino

Como controlar um LED RGB com Arduino

Este artigo irá guiá-lo pelos conceitos básicos de utilização de um LED RGB com Arduino, para que possa criar as suas próprias cores com a ajuda de potenciômetros.

Vou mostrar-lhe diagramas de ligação passo a passo e explicar o código para que compreenda completamente como usar este componente.

Após este tutorial, deverá ter um circuito que ilumina numa cor à sua escolha usando valores RGB, controlados por potenciômetros e mostrados no Monitor Serial.

Materiais

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Hardware

  • x1 Arduino Uno Rev3 (Amazon)
  • x1 LED RGB, cátodo comum (Amazon)
  • x3 Resistores de 220 Ohm (Amazon)
  • x3 Potenciômetros de 10k Ohm (Amazon)
  • x1 Breadboard (Amazon)
  • x~17 Fios jumper (Amazon)
  • x1 Cabo USB B (Amazon)

Software

  • Arduino IDE

Também pode encontrar LEDs RGB em KY-016 módulos, que têm o LED e os resistores necessários numa única PCB.

Estes módulos não permitem flexibilidade na construção do circuito, mas são mais plug-and-play do que as alternativas. 

Não os recomendaria, prefiro a flexibilidade de usar resistores, e algumas análises mostram reprodução de cor pobre ao usar valores RGB.

Instruções

Passo 1 – Ligar o LED RGB

Este diagrama de ligação mostra como conectar um LED RGB à placa Arduino.

Note que este é um LED de cátodo comum, em que o pino mais longo está ligado ao terra; mais à frente explicarei o que significa cátodo comum.

Wiring of RGB LED with Arduino
Ligação do LED RGB ao Arduino

As ligações estão também indicadas na tabela abaixo.

Componente Pino Arduino
LED – Vermelho 11
LED – Cátodo GND
LED – Verde 10
LED – Azul 9

Certifique-se de incluir um resistor de 220Ω entre os pinos vermelho, verde e azul do LED e as saídas para evitar danos ao LED e ao Arduino.

Noções básicas sobre LED RGB

Um LED RGB pode ser visto como três LEDs — um vermelho, um verde e um azul — num único pacote; este LED único brilha na combinação das intensidades vermelha, verde e azul.

Os LEDs RGB parecem LEDs normais com quatro pinos, sendo o mais longo o pino comum.

Closeup of a surface-mount RGB LED.
Close-up de um LED RGB de montagem superficial. Fonte: LEDsupply

LEDs RGB de Cátodo Comum e Ânodo Comum

Mencionei anteriormente LEDs de cátodo comum e ânodo comum. Os LEDs RGB existem em dois tipos: cátodo comum e ânodo comum.

Nos LEDs de cátodo comum, o pino mais longo liga-se ao GND e os seus componentes acendem com um sinal de 5V; nos LEDs de ânodo comum é o contrário: o pino mais longo vai a 5V, e um sinal de 0V liga os componentes.

Neste exemplo, usaremos LEDs de cátodo comum; se tiver um LED RGB de ânodo comum, a ligação e as saídas terão de ser invertidas.

A única forma de saber se o seu RGB é cátodo comum ou ânodo comum é testando o LED; recomendo testar com um multímetro usando a função de diodo.

Para testar, coloque a sonda negativa no pino comum e a sonda positiva em qualquer outro pino; se o LED acender, é cátodo comum.

Se não acender, coloque a sonda positiva no pino comum e a negativa em qualquer outro pino; o LED deve acender, indicando que é ânodo comum.

Se não tiver um multímetro, pode fazer isto com os pinos 5V e GND do Arduino, apenas certifique-se de ter um resistor de 220Ω no circuito.

Controlar o Brilho do LED com PWM

O brilho de um LED é controlado pela corrente que passa por ele, mas não podemos controlar diretamente a corrente porque o Arduino Uno não tem saídas totalmente analógicas; para controlar o brilho usaremos Modulação por Largura de Pulso (PWM).

O PWM liga e desliga a saída periodicamente, e o tempo que a saída permanece ligada determina o brilho do LED.

O PWM liga e desliga a saída periodicamente, e o tempo que a saída permanece ligada determina o brilho do LED.

A intensidade do LED é determinada pelo ciclo de trabalho do PWM, que é o tempo que a saída fica ligada. Um ciclo de trabalho de 50% significa que a saída está alta 50% do tempo e baixa os outros 50%.

Este ciclo ocorre a 490 Hz, 490 vezes por segundo, e pode controlar este ciclo de trabalho com AnalogWrite.

O PWM liga e desliga a saída periodicamente, e o tempo que a saída permanece ligada determina o brilho do LED.

Illustration of different duty cycles
Ilustração de diferentes ciclos de trabalho. Fonte: Sparkfun

Passo 2 – Ligar os Três Potenciômetros

Neste passo, precisa de ligar três potenciômetros a 5V, GND e aos pinos analógicos A0, A1 e A2.

As pernas exteriores ligam-se a 5V e GND, a perna do meio liga-se aos pinos analógicos conforme esta figura:

Connecting potentiometers to control the RGB LEDs
Ligação dos potenciômetros para controlar os LEDs RGB

Em forma de tabela:

Componente Pino Arduino
Pino mais à direita (qualquer) 5V
Pino mais à esquerda (qualquer) GND
Pino do meio (vermelho) A0
Pino do meio (verde) A1
Pino do meio (azul) A2

Usar um Potenciômetro como Entrada Analógica

Para controlar os valores do LED RGB, usará as saídas dos potenciômetros (pino do meio) como entradas analógicas.

O Arduino Uno tem 6 entradas analógicas, rotuladas de A0 a A5; estas envolvem um Conversor Analógico-Digital (ADC) de 10 bits com 6 canais.

Este conversor analógico-digital retorna um número de 0 a 1023 (1024 bits = 2¹⁰ = 10 bits), dependendo da tensão que lê num canal.

Vamos alterar o ciclo de trabalho do PWM dos componentes do LED conforme este valor.

Pode considerar um potenciômetro neste circuito como um divisor de tensão: ao rodar o botão, a resistência do pino do meio muda, e a tensão também.

Isto “divide” a entrada de 5V em duas partes se medir a tensão entre a saída e 5V, e entre a saída e GND.

Passo 3: Código de Exemplo Arduino RGB LCD

Agora que a ligação está feita, só falta ligar o Arduino ao seu PC e carregar o sketch.

Pode carregar o código seguinte através do Arduino IDE, pode copiar o código clicando no botão no canto superior direito do campo de código.

/*Example sketch to control an RGB LED with Arduino using potentiometers
More info: https://www.makerguides.com */

//Definition of pins: outputs
#define redPin 11
#define greenPin 10
#define bluePin 9 

//Definition of pins: analog inputs
#define redPot A0
#define greenPot A1
#define bluePot A2

int redVal, greenVal, blueVal; // RGB component values

void setup() {
  //Pin definitions
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  
  pinMode(redPot, INPUT);
  pinMode(greenPot, INPUT);
  pinMode(bluePot, INPUT);

  Serial.begin(9600);
}

void loop() {
  //Reading potentiometer values
  //When the pot is in the leftmost position, the voltage reading is 0
  redVal = analogRead(redPot)/4;
  greenVal = analogRead(greenPot)/4;
  blueVal = analogRead(bluePot)/4;

  //Sets the individual colors with the pot values
  analogWrite(redPin, redVal);
  analogWrite(greenPin, greenVal);
  analogWrite(bluePin, blueVal);

  delay(50);

  //Printing the values of Red, Green and Blue in a single line
  Serial.print("R: "); Serial.print(redVal);
  //The \t character creates a tab space between colors
  Serial.print("\tG: "); Serial.print(greenVal);
  //Final value is Serial.println to create a new line between readings  
  Serial.print("\tB: "); Serial.println(blueVal); 
}

Como o Código Funciona

O primeiro passo é definir os pinos relevantes, feito através da instrução #define que substitui a palavra-chave definida pelo valor desejado quando o programa é compilado.

Com isto definimos as saídas do LED vermelho, verde e azul como os pinos 11, 10 e 9 respetivamente.

Depois fazemos o mesmo procedimento com as entradas dos potenciômetros, usando os pinos analógicos A0, A1 e A2.

Também defini três variáveis globais, uma para cada pino RGB. Estes valores são definidos como inteiros, que deve usar sempre que trabalhar com números inteiros.

O valor de um inteiro pode variar entre -2.147.483.648 e 2.147.483.647. Se quiser ser mais eficiente com a memória do Arduino pode usar o tipo de dados byte , que varia de 0 a 255.

Isto não é necessário neste exemplo simples, mas é útil ter em mente em sketches mais complexos.

//Definition of pins: outputs
#define redPin 11
#define greenPin 10
#define bluePin 9 

int redVal, greenVal, blueVal; //RGB component values

Na função setup() do sketch definimos os pinos do LED como Outputs, e os pinos dos potenciômetros como inputs usando a função pinMode().

Depois iniciamos o buffer Serial a 9600 baud com Serial.begin(9600); com esta função poderá ler os valores de cor que imprime numa secção posterior do sketch.

void setup() {
  //Pin definitions
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  
  pinMode(redPot, INPUT);
  pinMode(greenPot, INPUT);
  pinMode(bluePot, INPUT);

  Serial.begin(9600);

Agora passamos para a função loop(). Primeiro, começamos por ler os valores dos potenciômetros.

Isto é feito usando a função analogRead(), onde especifica o pino e esta retorna um valor entre 0 e 1024, como mencionado anteriormente.

Infelizmente, para controlar os LEDs com a função analogWrite() precisamos de valores entre 0 e 255; para isso dividimos o valor lido por 4 e atribuímos às nossas variáveis inteiras.

//Reading potentiometer values
//When the pot is in the leftmost position, the voltage reading is 0V
redVal = analogRead(redPot)/4;
greenVal = analogRead(greenPot)/4;
blueVal = analogRead(bluePot)/4;

Neste passo uso as saídas PWM do Arduino para acender os pinos vermelho, verde e azul do LED RGB com os valores inteiros obtidos dos potenciômetros; só precisa especificar o pino e o número entre 0 e 255.

//Sets the individual colors with the pot values
  analogWrite(redPin, redVal);
  analogWrite(greenPin, greenVal);
  analogWrite(bluePin, blueVal);

De seguida introduzo um pequeno atraso no código, faço isto para evitar que o monitor serial role demasiado rápido, mantendo o LED RGB responsivo às entradas.

Este atraso dura 50 milissegundos: 50 milésimos de segundo ou 0,05 segundos.

Pode ajustar este atraso como quiser, apenas note que um atraso muito grande fará com que os valores RGB atualizem mais lentamente.

delay(50);

Finalmente, para verificar quais os valores RGB mostrados no LED, vamos imprimi-los no monitor serial.

Para maior clareza, estes serão impressos numa única linha. Para isso usaremos a função Serial.print().

Aqui imprimo a letra correspondente a cada componente do LED RGB e o seu valor escrito. Usei o caractere de escape \t para criar um espaçamento de tabulação entre cada cor, escape characters seguido de uma barra invertida, que não aparece na string impressa, pois executa funções especiais.

Além disso, a última função serial é Serial.println(), que garante que a próxima mensagem serial aparece numa nova linha.

Serial.print("R: "); Serial.print(redVal);
Serial.print("\\tG: "); Serial.print(greenVal);
Serial.print("\\tB: "); Serial.println(blueVal);

Para ver as mensagens no monitor serial, pressione Ctrl+Shift+M no Arduino IDE, ou clique no ícone da lupa. Certifique-se de que a taxa de baud está definida para 9600 para ler corretamente as mensagens.

Deverá ver algo semelhante à imagem seguinte:

Output on Serial Monitor
Saída no Monitor Serial

É isso! Se seguiu os passos corretamente, deverá conseguir controlar o LED RGB e produzir todo o tipo de cores usando os potenciômetros.

Cor Aditiva

A propriedade das luzes de cores diferentes se combinarem para criar uma nova cor chama-se cor aditiva.

Esta propriedade permite que os ecrãs mostrem cerca de 16 milhões de tons de cor: definindo as luzes vermelha, verde e azul para um valor de 0 a 255, tal como no nosso projeto.

Pode experimentar algumas das combinações básicas mostradas na imagem abaixo, ou ir a um color picker e criar a sua própria!

Os resultados podem variar: alguns componentes nos LEDs RGB são mais fortes que outros e podem precisar de ajuste.

Example values for colors through using the RGB components
Valores de exemplo para cores usando os componentes RGB. Fonte: LEDSupply

Conclusão

Neste artigo, mostrei-lhe como usar um LED RGB com Arduino: a sua ligação, as saídas analógicas necessárias, e um circuito simples que mostra como personalizar facilmente a cor do LED.

Se tiver dúvidas ou sugestões para este tutorial, deixe um comentário abaixo.

Adoraria ajudar!