Trilha de aprendizado · Nível 10 · Tutorial 8

Controle de brilho com PWM no Uno R3

Controlar o brilho de um LED externo no pino 3 do Uno R3 próprio, mantendo a limitação de corrente e evitando conflitos com os temporizadores usados nas demais tarefas.

  • Nível: Intermediário
  • Duração: 20 min
  • 8 passos
Controle de brilho com PWM no Uno R3

O que você vai percorrer

  1. O que muda quando o brilho muda Entenda PWM como pulsos digitais e relacione ciclo de trabalho ao tempo de condução do LED. 2 min
  2. Prepare o LED sem aumentar a corrente de pico Prepare a montagem PWM no D3 com resistor em série e preserve a limitação da corrente de pico. 3 min
  3. Comande o brilho com analogWrite Use analogWrite no pino 3 para comandar níveis de brilho sem confundir PWM com uma tensão analógica contínua. 3 min
  4. De onde vêm os pulsos de aproximadamente 490 Hz 2 min
  5. Reserve os temporizadores antes de integrar Mapeie os temporizadores do Uno R3 e preserve uma divisão de recursos que mantém o PWM em D3, o rebote por millis e a sinalização temporizada funcionando juntos. 2 min
  6. Mude o brilho por eventos de botão Use um evento de botão para alternar níveis de brilho em D3, mantendo o PWM do Timer2 e a sinalização não bloqueante do Timer1. 4 min
  7. Separe brilho observado de sinal medido Diferencie observação visual, previsão calculada e medição opcional da forma de onda PWM. 3 min
  8. Aplique e confira o controle de brilho Aplique uma alteração final de brilho, confira os recursos do Uno R3 e registre evidências sem confundir previsão com medição. 2 min

O que você vai aprender

  • Relacionar comando, ciclo de trabalho e duração dos pulsos do PWM.
  • Variar o brilho por eventos de botão sem alterar a frequência dos pulsos.
  • Conferir a corrente de pico do LED e preservar sua limitação por resistor.
  • Identificar quais pinos PWM são afetados pela reconfiguração de cada temporizador.
  • Distinguir observação de brilho de uma medição da forma de onda, usando osciloscópio próprio quando disponível.

Antes de começar

  • Dimensionamento do resistor de um LED
  • Controle de LEDs com saídas digitais
  • Eventos de botão com tratamento de rebote
  • Intervalos com o Timer1 em modo CTC

Passo 1 de 8

O que muda quando o brilho muda

Entenda PWM como pulsos digitais e relacione ciclo de trabalho ao tempo de condução do LED.

PWM não reduz o nível alto

PWM alterna níveis digitais

PWM (Pulse Width Modulation, ou modulação por largura de pulso) controla o brilho usando uma sequência rápida de níveis digitais. A saída alterna entre nível baixo e nível alto: ela não fornece um nível alto “mais fraco”.

Quando a saída está alta, o LED conduz; quando está baixa, ele não conduz. Ao aumentar a fração de tempo em nível alto, o LED fica ligado por mais tempo em cada repetição e tende a parecer mais brilhante.

Nível alto fixo, tempo de condução variável

Diagrama de uma onda digital que alterna sempre entre nível baixo e alto, com um LED aceso nos trechos altos e apagado nos trechos baixos.

No PWM, a amplitude dos níveis permanece digital; o que varia é quanto tempo o sinal fica alto.

Calcule a fração ligada

Partes de um ciclo PWM

Em um ciclo completo do PWM:

  • t_alto é a duração do trecho em nível alto: o LED conduz.
  • t_baixo é a duração do trecho em nível baixo: o LED não conduz.
  • T é o período: o tempo de uma repetição completa.

Logo, T = t_alto + t_baixo. O ciclo de trabalho, representado por D, é a fração do período em que a saída permanece alta:

D = t_alto / T

Você pode expressar D como número decimal ou porcentagem. Por exemplo, D = 0,25 equivale a 25%.

Duração alta, duração baixa e período

Forma de onda PWM com marcações visuais separando o trecho alto, o trecho baixo e um ciclo completo.

O período inclui os dois trechos: alto e baixo.

Exemplo

Exemplo de cálculo

Se um ciclo dura 2 ms e o sinal fica alto por 0,5 ms:

D = 0,5 ms / 2 ms = 0,25 = 25%

O trecho baixo dura 1,5 ms. Note que a largura de pulso é t_alto; ela não é o período inteiro.

O que muda — e o que permanece

Mesmo período, brilhos diferentes

Compare os dois sinais. Ambos repetem no mesmo intervalo, portanto têm o mesmo período e a mesma frequência. Também atingem os mesmos níveis baixo e alto.

O sinal B, porém, passa uma fração maior de cada ciclo em nível alto. Assim, ele mantém o LED conduzindo por mais tempo e tende a produzir maior brilho percebido.

Comparação de ciclos de trabalho

Duas ondas PWM com mesma altura e mesmo período: uma com pulso alto curto e LED pouco brilhante, outra com pulso alto longo e LED mais brilhante.

Aumentar t_alto, sem alterar T, aumenta o ciclo de trabalho e o tempo de condução.

Dica

Atenção à percepção

A percepção visual não é uma régua linear: dobrar o ciclo de trabalho não garante que você enxergará exatamente o dobro do brilho. Ainda assim, a relação elétrica básica é direta: maior ciclo de trabalho significa mais tempo de condução por período.

Pratique a leitura do sinal

Nomeie as partes do PWM

Associe cada grandeza à sua definição.

Toque em um item e depois no par correspondente.

Mantenha o período constante

Verifique sua interpretação

Dois sinais PWM têm o mesmo período. Qual alteração aumenta o tempo de condução do LED sem mudar a frequência?

Passo 2 de 8

Prepare o LED sem aumentar a corrente de pico

Prepare a montagem PWM no D3 com resistor em série e preserve a limitação da corrente de pico.

Monte os dois caminhos

Antes de montar

Você vai montar o LED externo que receberá PWM mais adiante. Separe: Uno R3, computador com IDE Arduino já configurada, cabo USB de dados, protoboard, jumpers, LED indicador comum, resistor já dimensionado e botão.

Com a placa desconectada do USB, mantenha uma única alimentação: o USB do computador. Não conecte ao mesmo tempo fonte externa em VIN ou no pino 5 V. O GND do circuito é ligado à referência do computador pelo cabo USB; isso não é isolamento elétrico.

Caminhos da montagem

Diagrama da montagem: D3 segue por um resistor e pelo LED até GND; botão conecta D2 a GND.

O resistor e o LED ficam em série entre D3 e GND. O botão usa a ligação já conhecida entre D2 e GND.

Conexões

Monte exatamente este caminho para o LED: D3 → resistor → ânodo do LED → cátodo → GND. Resistor e LED podem trocar de posição na mesma série, desde que o resistor continue no caminho da corrente e o LED mantenha a polaridade correta.

Ligue o botão entre D2 e GND. A programação com INPUT_PULLUP será usada em outro step; por enquanto, apenas deixe a ligação pronta.

Corrente de pico continua limitada

Confira o resistor

Quando D3 estiver no nível alto, a corrente de pico do LED pode ser estimada por:

I_pico ≈ (V_alto − V_F) / R

Use a tensão alta realista do GPIO e a queda direta V_F indicada para seu LED, considerando tolerâncias. O resistor escolhido deve manter a corrente de pico em uma faixa pequena e compatível com o LED e com o GPIO, por exemplo, 2 a 5 mA nesta prática.

A corrente relevante para proteger LED e pino é a corrente durante cada pulso alto.

Exemplo

Exemplo de estimativa

Exemplo apenas para conferir a ordem de grandeza: se V_alto = 5 V, V_F = 2 V e R = 1 kΩ, então:

I_pico ≈ (5 − 2) / 1000 = 0,003 A = 3 mA

Esse cálculo é uma estimativa. Não copie valores sem comparar com as especificações do seu LED, do resistor e do GPIO. Se o resistor que você tem não mantém uma corrente de pico pequena, troque-o antes de energizar a montagem.

Atenção

Proteção elétrica primeiro

Nunca use um resistor menor para “compensar” um brilho aparentemente fraco. O PWM poderá reduzir o tempo ligado, mas cada pulso alto ainda aplicará a corrente de pico definida principalmente por tensão, LED e resistor.

Desconecte o USB antes de mover fios, trocar o LED ou alterar a protoboard. Após revisar polaridade e conexões, conecte somente o cabo USB.

Diferencie corrente média e pico

Tempo de condução não substitui o resistor

Um ciclo de trabalho menor reduz o tempo em que o LED conduz e, portanto, reduz a corrente média. Ele não reduz automaticamente a corrente de pico enquanto D3 está alto.

Assim, o mesmo resistor seguro deve permanecer no circuito para todos os comandos: LED apagado, níveis intermediários e LED continuamente ligado.

Verifique a ideia central

Verdadeiro ou falso: “Se eu usar PWM com ciclo de trabalho de 10%, posso retirar o resistor porque a corrente média ficará baixa.”

Se eu usar PWM com ciclo de trabalho de 10%, posso retirar o resistor porque a corrente média ficará baixa.

Faça a conferência local

Revisão antes de energizar

Com a alimentação desligada, faça uma revisão visual da sua própria montagem. Siga o caminho a partir de D3 até GND com o dedo, sem forçar os fios. Confirme que o resistor está em série, não em paralelo com o LED, e que o cátodo retorna a GND.

Só depois conecte o USB. Ainda não é necessário programar ou medir sinais nesta etapa.

Relate sua conferência

Descreva o caminho da corrente que você montou quando D3 estiver alto. Inclua D3, resistor, LED e GND. Se sua montagem ainda não estiver pronta, escreva qual conexão falta conferir.

Escreva pelo menos 40 caracteres (0/40).

Passo 3 de 8

Comande o brilho com analogWrite

Use analogWrite no pino 3 para comandar níveis de brilho sem confundir PWM com uma tensão analógica contínua.

Interprete o valor de brilho

Do comando ao ciclo de trabalho

analogWrite(3, comando) configura o PWM no pino 3 do Uno R3 usando um número inteiro de 0 a 255. Esse número não produz uma tensão analógica contínua: nos valores intermediários, o pino continua alternando entre níveis digitais baixo e alto.

Para um comando intermediário, o ciclo de trabalho é aproximadamente:

D ≈ comando / 255

Assim, 64 corresponde a cerca de 25%, 128 a cerca de 50% e 192 a cerca de 75%. O período dos pulsos permanece o mesmo; muda a fração do período em que o LED conduz.

O comando muda a largura dos pulsos

Três formas de onda PWM com o mesmo período e amplitudes iguais, mas com tempos em nível alto curto, médio e longo.

Em comandos intermediários, a proporção de tempo em nível alto muda; não a tensão do nível alto.

Referência rápida

Valores típicos para prever o comportamento no LED.

Ciclos aproximados; a percepção visual do brilho pode não acompanhar a escala de forma linear.
ComandoCiclo de trabalho aproximadoEstado do pino
00%Baixo constante
6425%Pulsos com nível alto curto
12850%Pulsos aproximadamente equilibrados
19275%Pulsos com nível alto longo
255100%Alto constante

Grave um comando fixo

Teste um brilho intermediário

Monte e grave este sketch no seu Uno R3 já ligado conforme a prática anterior: LED externo em série com o resistor entre D3 e GND. O pinMode deixa explícito que D3 é uma saída; em seguida, analogWrite define um brilho fixo.

Após a chamada, o hardware continua gerando o sinal PWM. O loop() pode ficar vazio enquanto nenhum novo comando for necessário.

Brilho fixo de aproximadamente 50%

Sketch completo para gravar no Uno R3.

cpp
const uint8_t PINO_LED = 3;
const uint8_t COMANDO_BRILHO = 128;

void setup() {
  pinMode(PINO_LED, OUTPUT);
  analogWrite(PINO_LED, COMANDO_BRILHO);
}

void loop() {
  // O hardware mantém o PWM em D3.
}
Saída esperada
LED externo aparentemente aceso com brilho intermediário e estável.
Nenhuma saída no Monitor Serial.

Resultado físico esperado após a gravação, considerando a montagem correta do LED e do resistor. A aparência do brilho não é uma medida elétrica nem precisa parecer exatamente metade do máximo.

Dica

Compare com prudência

Experimente gravar novamente com COMANDO_BRILHO igual a 64, 128 e 192. Compare apenas a aparência do LED: ela deve mudar, mas não use essa observação para concluir que o brilho percebido é proporcional ao número. Por exemplo, 128 não precisa parecer “metade” de 255 para os seus olhos.

Aplique um valor intermediário

Complete o comando PWM

Complete os argumentos e valores que produzem aproximadamente 50% de ciclo de trabalho em D3. A lacuna final representa o comando de brilho, não uma tensão em volts.

Prática: 50% em D3

Preencha as lacunas do sketch.

cpp
const uint8_t PINO_LED = ;

void setup() {
  pinMode(PINO_LED, OUTPUT);
  analogWrite(PINO_LED, );
}

void loop() {
}

Distinga extremos de PWM

Extremos e proteção elétrica

Nos extremos, não há pulsos alternados a observar: analogWrite(3, 0) mantém D3 em nível baixo, e analogWrite(3, 255) mantém D3 em nível alto. Entre esses extremos, o LED recebe pulsos e seu tempo de condução varia conforme o comando.

O resistor em série continua indispensável: diminuir o comando reduz o tempo de condução e a corrente média, mas não elimina a corrente de pico durante cada nível alto.

Verifique os extremos

Qual é o comportamento esperado em D3 após analogWrite(3, 0)?

Passo 4 de 8

De onde vêm os pulsos de aproximadamente 490 Hz

A base de tempo do D3

D3 e o Timer2

No Uno R3, o pino D3 é a saída OC2B do Timer2. Depois de analogWrite(3, comando), o Timer2 gera os pulsos automaticamente; o loop() não precisa alternar o pino a cada pulso.

Na configuração padrão do núcleo Arduino AVR, o Timer2 usa PWM com correção de fase. O contador percorre de 0 até 255 e depois retorna até 0. Esse caminho completo tem 510 passos por ciclo: 255 na subida e 255 na descida.

O comando altera a fração do ciclo em nível alto, mas, enquanto a configuração do Timer2 for preservada, não altera a velocidade dessa contagem.

A contagem que forma um ciclo

Diagrama do D3 associado ao Timer2, com uma contagem que sobe até 255 e desce até zero, ao lado de pulsos PWM.

A ida e a volta do contador definem um ciclo completo do PWM com correção de fase.

Do comando ao tempo de condução

Frequência e duração do nível alto

O clock do Uno R3 é 16 MHz. No modo padrão, o Timer2 usa prescaler 64; portanto, a frequência do PWM no D3 é aproximadamente:

f = 16.000.000 / (64 × 510) ≈ 490 Hz

Logo, o período é:

T = 1/f ≈ 2,04 ms

Para comandos intermediários, uma previsão útil é:

t_alto ≈ (comando / 255) × T

Essa é uma estimativa para relacionar o comando ao tempo de condução. Os extremos são casos especiais: analogWrite(3, 0) mantém a saída baixa e analogWrite(3, 255) mantém a saída alta.

Exemplo

Exemplo: comando 128

Com analogWrite(3, 128), o ciclo de trabalho previsto é aproximadamente 128/255, ou 50%.

Com T ≈ 2,04 ms:

t_alto ≈ (128/255) × 2,04 ms ≈ 1,02 ms

O LED conduz por cerca de 1,02 ms em cada período. O programa pode atualizar o comando uma vez por botão pressionado, por exemplo, mas os pulsos continuam próximos de 490 Hz entre uma atualização e outra.

Confira sua previsão

Calcule a frequência

Complete com a frequência aproximada do PWM padrão em D3:

16.000.000 / (64 × 510) ≈ {{lacuna}} Hz

Atualização não é frequência

Um programa troca o comando de analogWrite(3, ...) somente quando um botão é pressionado, talvez uma vez a cada vários segundos. O que acontece com a frequência dos pulsos PWM entre esses eventos?

Passo 5 de 8

Reserve os temporizadores antes de integrar

Mapeie os temporizadores do Uno R3 e preserve uma divisão de recursos que mantém o PWM em D3, o rebote por millis e a sinalização temporizada funcionando juntos.

Veja quais pinos compartilham o recurso

Um temporizador, dois canais

No Uno R3, os seis pinos com PWM padrão se organizam em pares porque cada par é atendido pelo mesmo temporizador. Os dois canais de um temporizador podem usar ciclos de trabalho diferentes, mas compartilham a mesma base de tempo.

Assim, alterar a configuração de um temporizador não é uma alteração “local” de um único pino: ela pode mudar ou interromper o PWM dos dois pinos associados a ele.

Mapa de compartilhamento

Diagrama que agrupa os pinos PWM do Uno R3 em três pares: 5 e 6, 9 e 10, 3 e 11; o LED externo está ligado ao pino 3.

Pares de pinos PWM no Uno R3: Timer0 → D5 e D6; Timer1 → D9 e D10; Timer2 → D3 e D11.

Pinos PWM e temporizadores

Use este mapa para prever impactos antes de juntar recursos no mesmo firmware.

Cada linha representa um temporizador e seus canais PWM padrão.
TemporizadorPinos PWMConsequência de reconfigurar
Timer0D5 e D6Pode afetar millis e ambos os pinos
Timer1D9 e D10Pode afetar ambos os pinos
Timer2D3 e D11Pode afetar ambos os pinos

Preserve a divisão de recursos

Uma divisão compatível

Nesta aplicação, a distribuição evita que uma tarefa desconfigure o recurso de outra:

  • Timer0: permaneça com o núcleo Arduino, para millis() e o tratamento de rebote.
  • Timer1: permaneça em CTC para a sinalização no LED integrado.
  • Timer2: permaneça na configuração padrão que gera o PWM do LED externo em D3.

Como o Timer1 já está em CTC, D9 e D10 não devem ser considerados disponíveis para o PWM padrão. Da mesma forma, D11 compartilha o Timer2 com D3: não reconfigure o Timer2 esperando preservar o brilho em D3.

Atenção

Conflitos que parecem distantes

No Uno R3 com o núcleo Arduino AVR, tone() usa o Timer2 mesmo que o som seja solicitado em outro pino. Portanto, usá-lo entra em conflito com o PWM planejado em D3.

Também evite digitalWrite() em D3 depois de iniciar o PWM: esse comando desativa o PWM daquele pino e força um nível digital. E, se alguma função ou biblioteca reconfigurou o Timer2, uma nova chamada a analogWrite(3, valor) não recompõe automaticamente toda a configuração anterior do temporizador.

Dica

Regra prática: antes de acrescentar uma função, verifique qual temporizador ela usa, não apenas em qual pino sua saída aparece.

Confira antes de integrar

Mapa de recursos

Associe cada temporizador ao par de pinos PWM que ele atende no Uno R3.

Toque em um item e depois no par correspondente.

Identifique o conflito

Qual alteração conflita diretamente com o PWM planejado para D3, mesmo que não escreva no pino 3?

Passo 6 de 8

Mude o brilho por eventos de botão

Use um evento de botão para alternar níveis de brilho em D3, mantendo o PWM do Timer2 e a sinalização não bloqueante do Timer1.

Organize o comportamento

Um evento, uma mudança de brilho

Cada pressionamento aceito em D2 avança um índice na sequência 0 → 64 → 128 → 192 → 255 → 0. O valor selecionado é enviado a analogWrite() em D3.

O tratamento de rebote continua separando leitura instantânea, estado estável e evento de pressionamento. Por isso, manter o botão pressionado não repete o avanço: somente uma nova transição aceita para pressionado produz outro evento.

O loop() atualiza o comando apenas nesses eventos. Entre eles, o Timer2 mantém os pulsos PWM em D3 continuamente. Em paralelo, o Timer1 em CTC é consultado sem espera ocupada para alternar o LED integrado.

Tarefas que continuam independentes

Diagrama do botão em D2 avançando níveis de PWM em D3, enquanto o Timer1 alterna o LED integrado em paralelo.

O botão altera eventualmente o comando; o PWM em D3 e a sinalização do LED integrado continuam sem espera bloqueante.

Use o sketch completo

Execute a integração

Grave o sketch completo abaixo no Uno R3 com o LED externo e o resistor em série em D3 e o botão entre D2 e GND. Ele inicia com o LED externo apagado. O Timer1 gera uma ocorrência a cada segundo; o programa consulta a flag OCF1A, limpa-a escrevendo 1 e alterna o LED integrado sem usar ISR.

O Timer0 não é reconfigurado, então millis() continua disponível para o rebote. O Timer2 também não é reconfigurado: analogWrite() preserva o PWM padrão de D3.

Botão, PWM e sinalização independente

Sketch completo para gravar localmente no Uno R3.

cpp
#include <avr/io.h>

const uint8_t PINO_LED = 3, PINO_BOTAO = 2;
const uint8_t niveis[] = {0, 64, 128, 192, 255};
const uint8_t QUANTIDADE_NIVEIS = sizeof(niveis) / sizeof(niveis[0]);
const unsigned long REBOTE_MS = 30;
uint8_t indiceNivel = 0;
bool leituraAnterior, estadoEstavel;
unsigned long mudouEm;

bool pressionamentoAceito() {
  bool leitura = digitalRead(PINO_BOTAO);
  unsigned long agora = millis();
  if (leitura != leituraAnterior) {
    leituraAnterior = leitura;
    mudouEm = agora;
  }
  if (agora - mudouEm >= REBOTE_MS && leitura != estadoEstavel) {
    estadoEstavel = leitura;
    return estadoEstavel == LOW;
  }
  return false;
}

void setup() {
  pinMode(PINO_LED, OUTPUT);
  pinMode(PINO_BOTAO, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
  analogWrite(PINO_LED, niveis[indiceNivel]);
  leituraAnterior = estadoEstavel = digitalRead(PINO_BOTAO);
  mudouEm = millis();

  TCCR1A = 0;
  TCCR1B = _BV(WGM12);
  TCNT1 = 0;
  OCR1A = 15624;
  TIFR1 = _BV(OCF1A);
  TCCR1B |= _BV(CS12) | _BV(CS10);
}

void loop() {
  if (TIFR1 & _BV(OCF1A)) {
    TIFR1 = _BV(OCF1A);
    PINB = _BV(PB5);
  }
  if (pressionamentoAceito()) {
    indiceNivel++;
    if (indiceNivel >= QUANTIDADE_NIVEIS) indiceNivel = 0;
    analogWrite(PINO_LED, niveis[indiceNivel]);
  }
}
Saída esperada
Sem saída textual: este sketch não usa Serial.

Resultado físico esperado: o LED externo começa apagado. Cada novo pressionamento aceito produz 64, 128, 192, 255 e depois 0, retornando ao início. Mantido pressionado, o botão não avança novamente. O LED integrado alterna aproximadamente uma vez por segundo, independentemente do botão.

Confira a atualização do nível

Conecte evento, índice e PWM

Complete a ligação entre o evento de pressionamento, o índice e o comando PWM. O índice já é limitado antes de acessar o vetor.

cpp
if (()) {
  indiceNivel++;
  if (indiceNivel >= QUANTIDADE_NIVEIS) indiceNivel = 0;
  analogWrite(PINO_LED, niveis[]);
}

Teste eventos e tarefas paralelas

Verifique o comportamento na placa

Faça a verificação na sua montagem, sem alterar a configuração dos temporizadores:

  1. Após gravar, confirme que o LED externo começa no nível 0.
  2. Dê cinco pressionamentos separados, soltando o botão entre eles. Espere a sequência 64, 128, 192, 255 e 0.
  3. Mantenha o botão pressionado por alguns segundos. O brilho deve mudar somente uma vez.
  4. Enquanto testa o botão, observe o LED integrado: ele deve continuar alternando aproximadamente a cada segundo.

A aparência do LED externo é uma verificação funcional de brilho; ela não mede a forma de onda elétrica. Mantenha o resistor em série durante todos os níveis, inclusive em 255.

Registre sua verificação

Registre o resultado dos quatro testes. Informe a sequência que você observou, se o botão mantido causou apenas uma mudança e se o LED integrado continuou alternando. Caso algum item não tenha ocorrido, descreva apenas o que aconteceu, sem tentar diagnosticar a causa nesta etapa.

Escreva pelo menos 80 caracteres (0/80).

Passo 7 de 8

Separe brilho observado de sinal medido

Diferencie observação visual, previsão calculada e medição opcional da forma de onda PWM.

Que evidência responde à pergunta?

Três tipos de evidência

O LED mais fraco confirma uma mudança perceptível de brilho. Porém, seus olhos não medem a forma de onda: essa observação não informa com segurança a frequência, o período, a duração do nível alto nem a amplitude elétrica em D3.

Use evidências diferentes para perguntas diferentes:

  • Observação visual: o brilho mudou ao pressionar o botão?
  • Previsão calculada: para um comando conhecido, quais são os valores aproximados de T e t_alto?
  • Medição: quais valores aparecem no osciloscópio conectado à sua montagem?

Não apresente um valor calculado como se tivesse sido medido.

Observe, calcule ou meça

Comparação entre observar o brilho do LED, calcular características do PWM e medir a forma de onda com osciloscópio.

Brilho observado, previsão e medição respondem a perguntas diferentes.

O que comparar no sinal

Prever antes de medir

Com a configuração padrão preservada, o PWM de D3 tem período previsto próximo de 2,04 ms. Para comandos intermediários, use a aproximação:

t_alto ≈ (comando / 255) × T

Os diagramas e valores desta tela são referências didáticas. Eles mostram previsões para a configuração conhecida; não são capturas nem resultados da sua placa.

Referência para a comparação

Compare comandos intermediários e extremos mantendo o Timer2 inalterado.

Valores previstos, não resultados medidos.
ComandoCiclo aprox.Período Tt_alto previstoEstado esperado
6425%2,04 ms0,51 msPulsos com nível alto curto
12850%2,04 ms1,02 msPulsos com níveis próximos
19275%2,04 ms1,54 msPulsos com nível alto longo
00%Não aplicávelNão aplicável: nível baixo constanteSem pulsos repetitivos
255100%Não aplicávelNão aplicável: nível alto constanteSem pulsos repetitivos

O que muda no traço

Diagramas de PWM com período igual e larguras de pulso diferentes, além de níveis constantes nos extremos.

Nos comandos intermediários, o espaçamento entre ciclos permanece aproximadamente igual e a largura do nível alto muda. Nos extremos, a saída fica constante.

Meça apenas se tiver o instrumento

Verificação opcional no instrumento

Se você tiver um osciloscópio próprio, a verificação é opcional. Com a placa conectada somente pelo USB, conecte a ponta de prova ao D3 e o clipe de referência exclusivamente ao GND da placa.

Observe vários ciclos em dois comandos intermediários, por exemplo 64 e 192. Compare o período entre os ciclos e a largura do nível alto. O período deve ficar aproximadamente constante; t_alto deve aumentar no comando maior.

Nos extremos 0 e 255, espere nível baixo ou alto constante, respectivamente, e não uma sequência de pulsos. Se não houver osciloscópio, não tente inferir a forma de onda pelo brilho: compare visualmente os níveis e registre isso como observação visual.

Atenção

Referência da ponta de prova

Antes de prender o clipe de referência, confirme que ele vai ao GND do Uno. Em muitos osciloscópios de bancada, esse clipe está ligado ao terra de proteção. Não o conecte a D3, ao 5 V ou a outro ponto do circuito: isso pode provocar curto-circuito ou danificar a montagem.

Registre sem confundir as evidências

Dê o nome certo à evidência

Associe cada afirmação ao tipo de evidência que a sustenta. A categoria correta importa: uma aparência vista não se transforma em valor elétrico medido.

Classifique a conclusão

Associe cada afirmação ao tipo de evidência correspondente.

Toque em um item e depois no par correspondente.

Registre a evidência

Relate uma evidência obtida nesta prática. Se usou osciloscópio, compare dois comandos intermediários e diga o que ocorreu com T e t_alto. Se não usou, descreva uma mudança de brilho observada e identifique-a explicitamente como observação visual, não como medição elétrica.

Escreva pelo menos 40 caracteres (0/40).

Passo 8 de 8

Aplique e confira o controle de brilho

Aplique uma alteração final de brilho, confira os recursos do Uno R3 e registre evidências sem confundir previsão com medição.

Sintetize antes de alterar

O que muda e o que permanece

A cadeia desta prática é: comando → ciclo de trabalho → tempo de condução → brilho percebido. Ao trocar um comando intermediário, o Timer2 preservado mantém a frequência próxima de 490 Hz e o período próximo de 2,04 ms. Muda a fração do período em nível alto.

O resistor em série também não muda de função: ele limita a corrente de pico durante cada pulso alto. Um ciclo de trabalho maior aumenta o tempo de condução e a corrente média, mas não justifica retirar o resistor nem aumentar a corrente de pico.

A cadeia do controle de brilho

Diagrama mostra que um comando maior aumenta a largura do nível alto e o tempo de condução do LED, enquanto o período e o resistor em série permanecem.

O comando altera a largura do pulso; a base de tempo do Timer2 e a proteção por resistor são preservadas.

Dica

Checklist de compatibilidade

Antes de alterar o programa, confira a divisão de recursos já adotada: Timer0 continua atendendo millis() e o rebote; Timer1 permanece em CTC para alternar o LED integrado; Timer2 continua reservado ao PWM de D3.

Mantenha D3 sob controle de analogWrite(): não aplique digitalWrite() nesse pino e não acrescente tone() ou outro recurso que use ou reconfigure o Timer2. D3 e D11 compartilham esse temporizador.

Preveja antes de gravar

Preveja o novo ciclo de trabalho

Você substituirá o nível 128 por 160 na sequência. Antes de ver a alteração, complete: para o comando 160, o ciclo de trabalho aproximado é ____ %.

Preveja o tempo de condução

Mantendo T ≈ 2,04 ms, complete a previsão: para o comando 160, t_alto é aproximadamente ____ ms.

Aplique a alteração

Altere a lista existente

No sketch completo executado no step “Mude o brilho por eventos de botão”, substitua exatamente a declaração já existente de niveis. Não altere os demais identificadores, a configuração do Timer1 nem o restante do programa.

A nova lista troca somente o nível intermediário 128 por 160. Grave o sketch inteiro novamente na sua placa.

Lista de níveis revisada

Substitua a declaração anterior por esta linha no mesmo sketch:

cpp
const uint8_t niveis[] = {0, 64, 160, 192, 255};
Saída esperada
Início: 0
1º pressionamento aceito: 64
2º pressionamento aceito: 160
3º pressionamento aceito: 192
4º pressionamento aceito: 255
5º pressionamento aceito: 0

Botão mantido: nenhuma repetição adicional.
LED integrado: continua alternando aproximadamente a cada segundo.

A saída visual depende da sua montagem; a sequência abaixo descreve o comportamento esperado após pressionamentos aceitos, não texto exibido pela IDE.

Confira a integração

Após trocar 128 por 160, qual afirmação descreve corretamente o funcionamento esperado?

Registre e conclua

Registre a validação

Faça a validação na sua montagem e use nomes corretos para as evidências. Registre: a sequência que você observou; se houve uma única mudança por pressionamento; se o LED integrado continuou alternando; e se o resistor permaneceu em série.

Se não usou osciloscópio, escreva que 62,7%, 1,28 ms e cerca de 490 Hz são previsões calculadas, não medições. Se usou instrumento próprio, identifique separadamente os valores efetivamente medidos em D3.

Escreva pelo menos 100 caracteres (0/100).

Controle de brilho concluído

Parabéns! Você concluiu: Controle de brilho com PWM no Uno R3

Critérios de sucesso: uma mudança por pressionamento, sequência de brilho funcional, resistor mantido em série, sinalização independente ativa e Timer2 preservado para o PWM em D3.

Baixe o Aplicativo agora para ter acesso a + de 5000 cursos gratuitos, exercícios, certificado e muito conteúdo sem pagar nada!

  • Cursos online 100% gratuitos do início ao fim

    Milhares de cursos online em vídeo, ebooks e áudiobooks.

  • Mais de 60 mil exercícios gratuitos

    Para testar seus conhecimentos no decorrer dos cursos online

  • Certificado Digital gratuito válido em todo o Brasil

    Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail

Aplicativo Cursa na tela de ebook, na tela de curso em vídeo e na tela de exercícios do curso, mais o certificado de conclusão de curso