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.

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.
| Cor | Vermelho | Verde | Azul |
|---|---|---|---|
| Vermelho | 255 | 0 | 0 |
| Verde | 0 | 255 | 0 |
| Azul | 0 | 0 | 255 |
| Amarelo | 255 | 255 | 0 |
| Ciano | 0 | 255 | 255 |
| Magenta | 255 | 0 | 255 |
| Laranja | 255 | 80 | 0 |
| Branco | 255 | 255 | 255 |
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ística | Cátodo comum (CC) | Ânodo comum (CA) |
|---|---|---|
| A perna longa vai no | GND | 5V |
| Para acender uma cor | Coloque o pino em HIGH (255) | Coloque o pino em LOW (0) |
| Valor no código | analogWrite(pino, valor) | analogWrite(pino, 255 - valor) |
| Totalmente apagado | 0 | 255 |
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.
| Perna | Ligação | Pino do Arduino Uno |
|---|---|---|
| Vermelho (R) | Através de um resistor | D9 |
| Comum (a mais longa) | GND para cátodo comum, 5V para ânodo comum | — |
| Verde (G) | Através de um resistor | D10 |
| Azul (B) | Através de um resistor | D11 |
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.
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ê.
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.
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}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?
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:
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 / blueLED RGB comum ou LED endereçável (WS2812B)?
| Característica | LED RGB comum | WS2812B (NeoPixel) |
|---|---|---|
| Pinos necessários | 3 pinos PWM por LED | 1 pino de dados para a fita inteira |
| Controle de cor | Pelas saídas PWM do Arduino | Por um chip minúsculo dentro de cada LED |
| Biblioteca | Não precisa | Adafruit NeoPixel ou FastLED |
| Ideal para | 1–2 LEDs, indicadores de status | Fitas, 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.
Projetos para montar depois desta leitura
Ver todos os projetos
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

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

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.

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.

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…

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.

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
Mais artigos
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja

