Início
/
Software
/
Dicas de Software
/
Led RGB anodo comum ou o Led RGB catodo comum? Como identificar e usar com Arduino (circuito e programação)
Led RGB anodo comum ou o Led RGB catodo comum? Como identificar e usar com Arduino (circuito e programação)
Angelo Luis Ferreira | 24/01/2023
Acessos: 13.945
Como usar o led RGB (ânodo comum e cátodo comum) com Arduino
Objetivo
Nesta dica vamos mostrar como usar um led RGB em programação com Arduino. Vamos mostrar também como identificar e diferenciar um led RGB anodo comum de um led RGB catodo comum, evitando-se erros na hora de programar. É muito comum em programação em Arduino, erros de configuração do led RGB em função do seu tipo de fabricação: anodo comum ou catodo comum.
LED RGB: é um componente eletrônico formado por um conjunto de 3 LEDs encapsulados, cada um com uma cor distinta: o vermelho (Red), o verde (Green) e o azul (Blue), podendo cada led ser controlado individualmente. Leia também Led RGB - definições.

Existem basicamente 2 tipos de LED RGB o ânodo comum e o cátodo comum. Observe que para cada uma das cores existe um terminal, e além disso o quarto terminal (maior) deverá ser conectado ao polo positivo (ânodo comum) e ao polo negativo (cátodo comum).

Montagem do led RGB no circuito
Para montarmos o circuito precisamos levar em conta se o led RGB é anodo ou catodo comum. Também precisamos calcular os resistores para cada terminal.
Calculo dos resistores
Para determinar os valores dos resistores para o led RGB, devemos utilizar os dados do fabricante (datasheet). Abaixo, seguem os valores típicos padrão encontrados no mercado:

A partir destes dados podemos calcular o valor dos resistores (ou determinar através da tabela prática: Tabela prática de utilização d leds 3mm e 5m. Para calcular o valor dos resistores leia: Leds ligados em sério ou paralelo ou utilize o aplicativo: Calculador de Led.
Após os cálculos determinamos os seguintes resistores: 2 resistores de 100Ω (terminais cor verde e azul) e 1 resistor de 150Ω (terminal cor vermelho):

Obs: Caso não possua os dados do fabricante (datasheet), utilize como referência os valores dos resistores que mostramos acima, tanto para o LED alto brilho como para o LED difuso. Utilize sempre resistores com valores iguais ou superiores aos calculados.
Cátodo comum X Ânodo comum
Observe no circuito abaixo onde mostramos a montagem dos dois tipos de led RGB, ÂNODO COMUM e CÁTODO COMUM:

Testando o circuito - Identificando o tipo de Led RGB
1. Para testarmos o circuito e verificar se o LED RGB cátodo comum está corretamente montado, conecte o pino maior do componente no GND do Arduino e utilize o código abaixo para testar:
Obs.: No Led RGB cátodo comum a cor é ativada com sinal digital de nível alto, ou seja HIGH (nível lógico 1).
/*******************************************************************************
*
* Usando um LED RGB CATODO COMUM(TESTE)
* http://squids.com.br/arduino
*
*******************************************************************************/
// define pinos de entrada e saída do Arduino
const int R = 12; // terminal Red (vermelho)
const int G = 11; // terminal Green (verde)
const int B = 10; // terminal Blue (azul)
void setup(){
// pin mode - definie entradas e saídas
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
}
void loop(){
// VERMELHO PURO
digitalWrite(R, HIGH);
digitalWrite(G, LOW);
digitalWrite(B, LOW);
delay(1000);
// VERDE PURO
digitalWrite(R, LOW);
digitalWrite(G, HIGH);
digitalWrite(B, LOW);
delay(1000);
// AZUL PURO
digitalWrite(R, LOW);
digitalWrite(G, LOW);
digitalWrite(B, HIGH);
delay(1000);
}
1.1. A cada segundo (1000ms) aparecerá as cores Vermelho, Verde e Azul sucessivamente, nesta ordem.
1.2. Se o LED RGB não acender, inverta a conexão do terminal maior (GND para 5V), pois possivelmente o led que você está utilizando é um LED RGB ânodo comum.
2. Para testarmos o circuito e verificar se o LED RGB ânodo comum está corretamente conectado conecte o pino maior do componente no Vcc (5V) do Arduino e utilize o código abaixo para testar:
Obs.: No Led RGB ânodo comum a cor é ativada com sinal digital de nível baixo, ou seja LOW (nível lógico 0).
/*******************************************************************************
*
* Usando um LED RGB ANODO COMUM (TESTE)
* http://squids.com.br/arduino
*
*******************************************************************************/
// define pinos de entrada e saída do Arduino
const int R = 12; // terminal Red (vermelho)
const int G = 11; // terminal Green (verde)
const int B = 10; // terminal Blue (azul)
void setup(){
// pin mode - definie entradas e saídas
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
}
void loop(){
// VERMELHO PURO
digitalWrite(R, LOW);
digitalWrite(G, HIGH);
digitalWrite(B, HIGH);
delay(1000);
// VERDE PURO
digitalWrite(R, HIGH);
digitalWrite(G, LOW);
digitalWrite(B, HIGH);
delay(1000);
// AZUL PURO
digitalWrite(R, HIGH);
digitalWrite(G, HIGH);
digitalWrite(B, LOW);
delay(1000);
}
2.1. Observe que a cada segundo (1000ms) aparecerá as cores Vermelho, Verde e Azul sucessivamente, nesta ordem.
PWM - Pulse Width Modulation com led RGB
Como demonstrado nos projetos Projeto 14 - Led com efeito dimmer usando potenciômetro e Projeto 18 - Efeito lâmpada pulsante, o led RGB utiliza também o conceito PWM (Pulse Width Modulation, em português, modulação por largura de pulso) no controle da luminosidade (intensidade do brilho dos LEDs).
O Arduino UNO, que utilizamos no exemplo, possui 6 saídas digitais que podem ser utilizadas como PWM, sendo elas: 11, 10, 9, 6, 5 e 3.

Obs.: Está predefinido no Arduino que para ter 0% de PWM, basta escrever: analogWrite(pino a ser gravado, 0) do mesmo modo que, para obter 100% de PWM, basta escrever: analogWrite(pino a ser gravado, 255), ou seja, na estrutura que o Arduino entende como PWM, os valores que vão de 0 (mínimo, ou seja, 0%) até 255 (máximo, ou seja,100%).
Para saber mais sobre PWM, leia o tutorial: O que é PWM e para que serve?
Valores RGB (cores)
Um valor RGB (255, 0, 0) é vermelho puro, enquanto um valor (0, 255, 0) é verde puro e (0, 0, 255), azul puro. Misturando esses valores você pode obter todas as cores. Mesmo se estivesse simplesmente acendendo e apagando os LEDs, sem utilizar luminosidades diferentes, ainda se conseguiria cores diferentes como mostramos na figura abaixo.

Cores disponíveis acendendo e apagando os LEDs em combinações diferentes

Ao ajustar o brilho utilizando PWM, variando de 0 a 255, você também pode obter outras cores. Colocando o LED RPG através de um cilindro de papel, por exemplo, o espectro de luz das três cores primárias e suas intensidades criará uma única cor. O número total de cores disponíveis, utilizando PWM com um intervalo de 0 a 255, é de 16.777.216 cores (256 x 256 x 256).
LED RGB cátodo X LED RGB ânodo (definindo cores)
Como podemos observar nos testes anteriores, no Led RGB ânodo comum a cor é ativada com sinal digital de nível baixo, ou seja LOW (nível lógico 0) e no Led RGB cátodo comum a cor é ativada com sinal digital de nível alto, ou seja HIGH (nível lógico 0).
De forma similar, se utilizarmos valores analógicos na programação, a cor será 100% ativada no Led RGB ânodo comum com o valor 0 (zero) e 0% ativada com o valor de 255. Já no Led RGB cátodo comum a cor será 100% ativada no Led RGB cátodo comum com o valor 255 e 0% ativada com o valor de 0, com base nos valores PWM definidos por meio da função analogWrite().
Para entender melhor essa diferença entre os componentes, veja a tabela abaixo:
|
LED RGB cátodo comum
|
LED RGB ânodo comum |
conexão c/ Arduino |
GND |
Vcc 5V |
cor ativa (digital) |
HIGH |
LOW |
cor 100% ativa (analógico) |
analogWrite(Pino, 255) |
analogWrite(Pino, 0) |
cor 0% ativa (analógico) |
analogWrite(Pino, 0) |
analogWrite(Pino, 255) |
Portanto, quando utilizamos um Led RGB ânodo comum, devemos setar os seus valores para que represente a cor RGB corretamente, pois ela corresponde à um Led RGB cátodo comum.
Definindo cores pela da função analogWrite()
Como vimos acima, os valores analógicos RGB podem variar entre 0 e 255 quando utilizamos o recurso PWM. Sendo assim, podemos gerar as cominações de cores utilizando os valores padrão RGB usando um Led RGB. Entretanto, como os leds ânodo e cátodo são ativados de formas opostas, precisamos atentar na hora de setar os seus valores. Veja os exemplos de cores abaixo:
nome da cor |
cor RGB |
Led RGB cátodo comum
|
Led RGB ânodo comum |
Vermelho puro |
(255, 0, 0) |
(255, 0, 0) |
(0, 255, 255) |
Verde puro |
(0, 255, 0) |
(0, 255, 0) |
(255, 0, 255) |
Azul puro |
(0, 0, 255) |
(0, 0, 255) |
(255, 255, 0) |
Amarelo puro |
(255, 255, 0) |
(255, 255, 0) |
(0, 0, 255) |
MidnightBlue |
(25, 25, 112) |
(25, 25, 112) |
(230, 230, 143) |
Purple |
(128, 0, 128) |
(128, 0, 128) |
(127, 255, 127) |
MediumSeaGreen |
(60, 179, 113) |
(60, 179, 113) |
(195, 76, 142) |
Como podemos observar na tabela acima, os valores das cores são ativados de formas opostas, ou seja:
. Quando Led RGB cátodo cumum = 255 => Led RGB ânodo comum = 255 - 255 = 0
. Quando Led RGB cátodo cumum = 0 => Led RGB ânodo comum = 255 - 0 = 255
. Quando Led RGB cátodo cumum = 25 => Led RGB ânodo comum = 255 - 25 = 230
. Quando Led RGB cátodo cumum = 112 => Led RGB ânodo comum = 255 - 112 = 143
Desta forma, podemos padronizar nosso programa, alterando somente o valor da variável booleana ledType. Para Led RGB cátodo comum ledType = 0 e para Led RGB ânodo comum ledType = 1.
// define se o led RGB é catodo comum(GND) = 0 ou anodo comum(Vcc) = 1
boolean ledType = 1; // ATENÇÃO: ledType = 0 (RGB cátodo comum) e ledType = 1 (RGB ânodo comum)
// exibe cor do led indicador (led rgb)
void setColor(int red, int green, int blue) {
if (ledType == 1) {
red = 255-red, green = 255-green, blue = 255-blue;
}
// ativando led rgb nas cores definida pela distância
analogWrite(R, red);
analogWrite(G, green);
analogWrite(B, blue);
}
Exemplo para usar Led RGB cátodo ou Led RGB ânodo
No exemplo abaixo, vamos fazer um led RGB mudar as cores da tabela anterior, a cada 2 segundos. Para isso, vamos usar o código padrão acima para que o programa funcione para os dois tipos de leds RGB, cátodo comum ou anodo comum, dependendo do valor da variável letType.
/*******************************************************************************
*
* Teste cores usando Led RGB cátodo comum ou Led RGB ânodo comum
* Autor: Angelo Luis Ferreira
* 25/11/2022
* http://squids.com.br/arduino
*
*******************************************************************************/
// define se o led RGB é catodo comum(GND) = 0 ou anodo comum(Vcc) = 1
boolean ledType = 0; // ATENÇÃO: se o led for catodo comum, mude para 0
// define pinos de entrada e saída do Arduino
const int R = 12, G = 11, B = 10; // pinos digitais usados para o led RGB
// define variáveis globais
byte Rval[] = {255,0,0,255,25,128,60};
byte Gval[] = {0,255,0,255,25,0,179};
byte Bval[] = {0,0,255,0,112,128,113};
void setup(){
// pin mode - definie entradas e saídas digitais
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
}
void loop() {
for (byte i=0;i<7;i++) {
setColor(Rval[i],Gval[i],Bval[i]);
delay(1000);
}
}
// exibe cor do led indicador (led rgb)
void setColor(int red, int green, int blue) {
if (ledType == 1) {
red = 255-red, green = 255-green, blue = 255-blue;
}
// ativando led rgb nas cores definida pela distância
analogWrite(R, red);
analogWrite(G, green);
analogWrite(B, blue);
}
A seguir, veja a simulação do sketch acima usando um led RGB cátodo comum:
O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários