Antes de começar

Quatro ideias que valem para todos os projetos. Leia uma vez e consulte sempre que ficar em dúvida.

Protoboard

Em cada coluna, os 5 furos de cima (a–e) são ligados entre si, assim como os 5 de baixo (f–j). O canal central separa as duas metades. Os trilhos + e − correm de ponta a ponta e distribuem 5 V e GND.

LED e resistor

O LED tem polaridade: perna longa = ânodo (+), perna curta (lado chato) = cátodo (−). Nunca ligue um LED direto a um pino: use sempre um resistor em série (aqui, 220 Ω: vermelho, vermelho, marrom).

Lendo os diagramas

As colunas da protoboard são numeradas de 1 a 30 e as linhas vão de a a j. Fio vermelho = 5 V, fio preto = GND. Os pontinhos animados mostram o sentido convencional da corrente (do + para o −).

Software e segurança

Instale a Arduino IDE, escolha Ferramentas → Placa → Arduino AVR Boards → Arduino Uno e a porta COM correta. Monte e altere os fios sempre com o cabo USB desconectado e confira tudo antes de ligar.

Piscar LED (Blink)

O “Olá, mundo!” da eletrônica: um LED que acende e apaga continuamente, um segundo em cada estado. Você vai ligar sua primeira saída digital do Arduino e aprender a controlar o tempo com código.

  • saída digital
  • delay()
  • nível: iniciante
  • ~15 min

Objetivos de aprendizagem

  • Montar um circuito com LED e resistor limitador de corrente na protoboard.
  • Configurar um pino digital como saída com pinMode().
  • Alternar o pino entre HIGH (5 V) e LOW (0 V) com digitalWrite().
  • Controlar o tempo de cada estado com delay().
  • Calcular o valor do resistor com a Lei de Ohm.

Componentes necessários

  • 1× Arduino Uno R3com cabo USB A–B
  • 1× Protoboard400 ou 830 pontos
  • 1× LED 5 mm vermelhoperna longa = ânodo (+)
  • 1× Resistor 220 Ω, ¼ Wfaixas: vermelho · vermelho · marrom · dourado
  • 3× Jumpers macho-machocores diferentes ajudam a conferir

Esquema de montagem

↔ Deslize o diagrama para os lados para ver tudo.

    Caminho da correnteD13 (5 V)→resistor 220 Ω→LED (ânodo → cátodo)→GND
    • D13 saída digital (LED)
    • GND terra

    Passo a passo da montagem

    1. Prepare a bancada.

      Desconecte o cabo USB. Posicione o Arduino e a protoboard como na figura: trilhos + (vermelho) e − (azul) voltados para o Arduino.

    2. Ligue o GND ao trilho −.

      Jumper preto: do pino GND do conector de energia (ao lado do 5V) até o trilho −, na coluna 4.

    3. Encaixe o resistor.

      Uma perna na coluna 8, linha b e a outra na coluna 12, linha b. O resistor não tem polaridade: qualquer sentido serve.

    4. Encaixe o LED.

      Perna longa (ânodo, +) na coluna 12, linha e; perna curta (cátodo, −, lado chato) na coluna 13, linha e. O ânodo fica na mesma coluna do resistor: é assim que os dois ficam ligados em série.

    5. Ligue o cátodo ao GND.

      Jumper preto: do trilho − (coluna 13) até a coluna 13, linha a, a mesma coluna do cátodo.

    6. Ligue o sinal.

      Jumper laranja: do pino digital 13 do Arduino até a coluna 8, linha a, a mesma coluna da perna esquerda do resistor.

    7. Confira e teste.

      Revise: resistor em série com o LED, ânodo do lado do resistor, cátodo voltado ao GND. Conecte o USB, abra a Arduino IDE, cole o código, escolha Arduino Uno e a porta e clique em Carregar. O LED deve piscar a cada segundo.

    Não acendeu? Gire o LED: a polaridade provavelmente está invertida. Se continuar apagado, confira se os fios estão nas colunas e linhas indicadas.

    Código completo para Arduino

    projeto1_blink.ino
    // Projeto 1 – Piscar LED (Blink)
    // Arduino Uno | LED + resistor de 220 Ω no pino D13
    
    const int PINO_LED = 13;   // pino digital onde o LED está ligado
    const int TEMPO_MS = 1000; // tempo em cada estado: 1 segundo
    
    void setup() {
      pinMode(PINO_LED, OUTPUT);    // configura o pino 13 como saída
    }
    
    void loop() {
      digitalWrite(PINO_LED, HIGH); // acende o LED (5 V no pino)
      delay(TEMPO_MS);              // espera 1 segundo
      digitalWrite(PINO_LED, LOW);  // apaga o LED (0 V no pino)
      delay(TEMPO_MS);              // espera 1 segundo
    }

    Entendendo o código

    const int PINO_LED = 13;

    Cria uma constante inteira com um nome fácil de entender. Se você mudar o LED de pino, basta alterar essa única linha.

    setup() e loop()

    setup() roda uma única vez, quando o Arduino é ligado ou reiniciado. loop() roda em seguida e se repete para sempre.

    pinMode(PINO_LED, OUTPUT);

    Define o modo do pino: OUTPUT (saída: o Arduino fornece tensão) ou INPUT (entrada: o Arduino lê a tensão que chega). Sem isso, o pino não aciona o LED direito.

    digitalWrite(PINO_LED, HIGH);

    Escreve um nível lógico no pino: HIGH = 5 V (a corrente circula e o LED acende) e LOW = 0 V (sem diferença de tensão, o LED apaga).

    delay(TEMPO_MS);

    Pausa o programa pelo número de milissegundos informado (1000 ms = 1 s). Durante a pausa, o LED mantém o último estado definido.

    Por que 220 Ω? (Lei de Ohm)

    R = (Vfonte − VLED) / I
    R = (5 − 2) / 0,015 = 200 Ω

    Um LED vermelho tem queda de tensão de ~2 V e rende bem com ~15 mA. O valor comercial mais próximo é 220 Ω, que resulta em I = 3/220 ≈ 13,6 mA, seguro para o LED e para o pino.

    Laboratório virtual: mude o tempo do delay

    pino 13: LOW · 0 V

    LED com efeito Fade

    Em vez de apenas ligar e desligar, o LED passa a “respirar”: o brilho sobe e desce suavemente. O segredo é o PWM, uma técnica para simular tensões intermediárias usando apenas saídas digitais.

    • PWM
    • analogWrite()
    • pino ~9
    • nível: iniciante
    • ~20 min

    Objetivos de aprendizagem

    • Compreender o que é PWM e o que significa duty cycle (ciclo de trabalho).
    • Identificar os pinos PWM do Arduino Uno (marcados com ~).
    • Usar analogWrite() com valores de 0 a 255.
    • Variar o brilho gradualmente com uma variável e inverter o sentido com if.

    Componentes necessários

    • 1× Arduino Uno R3com cabo USB A–B
    • 1× Protoboard400 ou 830 pontos
    • 1× LED 5 mm verdequalquer cor serve; perna longa = ânodo (+)
    • 1× Resistor 220 Ω, ¼ Wfaixas: vermelho · vermelho · marrom · dourado
    • 3× Jumpers macho-macho

    Esquema de montagem

    ↔ Deslize o diagrama para os lados para ver tudo.

      Caminho da correnteD9 (PWM ~)→resistor 220 Ω→LED (ânodo → cátodo)→GND
      • D9 saída PWM (~)
      • GND terra

      Passo a passo da montagem

      1. Prepare a bancada.

        Desconecte o cabo USB e posicione o Arduino e a protoboard como na figura.

      2. Ligue o GND ao trilho −.

        Jumper preto: do pino GND do conector de energia até o trilho −, na coluna 4.

      3. Encaixe o resistor.

        Uma perna na coluna 8, linha b e a outra na coluna 12, linha b.

      4. Encaixe o LED.

        Perna longa (ânodo, +) na coluna 12, linha e; perna curta (cátodo, −) na coluna 13, linha e.

      5. Ligue o cátodo ao GND.

        Jumper preto: do trilho − (coluna 13) até a coluna 13, linha a.

      6. Ligue o sinal PWM.

        Jumper roxo: do pino digital ~9 do Arduino até a coluna 8, linha a.

      7. Confira e teste.

        Conecte o USB, carregue o código e observe: o LED deve clarear e escurecer suavemente, completando um ciclo em cerca de 3 segundos.

      Atenção ao pino: só os pinos marcados com ~ (3, 5, 6, 9, 10 e 11) fazem PWM no Uno. Em um pino sem ~, o LED só ficaria aceso ou apagado.

      Código completo para Arduino

      projeto2_fade.ino
      // Projeto 2 – LED com efeito Fade (PWM)
      // Arduino Uno | LED + resistor de 220 Ω no pino D9 (PWM)
      
      const int PINO_LED = 9;  // D9 tem PWM (marcado com ~)
      
      int brilho = 0;          // brilho atual: 0 (apagado) a 255 (máximo)
      int passo  = 5;          // quanto o brilho muda a cada volta do loop
      
      void setup() {
        pinMode(PINO_LED, OUTPUT);
      }
      
      void loop() {
        analogWrite(PINO_LED, brilho);               // aplica o brilho atual
      
        brilho = constrain(brilho + passo, 0, 255);  // calcula o próximo (limitado a 0..255)
      
        if (brilho == 0 || brilho == 255) {
          passo = -passo;                            // chegou ao limite: inverte o sentido
        }
      
        delay(30);                                   // controla a velocidade do efeito
      }

      Entendendo o código

      O que é PWM (Modulação por Largura de Pulso)?

      O pino não fornece uma tensão intermediária de verdade: ele liga e desliga o LED muito rápido (cerca de 490 vezes por segundo no pino 9). A fração do tempo em que o pino fica em HIGH é o duty cycle. Como o olho humano não percebe a oscilação, enxergamos um brilho médio proporcional a esse tempo.

      analogWrite(9, …)Duty cycleTensão média no pinoResultado
      00 %0 Vapagado
      6425 %≈ 1,25 Vbrilho fraco
      12850 %≈ 2,5 Vbrilho médio
      19175 %≈ 3,75 Vbrilho forte
      255100 %5 Vbrilho máximo

      analogWrite(PINO_LED, brilho);

      Gera o sinal PWM no pino. O valor vai de 0 a 255 (8 bits, 256 níveis). Apesar do nome, a saída não é analógica: é PWM. Só funciona em pinos com ~.

      Variação gradual: brilho e passo

      A cada volta do loop, o brilho muda de 5 em 5 (brilho + passo). Isso produz a subida suave da intensidade luminosa, em vez de um salto de apagado para aceso.

      if (brilho == 0 || brilho == 255)

      Quando o brilho chega a um dos extremos, passo = -passo troca o sinal: o que subia passa a descer, e vice-versa. O símbolo || significa “ou”.

      constrain(x, 0, 255)

      Mantém o valor dentro do intervalo permitido. Assim o brilho nunca passa de 255 nem fica abaixo de 0, qualquer que seja o passo escolhido.

      delay(30);

      Define a velocidade: 51 passos × 30 ms ≈ 1,5 s para ir de apagado ao máximo. Diminua o delay para um efeito mais rápido.

      Laboratório virtual: duty cycle do PWM

      Frequência de piscadas com potenciômetro

      Gire o botão e mude a velocidade das piscadas em tempo real. Aqui você faz sua primeira leitura analógica e converte o valor lido em tempo com map(). Girando para a direita, o LED pisca mais rápido.

      • entrada analógica
      • analogRead()
      • map()
      • nível: básico
      • ~30 min

      Objetivos de aprendizagem

      • Entender o potenciômetro como um divisor de tensão ajustável.
      • Ler uma tensão de 0 a 5 V com analogRead() (valores de 0 a 1023).
      • Converter faixas de valores com map().
      • Relacionar intervalo de tempo e frequência de piscadas.
      • Acompanhar as leituras no Monitor Serial.

      Componentes necessários

      • 1× Arduino Uno R3com cabo USB A–B
      • 1× Protoboard
      • 1× Potenciômetro 10 kΩ linearcódigo B10K, 3 terminais
      • 1× LED 5 mm azulqualquer cor serve
      • 1× Resistor 220 Ω, ¼ Wvermelho · vermelho · marrom · dourado
      • 7× Jumpers macho-macho

      Esquema de montagem

      ↔ Deslize o diagrama para os lados para ver tudo.

        Leitura5 V→potenciômetro→cursor → A0→analogRead()→map()→delay()
        SaídaD8 (5 V)→resistor 220 Ω→LED→GND
        • A0 entrada analógica (cursor)
        • D8 saída digital (LED)
        • 5V alimentação
        • GND terra

        Passo a passo da montagem

        1. Alimentação
        2. Prepare a bancada.

          Desconecte o USB e posicione o Arduino e a protoboard como na figura.

        3. Leve 5 V e GND aos trilhos.

          Jumper vermelho: pino 5V → trilho +, coluna 2. Jumper preto: pino GND → trilho −, coluna 4.

        4. Potenciômetro
        5. Encaixe o potenciômetro.

          Os três terminais vão nas colunas 8, 9 e 10, todos na linha e. O terminal do meio (coluna 9) é o cursor. Se os terminais do seu modelo forem mais espaçados (comum nos potenciômetros rotativos de 16 mm, com 5 mm entre eles), use colunas alternadas, como 8, 10 e 12, e leve cada jumper dos próximos passos à coluna do terminal correspondente.

        6. Terminal esquerdo ao GND.

          Jumper preto: trilho − (coluna 8) → coluna 8, linha a.

        7. Terminal direito ao 5 V.

          Jumper vermelho: trilho + (coluna 10) → coluna 10, linha a.

        8. Cursor à entrada A0.

          Jumper amarelo: pino A0 → coluna 9, linha a.

        9. LED
        10. Encaixe o resistor.

          Uma perna na coluna 17, linha b e a outra na coluna 21, linha b.

        11. Encaixe o LED.

          Ânodo (perna longa) na coluna 21, linha e; cátodo (perna curta) na coluna 22, linha e.

        12. Cátodo ao GND.

          Jumper preto: trilho − (coluna 22) → coluna 22, linha a.

        13. Sinal do LED.

          Jumper verde: pino digital 8 → coluna 17, linha a.

        14. Teste.

          Conecte o USB, carregue o código, abra o Monitor Serial (9600 baud) e gire o potenciômetro: o LED muda de velocidade e os valores mudam na tela.

        Sentido invertido? Se o LED ficar mais lento ao girar para a direita, troque entre si os fios dos terminais das pontas (5 V e GND). O terminal do meio sempre vai ao A0.

        Código completo para Arduino

        projeto3_potenciometro.ino
        // Projeto 3 – Frequência de piscadas controlada por potenciômetro
        // Arduino Uno | LED no pino D8 | cursor do potenciômetro no pino A0
        
        const int PINO_LED = 8;    // saída: LED (com resistor de 220 Ω)
        const int PINO_POT = A0;   // entrada analógica: cursor do potenciômetro
        
        void setup() {
          pinMode(PINO_LED, OUTPUT);
          Serial.begin(9600);      // inicia a comunicação com o Monitor Serial
        }
        
        void loop() {
          int leitura = analogRead(PINO_POT);              // 0 a 1023
        
          // Girar para a direita => leitura maior => intervalo menor => pisca mais rápido
          int intervalo = map(leitura, 0, 1023, 1000, 50); // 1000 ms a 50 ms
        
          Serial.print("leitura = ");
          Serial.print(leitura);
          Serial.print(" | intervalo = ");
          Serial.print(intervalo);
          Serial.println(" ms");
        
          digitalWrite(PINO_LED, HIGH);  // LED aceso durante 'intervalo' ms
          delay(intervalo);
          digitalWrite(PINO_LED, LOW);   // LED apagado durante 'intervalo' ms
          delay(intervalo);
        }

        Entendendo o código

        Como funciona o potenciômetro

        É um resistor variável com três terminais. Entre as pontas há uma trilha resistiva fixa (10 kΩ). O terminal do meio, o cursor, desliza sobre essa trilha. Com as pontas ligadas ao 5 V e ao GND, o cursor “pega” uma fração da tensão, o que é um divisor de tensão ajustável:

        Vcursor = 5 V × (Raté o GND / Rtotal)
        cursor junto ao GND → 0 V · no meio → 2,5 V · junto ao 5 V → 5 V

        Como o cursor só “mede” a tensão e a corrente que passa por ele é minúscula, o potenciômetro pode ficar ligado direto à entrada A0 sem risco.

        analogRead(PINO_POT)

        O Arduino Uno tem um conversor analógico-digital (ADC) de 10 bits: 210 = 1024 níveis. 0 V vira 0 e 5 V vira 1023, com resolução de cerca de 4,9 mV por passo (5 V ÷ 1024).

        map(valor, deMin, deMax, paraMin, paraMax)

        saída = (x − deMin) × (paraMax − paraMin) / (deMax − deMin) + paraMin

        Reescala um valor de uma faixa para outra, usando aritmética de inteiros. Aqui, 0–1023 vira 1000–50. Como a faixa de saída está “invertida”, quanto maior a leitura, menor o intervalo.

        De leitura analógica a tempo de piscada

        O LED fica aceso por intervalo ms e apagado por intervalo ms, então um ciclo completo dura 2 × intervalo e a frequência é f = 1 / (2 × intervalo).

        Posição do botãoanalogRead()Tensão em A0map() → intervaloFrequência
        totalmente à esquerda00 V1000 ms0,50 Hz
        ¼ do curso2561,25 V763 ms0,66 Hz
        no meio5122,5 V525 ms0,95 Hz
        ¾ do curso7683,75 V287 ms1,74 Hz
        totalmente à direita10235 V50 ms10,0 Hz

        Serial.begin(9600) e Serial.println()

        Abrem um canal de texto entre o Arduino e o computador (9600 bits por segundo). Use Ferramentas → Monitor Serial para ver as leituras e entender o que o programa “enxerga”.

        Atenção: delay() bloqueia

        O novo valor do potenciômetro só é lido no começo de cada ciclo. Em velocidades baixas, a mudança pode demorar até 2 s para aparecer. Desafio: refaça o programa com millis() para resposta imediata.

        Laboratório virtual: gire o potenciômetro

        f ≈ 0,95 Hz

        Luz automática com sensor LDR

        Escureceu? O LED acende sozinho, como um poste de rua. Você vai usar um LDR (sensor de luz), um divisor de tensão e uma decisão if/else no código. Ambiente iluminado: LED apagado. Ambiente escuro: LED aceso.

        • sensor LDR
        • divisor de tensão
        • if / else
        • nível: básico
        • ~35 min

        Objetivos de aprendizagem

        • Entender como a resistência de um LDR varia com a luz.
        • Montar e calcular um divisor de tensão com o LDR e um resistor fixo.
        • Ler a tensão do divisor com analogRead().
        • Tomar decisões no código com if / else e um valor limite.
        • Calibrar o limite observando o Monitor Serial.

        Componentes necessários

        • 1× Arduino Uno R3com cabo USB A–B
        • 1× Protoboard
        • 1× LDR 5 mmpor exemplo GL5528; sem polaridade
        • 1× Resistor 10 kΩ, ¼ Wmarrom · preto · laranja · dourado
        • 1× LED 5 mm amareloqualquer cor serve
        • 1× Resistor 220 Ω, ¼ Wvermelho · vermelho · marrom · dourado
        • 7× Jumpers macho-macho

        Esquema de montagem

        ↔ Deslize o diagrama para os lados para ver tudo.

          Divisor de tensão5 V→LDR→ponto central (lido pelo A0)→resistor 10 kΩ→GND
          SaídaD8 (5 V)→resistor 220 Ω→LED→GND
          • A0 entrada analógica (sensor)
          • D8 saída digital (LED)
          • 5V alimentação
          • GND terra

          Passo a passo da montagem

          1. Alimentação
          2. Prepare a bancada.

            Desconecte o USB e posicione o Arduino e a protoboard como na figura.

          3. Leve 5 V e GND aos trilhos.

            Jumper vermelho: pino 5V → trilho +, coluna 2. Jumper preto: pino GND → trilho −, coluna 4.

          4. Divisor de tensão (sensor)
          5. Encaixe o LDR.

            Uma perna na coluna 11, linha c e a outra na coluna 15, linha c. O LDR não tem polaridade.

          6. Encaixe o resistor de 10 kΩ.

            Uma perna na coluna 15, linha d e a outra na coluna 19, linha d. Agora o LDR e o resistor compartilham a coluna 15: esse é o ponto central do divisor.

          7. Alimente o LDR com 5 V.

            Jumper vermelho: trilho + (coluna 11) → coluna 11, linha a.

          8. Ligue o resistor de 10 kΩ ao GND.

            Jumper preto: trilho − (coluna 19) → coluna 19, linha a.

          9. Leia o ponto central.

            Jumper amarelo: pino A0 → coluna 15, linha a.

          10. LED
          11. Encaixe o resistor de 220 Ω.

            Uma perna na coluna 22, linha b e a outra na coluna 26, linha b.

          12. Encaixe o LED.

            Ânodo (perna longa) na coluna 26, linha e; cátodo (perna curta) na coluna 27, linha e.

          13. Cátodo ao GND.

            Jumper preto: trilho − (coluna 27) → coluna 27, linha a.

          14. Sinal do LED.

            Jumper verde: pino digital 8 → coluna 22, linha a.

          15. Teste.

            Conecte o USB, carregue o código e abra o Monitor Serial. Cubra o LDR com a mão: o LED deve acender. Descubra e o LED apaga.

          Dica de montagem: deixe o LED afastado do LDR. A luz do próprio LED pode ser “vista” pelo sensor e confundir o programa.

          Código completo para Arduino

          projeto4_ldr.ino
          // Projeto 4 – Acionamento de LED com sensor LDR
          // Arduino Uno | LDR + resistor de 10 kΩ em A0 | LED no pino D8
          
          const int PINO_LDR = A0;   // ponto central do divisor de tensão
          const int PINO_LED = 8;    // LED (com resistor de 220 Ω)
          const int LIMITE   = 400;  // abaixo deste valor o ambiente é considerado escuro
          
          void setup() {
            pinMode(PINO_LED, OUTPUT);
            Serial.begin(9600);
          }
          
          void loop() {
            int luz = analogRead(PINO_LDR);   // 0 (escuro) a 1023 (muita luz)
          
            if (luz < LIMITE) {
              digitalWrite(PINO_LED, HIGH);   // escuro: acende o LED
            } else {
              digitalWrite(PINO_LED, LOW);    // claro: apaga o LED
            }
          
            Serial.print("luz = ");
            Serial.println(luz);              // mostra a leitura no Monitor Serial
            delay(100);
          }

          Entendendo o código

          Como funciona o LDR

          LDR (Light Dependent Resistor) é um resistor feito de material semicondutor sensível à luz. Quanto mais luz, menor a resistência: cerca de 1 a 10 kΩ em ambiente claro e mais de 100 kΩ no escuro. Ele não tem polaridade.

          Por que um divisor de tensão?

          O Arduino lê tensão, não resistência. O divisor transforma a variação de resistência do LDR em variação de tensão no ponto central, ligado ao A0.

          Divisor de tensão: LDR + 10 kΩ

          VA0 = 5 V × Rfixo / (RLDR + Rfixo) com Rfixo = 10 kΩ
          leitura ≈ VA0 × 1024 / 5

          Com o LDR no lado do 5 V, mais luz → RLDR menor → tensão maior → leitura maior. Os valores abaixo são típicos; seu LDR pode variar:

          SituaçãoRLDRTensão em A0analogRead()LED
          sol / luz forte1 kΩ4,55 V≈ 930apagado
          sala iluminada5 kΩ3,33 V≈ 682apagado
          penumbra10 kΩ2,50 V≈ 512apagado
          ambiente escurecendo50 kΩ0,83 V≈ 170aceso
          escuro (LDR coberto)100 kΩ0,45 V≈ 93aceso

          analogRead(PINO_LDR)

          Converte a tensão do ponto central em um número de 0 a 1023 (ADC de 10 bits). Esse número é o “quanto de luz” que o programa enxerga.

          if (luz < LIMITE) { … } else { … }

          A condição compara a leitura com o limite. Se for verdadeira (leitura baixa, ambiente escuro), executa o bloco do if e acende o LED. Caso contrário, executa o else e apaga.

          Como escolher o LIMITE

          Abra o Monitor Serial, anote a leitura com o ambiente claro e depois com o LDR coberto, e escolha um valor no meio dos dois. Com 400, o LED acende quando a tensão cai abaixo de ≈ 1,95 V.

          Inverter o comportamento

          Se trocar o LDR de lugar com o resistor de 10 kΩ, a leitura passa a subir no escuro. Aí é preciso inverter a condição (luz > LIMITE).

          Laboratório virtual: apague a luz do ambiente

          LED: apagado

          Modelo ilustrativo: a resistência do LDR cai de forma exponencial com a luz (de ~300 kΩ no escuro total a ~1 kΩ sob luz forte, como na tabela acima).

          Cores de um LED RGB com potenciômetro

          Vermelho, verde e azul em um único LED: misture as intensidades de cada canal e crie qualquer cor. Com um potenciômetro, você percorre todo o arco-íris e descobre como as telas do mundo inteiro formam suas cores.

          • LED RGB
          • PWM em 3 canais
          • funções próprias
          • nível: intermediário
          • ~45 min

          Objetivos de aprendizagem

          • Entender como as cores nascem da síntese aditiva RGB.
          • Diferenciar LED RGB de cátodo comum e de ânodo comum.
          • Controlar três canais com analogWrite() em pinos PWM.
          • Percorrer uma roda de cores com um potenciômetro.
          • Organizar o programa com funções próprias.

          Componentes necessários

          • 1× Arduino Uno R3com cabo USB A–B
          • 1× Protoboard
          • 1× LED RGB 5 mm, cátodo comum4 pernas; a mais longa é o terminal comum
          • 3× Resistores 220 Ω, ¼ Wum para cada canal (R, G e B)
          • 1× Potenciômetro 10 kΩ linearcódigo B10K, 3 terminais
          • 9× Jumpers macho-macho

          Esquema de montagem

          ↔ Deslize o diagrama para os lados para ver tudo.

            Cada canalD9 / D10 / D11 (PWM)→resistor 220 Ω→perna R / G / B→cátodo comum→GND
            Leitura5 V→potenciômetro→cursor → A0
            • D9 canal vermelho (PWM)
            • D10 canal verde (PWM)
            • D11 canal azul (PWM)
            • A0 potenciômetro
            • 5V alimentação
            • GND terra

            Os três resistores ficam “em pé”, atravessando o canal central da protoboard: o lado de cima recebe o sinal do Arduino e o lado de baixo vai à perna do LED.

            Passo a passo da montagem

            1. Alimentação
            2. Prepare a bancada.

              Desconecte o USB e posicione o Arduino e a protoboard como na figura.

            3. Leve 5 V e GND aos trilhos.

              Jumper vermelho: pino 5V → trilho +, coluna 2. Jumper preto: pino GND → trilho −, coluna 4.

            4. Potenciômetro
            5. Encaixe o potenciômetro.

              Os três terminais nas colunas 8, 9 e 10, linha e. O do meio (coluna 9) é o cursor. Terminais mais espaçados? Use colunas alternadas, como explicado no Projeto 3.

            6. Ligações do potenciômetro.

              Jumper preto: trilho − (coluna 8) → coluna 8, linha a. Jumper vermelho: trilho + (coluna 10) → coluna 10, linha a. Jumper amarelo: pino A0 → coluna 9, linha a.

            7. LED RGB
            8. Encaixe os três resistores de 220 Ω na vertical.

              Cada um com uma perna na linha c e a outra na linha f (atravessando o canal central), nas colunas 15, 17 e 18.

            9. Encaixe o LED RGB.

              As quatro pernas nas colunas 15, 16, 17 e 18, linha j. Com o lado chato à esquerda, a ordem é: R (coluna 15), cátodo comum, a perna mais longa (coluna 16), G (coluna 17) e B (coluna 18).

            10. Cátodo comum ao GND.

              Jumper preto longo: trilho − (coluna 16) → coluna 16, linha f.

            11. Sinais PWM dos três canais.

              Jumper laranja: pino ~9 → coluna 15, linha a (vermelho). Jumper verde: pino ~10 → coluna 17, linha a (verde). Jumper azul: pino ~11 → coluna 18, linha a (azul).

            12. Teste.

              Conecte o USB, carregue o código e gire o potenciômetro: o LED percorre vermelho → verde → azul → vermelho.

            Confira o seu LED: a ordem das pernas pode variar entre fabricantes. A mais longa é sempre o terminal comum. Se as cores aparecerem trocadas, basta trocar o fio daquele canal (ou os nomes dos pinos no código).

            Código completo para Arduino

            projeto5_led_rgb.ino
            // Projeto 5 – Cores de um LED RGB controladas por potenciômetro
            // Arduino Uno | LED RGB 5 mm | 3 resistores de 220 Ω | potenciômetro de 10 kΩ
            
            const int PINO_R   = 9;    // canal vermelho (PWM)
            const int PINO_G   = 10;   // canal verde    (PWM)
            const int PINO_B   = 11;   // canal azul     (PWM)
            const int PINO_POT = A0;   // cursor do potenciômetro
            
            // false = LED de CÁTODO comum (comum ao GND)  -> montagem deste projeto
            // true  = LED de ÂNODO comum  (comum ao 5 V)  -> lógica invertida
            const bool ANODO_COMUM = false;
            
            // Envia as intensidades (0 a 255) de cada canal para o LED
            void escreveCor(int r, int g, int b) {
              if (ANODO_COMUM) {
                r = 255 - r;
                g = 255 - g;
                b = 255 - b;
              }
              analogWrite(PINO_R, r);
              analogWrite(PINO_G, g);
              analogWrite(PINO_B, b);
            }
            
            // Roda de cores: pos de 0 a 255 percorre vermelho -> verde -> azul -> vermelho
            void corDaRoda(int pos) {
              if (pos < 85) {
                escreveCor(255 - pos * 3, pos * 3, 0);          // vermelho -> verde
              } else if (pos < 170) {
                pos = pos - 85;
                escreveCor(0, 255 - pos * 3, pos * 3);          // verde -> azul
              } else {
                pos = pos - 170;
                escreveCor(pos * 3, 0, 255 - pos * 3);          // azul -> vermelho
              }
            }
            
            void setup() {
              pinMode(PINO_R, OUTPUT);
              pinMode(PINO_G, OUTPUT);
              pinMode(PINO_B, OUTPUT);
            }
            
            void loop() {
              int leitura = analogRead(PINO_POT);        // 0 a 1023
              int pos = map(leitura, 0, 1023, 0, 255);   // 0 a 255
              corDaRoda(pos);
              delay(10);
            }

            Entendendo o código

            Como funciona um LED RGB

            Dentro do encapsulamento existem três LEDs (vermelho, verde e azul) que compartilham um terminal. Cada LED tem sua própria perna, ligada a um pino PWM diferente, e por isso é possível controlar a intensidade de cada um separadamente. A mistura das três luzes é a síntese aditiva: é assim que telas de celular, TVs e monitores formam suas imagens.

            CorRGBMistura
            Vermelho25500só R
            Verde02550só G
            Azul00255só B
            Amarelo2552550R + G
            Ciano0255255G + B
            Magenta2550255R + B
            Branco255255255R + G + B

            Cátodo comum × ânodo comum

            TipoPerna comum ligada aPara acender um canalNo código
            Cátodo comum (CC) · este projetoGNDenviar HIGH / valor altoANODO_COMUM = false
            Ânodo comum (CA)5 Venviar LOW / valor baixo (lógica invertida)ANODO_COMUM = true

            Para usar um LED de ânodo comum: ligue a perna comum ao trilho + (5 V) em vez do GND e mude a constante para true. A função escreveCor() inverte os valores (255 - r) e o resto do programa não muda.

            PWM e analogWrite() nos 3 canais

            Cada canal recebe um valor de 0 a 255 em um pino PWM (9, 10 e 11). São 256 níveis por canal, ou 256 × 256 × 256 ≈ 16,7 milhões de cores possíveis. Valor 0 = canal apagado; 255 = brilho máximo.

            Três resistores, um por canal

            Cada cor de LED tem uma queda de tensão diferente: ~2 V no vermelho e ~3 V no verde e no azul. Com 220 Ω, a corrente fica em ≈ 13 mA no vermelho e ≈ 9 mA no verde e no azul, dentro do limite seguro.

            Do potenciômetro à cor

            map(leitura, 0, 1023, 0, 255) reduz a leitura a uma posição de 0 a 255 na roda de cores. Em cada terço da volta, um canal sobe enquanto outro desce, e o terceiro fica apagado.

            A função corDaRoda(pos)

            posRGB
            0 a 84255 → 00 → 2550
            85 a 1690255 → 00 → 255
            170 a 2550 → 2550255 → 0

            Funções próprias com parâmetros

            void escreveCor(int r, int g, int b) junta os três analogWrite() em um único comando reutilizável. O programa fica mais organizado e a troca entre cátodo e ânodo comum acontece em um só lugar.

            Laboratório virtual: do potenciômetro à cor

            cor: #FF0000
            R
            0
            G
            0
            B
            0

            Misture você mesmo