Componentes · 6 min de leitura

Como usar um LED RGB: mistura de cores com Arduino, ânodo comum vs cátodo comum

Como funciona um LED RGB e como diferenciar cátodo comum de ânodo comum? Ligação no Arduino, valores de resistor para cada cor, mistura de cores com analogWrite, efeito arco-íris e código para ESP32 e Pico.

Um LED RGB são três LEDs separados em um único encapsulamento: vermelho, verde e azul. Ajustando o brilho de cada um de forma independente, você consegue fazer quase qualquer cor, do amarelo ao ciano e do roxo ao laranja. Cada pixel da tela de um computador funciona com o mesmo princípio. É uma das peças mais divertidas do Arduino para luzes de status, luminárias de ambiente e indicadores de notificação coloridos.

LED RGB de 5 mm com 4 pernas
LED RGB de 5 mm: a mais longa das quatro pernas é o terminal comum; as outras três são os canais vermelho, verde e azul.

Como funciona um LED RGB?

As cores da luz se misturam de forma aditiva: vermelho e verde juntos parecem amarelo, verde e azul dão ciano, vermelho e azul dão roxo (magenta), e os três juntos formam o branco. O Arduino define o brilho de cada canal de 0 a 255 usando PWM. Isso dá, em teoria, 256 × 256 × 256 ≈ 16,7 milhões de combinações. O PWM liga e desliga o LED centenas de vezes por segundo; seu olho não vê a piscada e só percebe o brilho médio.

CorVermelhoVerdeAzul
Vermelho25500
Verde02550
Azul00255
Amarelo2552550
Ciano0255255
Magenta2550255
Laranja255800
Branco255255255

Cátodo comum ou ânodo comum?

A mais longa das quatro pernas do LED RGB é o terminal comum, compartilhado pelos três LEDs. Se ele une os cátodos dos LEDs, o LED é de cátodo comum; se une os ânodos, é de ânodo comum. Por fora eles parecem idênticos, mas a ligação e o código são opostos:

CaracterísticaCátodo comum (CC)Ânodo comum (CA)
A perna longa vai noGND5V
Para acender uma corColoque o pino em HIGH (255)Coloque o pino em LOW (0)
Valor no códigoanalogWrite(pino, valor)analogWrite(pino, 255 - valor)
Totalmente apagado0255
Para descobrir qual é o seu, ligue a perna longa no GND e encoste uma das outras pernas no 5V através de um resistor de 220 Ω. Se a cor acender, o LED é de cátodo comum. Se não, inverta: perna longa no 5V e a outra perna no GND através do resistor; se acender agora, é de ânodo comum.

Ordem dos terminais e ligação no Arduino

Nos LEDs RGB comuns de 5 mm, a ordem dos terminais é vermelho, comum (o mais longo), verde, azul, mas como ela pode variar entre fabricantes, testar cada perna é o mais seguro. Cada cor é ligada a um pino PWM através do seu próprio resistor. No Arduino Uno, os pinos PWM são os marcados com ~: 3, 5, 6, 9, 10 e 11.

PernaLigaçãoPino do Arduino Uno
Vermelho (R)Através de um resistorD9
Comum (a mais longa)GND para cátodo comum, 5V para ânodo comum—
Verde (G)Através de um resistorD10
Azul (B)Através de um resistorD11

Valores de resistor: um resistor separado para cada cor

Cada cor precisa de uma tensão diferente para acender (a tensão direta): cerca de 2,0 V para o vermelho e 3,0–3,2 V para o verde e o azul. Mirando em 20 mA com 5 V, o vermelho precisa de (5 − 2,0) / 0,020 = 150 Ω, e o verde e o azul de (5 − 3,2) / 0,020 ≈ 100 Ω. Na prática, colocar 220 Ω nos três é seguro e ainda dá brilho suficiente; você pode equilibrar as cores no código. Para calcular seus próprios valores, use a calculadora de resistor para LED, e para a tensão direta de cada cor, a tabela de tensões de LED.

Não coloque um único resistor na perna comum. O canal vermelho, que tem a menor tensão direta, vai puxar a maior parte da corrente, as outras cores vão ficar fracas e as suas misturas de cor vão sair erradas. Dê sempre um resistor próprio para cada canal de cor.

Misturando cores com o Arduino

O código abaixo reúne os três canais em uma única função setColor() e mostra sete cores em sequência. Se o seu LED for de ânodo comum, basta definir COMMON_ANODE como true; a função inverte os valores para você.

C++ (Arduino IDE)
1const int R_PIN = 9;
2const int G_PIN = 10;
3const int B_PIN = 11;
4const bool COMMON_ANODE = false;   // ortak anotsa true yap / set true for common anode
5
6void setColor(int r, int g, int b) {
7  if (COMMON_ANODE) { r = 255 - r; g = 255 - g; b = 255 - b; }
8  analogWrite(R_PIN, r);
9  analogWrite(G_PIN, g);
10  analogWrite(B_PIN, b);
11}
12
13void setup() {
14  pinMode(R_PIN, OUTPUT);
15  pinMode(G_PIN, OUTPUT);
16  pinMode(B_PIN, OUTPUT);
17}
18
19void loop() {
20  setColor(255, 0, 0);     delay(1000);  // kırmızı / red
21  setColor(0, 255, 0);     delay(1000);  // yeşil / green
22  setColor(0, 0, 255);     delay(1000);  // mavi / blue
23  setColor(255, 255, 0);   delay(1000);  // sarı / yellow
24  setColor(0, 255, 255);   delay(1000);  // turkuaz / cyan
25  setColor(255, 0, 255);   delay(1000);  // mor / magenta
26  setColor(255, 255, 255); delay(1000);  // beyaz / white
27}

Transições suaves de cor: efeito arco-íris

Em vez de pular de uma cor para outra, se você diminuir um canal enquanto aumenta outro, a luz flui suavemente do vermelho para o verde, do verde para o azul e de volta para o vermelho. O loop abaixo usa a mesma função setColor(); mude o valor do delay para ajustar a velocidade.

C++ (Arduino IDE)
1// setColor() ve pin tanımları yukarıdaki gibi / setColor() and pins as above
2void loop() {
3  for (int i = 0; i < 256; i++) { setColor(255 - i, i, 0); delay(8); }  // kırmızı → yeşil / red → green
4  for (int i = 0; i < 256; i++) { setColor(0, 255 - i, i); delay(8); }  // yeşil → mavi / green → blue
5  for (int i = 0; i < 256; i++) { setColor(i, 0, 255 - i); delay(8); }  // mavi → kırmızı / blue → red
6}
É normal o branco parecer um pouco azulado ou rosado, porque os três LEDs não têm o mesmo brilho. Reduzir os canais verde e azul para 70–80% no código dá um branco mais natural. Colocar uma bolinha de pingue-pongue ou um papel fosco sobre o LED difunde a luz e faz as cores se misturarem muito melhor.

Escolhendo a cor com potenciômetros

Se você ligar três potenciômetros no A0, A1 e A2, pode usar cada um como o botão de um canal de cor. analogRead() devolve um valor de 0 a 1023; dividir por 4 dá a faixa de 0–255 que o PWM espera. A ligação de um potenciômetro é explicada em O que é potenciômetro?

C++ (Arduino IDE)
1// A0, A1, A2'de üç potansiyometre; setColor() yukarıdaki gibi
2// three pots on A0, A1, A2; setColor() as above
3void loop() {
4  int r = analogRead(A0) / 4;   // 0–1023 → 0–255
5  int g = analogRead(A1) / 4;
6  int b = analogRead(A2) / 4;
7  setColor(r, g, b);
8}

LEDs RGB com o ESP32 e o Raspberry Pi Pico

No ESP32 com o core Arduino atual (3.x), analogWrite() funciona em qualquer pino de saída, então o código acima roda do jeito que está depois que você muda os números dos pinos. O único cuidado é a tensão: os pinos têm saída de 3,3 V, então os canais verde e azul, cuja tensão direta fica perto de 3 V, ficam mais fracos. Com 3,3 V, use resistores pequenos, como 47–100 Ω, ou acione o LED com 5 V através de um transistor se quiser um brilho forte de verdade. No Pico, a classe PWM do MicroPython recebe valores de 0 a 65535:

MicroPython
1from machine import Pin, PWM
2import time
3
4pins = [PWM(Pin(n)) for n in (11, 12, 13)]   # GP11 R, GP12 G, GP13 B
5for p in pins:
6    p.freq(1000)
7
8def set_color(r, g, b):                       # 0–255
9    for p, v in zip(pins, (r, g, b)):
10        p.duty_u16(v * 257)                   # 0–65535 (ortak anotta 65535 - v * 257)
11
12while True:
13    set_color(255, 0, 0); time.sleep(1)       # kırmızı / red
14    set_color(0, 255, 0); time.sleep(1)       # yeşil / green
15    set_color(0, 0, 255); time.sleep(1)       # mavi / blue

LED RGB comum ou LED endereçável (WS2812B)?

CaracterísticaLED RGB comumWS2812B (NeoPixel)
Pinos necessários3 pinos PWM por LED1 pino de dados para a fita inteira
Controle de corPelas saídas PWM do ArduinoPor um chip minúsculo dentro de cada LED
BibliotecaNão precisaAdafruit NeoPixel ou FastLED
Ideal para1–2 LEDs, indicadores de statusFitas, anéis, matrizes, iluminação de ambiente

Para uma ou duas luzes coloridas, o LED RGB comum é a solução mais simples e barata. Se você quer colorir dezenas de LEDs individualmente, os 6 pinos PWM do Uno não bastam; é aí que você passa para as fitas WS2812B, que controlam centenas de LEDs por um único fio.

Ideias de projetos com LED RGB

  • Luminária de ambiente: coloque o efeito arco-íris dentro de um pote fosco para ter uma luz noturna suave.
  • Indicador de temperatura: combine com um DHT11 para ter uma luminária que fica azul no frio, verde quando está ameno e vermelha no calor.
  • Misturador de cores: crie qualquer cor à mão com três potenciômetros.
  • Escolha a cor pelo celular: mude a cor da luminária com um seletor de cores em uma página web servida por um ESP32.
  • Luz de notificação: pisque o LED em uma cor específica quando chegar um novo e-mail ou mensagem.
  • Cores no teclado: mostre uma cor diferente conforme o número digitado em um teclado matricial.

Erros comuns e como resolvê-los

  • As cores funcionam ao contrário: você está acionando um LED de ânodo comum como se fosse de cátodo comum; defina COMMON_ANODE como true.
  • Uma cor nunca acende: a ordem dos terminais pode ser diferente do esperado; teste cada perna, uma por uma, com um resistor.
  • As transições saem em degraus, sem tons intermediários: o LED está em um pino sem PWM; no Uno, esses pinos só ficam totalmente ligados ou desligados.
  • As cores falham enquanto um buzzer toca: no Uno, tone() usa o Timer2 e atrapalha o PWM nos pinos 3 e 11; passe o LED RGB para pinos como 5, 6, 9 e 10.
  • Deixar de fora os resistores: corrente demais acaba danificando tanto o LED quanto o pino do Arduino.
  • Muito fraco no ESP32: com 3,3 V, o verde e o azul estão no limite; use resistores menores ou um transistor.

Se você quer entender o básico dos LEDs e por que eles precisam de resistor, dê uma olhada em O que é LED? e O que é resistor? No app BlueGrays você encontra projetos de transição de cores com LED RGB, luminária controlada por teclado e misturador de cores, com esquemas do circuito e código.

Perguntas frequentes

Como sei se o meu LED RGB é de ânodo comum ou de cátodo comum?

Ligue a perna longa no GND e encoste outra perna no 5V através de um resistor de 220 Ω; se acender, é de cátodo comum. Se não, ligue a perna longa no 5V e a outra perna no GND através do resistor; se acender agora, é de ânodo comum. O modo de teste de diodo de um multímetro faz o mesmo trabalho.

Que resistor devo usar com um LED RGB?

Com 5 V, cerca de 150 Ω para o vermelho e cerca de 100 Ω para o verde e o azul é o ideal. Para simplificar, 220 Ω nos três é seguro e ainda dá uma luz forte o bastante. Um resistor separado para cada cor é obrigatório.

Quantas cores um LED RGB consegue fazer?

Cada canal pode ter 256 níveis de brilho, de 0 a 255, então em teoria são 16,7 milhões de combinações. Na prática, seu olho distingue menos cores, e as diferenças de brilho entre os LEDs aproximam alguns tons.

Por que meu LED RGB parece azulado em vez de branco?

Os três LEDs têm brilhos diferentes, e seu olho é mais sensível a algumas cores do que a outras; o azul e o verde costumam dominar. Diminua um pouco esses dois canais no código, ou use resistores maiores neles, para ter um branco mais neutro.

O que acontece se eu ligar um LED RGB em um pino sem PWM?

Esse canal só vai funcionar totalmente ligado ou totalmente desligado; o analogWrite trata 128 ou mais como ligado e qualquer valor menor como desligado. Se os três canais estiverem assim, você só tem 8 cores básicas e nenhuma transição suave.

Quantos LEDs RGB um Arduino Uno consegue controlar?

O Uno tem 6 pinos PWM, então você pode acionar no máximo 2 LEDs RGB com cores independentes. Para mais, use um driver PWM de 16 canais como o PCA9685, ou fitas WS2812B, que controlam centenas de LEDs com um único pino.

Ver todos os projetos
Uso de LED RGB
#39Iniciante
Premium

Uso de LED RGB

Três cores se escondem em um único LED: o LED RGB acende primeiro em vermelho, depois em verde e, por fim, em azul. Cada cor fica acesa por meio segundo e apagada por meio segundo antes de o ciclo rec

4.9(73)
98
Transição suave de cores com LED RGB
#40Iniciante
Premium

Transição suave de cores com LED RGB

Um único LED RGB muda lentamente do vermelho para o verde, do verde para o azul e de volta para o vermelho, repetindo esse ciclo de arco-íris sem parar. Cada transição leva cerca de dois segundos e me

4.8(58)
76
Controle de LED RGB com ESP32
#111Iniciante

Controle de LED RGB com ESP32

Gere inúmeras cores com um único LED RGB em vez de 3 LEDs separados. Como no Arduino, ajustamos os valores R/G/B com analogWrite() para criar uma transição de arco-íris. Você vê a teoria das cores na prática, como vermelho + verde = amarelo.

4.6(29)
51
Luminária com mistura de cores e ESP32 (3 potenciômetros + LED RGB + OLED)
#138Avançado
Premium

Luminária com mistura de cores e ESP32 (3 potenciômetros + LED RGB + OLED)

Uma luminária inteligente que permite misturar a cor que você quiser girando três potenciômetros com o ESP32! Ao girar os potenciômetros de vermelho, verde e azul, o LED RGB de cátodo comum muda de cor em tempo real. O display OLED SSD1306 mostra os valores de cada cor na faixa de 0–255, barras de preenchimento e o código HEX da cor para a web, como #FF8040.

4.7(6)
10
Ciclo de cores com LED RGB no Raspberry Pi Pico (PWM de 3 canais)
#161Iniciante

Ciclo de cores com LED RGB no Raspberry Pi Pico (PWM de 3 canais)

Um LED, milhões de cores! Um LED RGB contém, na verdade, 3 LEDs: vermelho, verde e azul. Controlar cada um com seu próprio canal PWM do Pico mistura as cores: vermelho + verde = amarelo, verde + azul = ciano, os três = branco. Aqui, o LED alterna entre 8 cores. Aprenda sobre múltiplos canais PWM, definição de funções (def set_color(...)), mistura de cores RGB (como funcionam telas e lâmpadas inteligentes), conversão de 8 bits → 16 bits (x257 converte 0–255 em…

0.0(0)
6
Controle de fita WS2812B NeoPixel com ESP32
#126Intermediário
Premium

Controle de fita WS2812B NeoPixel com ESP32

Os LEDs endereçáveis WS2812B (NeoPixel) são LEDs RGB inteligentes que podem ser controlados em cadeia por um único pino de dados. Neste projeto, vamos controlar uma fita WS2812B de 8 LEDs com a biblioteca Adafruit_NeoPixel para criar uma animação suave de arco-íris. Embora o nível lógico de 3,3V do ESP32 funcione sem problemas na maioria dos lotes de WS2812B, vamos mostrar uma solução com um resistor de 470Ω em série e um capacitor de 1.000µF para casos de instabilidade.

4.9(19)
30
Uso da fita LED WS2812B
#69Intermediário
Premium

Uso da fita LED WS2812B

Conheça uma fita LED inteligente em que você pode definir a cor de cada luz individualmente. O Arduino primeiro acende os cinco primeiros LEDs em vermelho, um segundo depois acende os outros cinco em

4.8(54)
70