Código de Pesquisa

Lição 98-5: Apagar a luz quando um botão é pressionado usando Arduino

Lição 98-5: Apagar a luz quando um botão é pressionado usando Arduino

Nesta lição, você construirá uma luz que se apaga sob comando: pressione um botão e o LED começa com brilho total, depois diminui suavemente até apagar. Este é um dos padrões para iniciantes mais úteis no Arduino, porque combina uma entrada digital (o botão) com uma saída analógica PWM (o brilho do LED), e ensina você a controlar a taxa e a suavidade de uma mudança em vez de apenas ligar e desligar algo.

LED com resistor na protoboard conectado ao Arduino com um botão
LED com resistor na protoboard conectado ao Arduino com um botão

O fading sob demanda aparece em todos os lugares em produtos reais. Aqui estão algumas maneiras práticas de usar o que você aprende aqui:

  • Luzes indicadoras de desligamento suave — em vez de uma lâmpada apagar de repente, ela diminui suavemente quando você pressiona um botão, o que parece muito mais refinado em eletrodomésticos e caixas impressas em 3D.
  • Modo de suspensão / espera — pressione um botão e um LED de status brilhante se apaga até ficar preto para não incomodá-lo à noite, enquanto o circuito permanece energizado.
  • Iluminação de palco ou de maquete com "fade to black" — um único botão aciona um escurecimento suave de uma fita ou painel de LED em vez de um corte abrupto.
  • Feedback para economizar bateria — um toque momentâneo no botão fornece um flash de confirmação brilhante que se apaga, então o LED só fica totalmente aceso por um curto período.
  • Arte interativa e adereços — um efeito de "expiração" acionado pelo toque, ideal para cosplay, dioramas ou exposições de museu.

A ideia central é simples: o botão diz ao Arduino "comece a fazer o fade agora", e o Arduino diminui o brilho do LED de 255 (total) para 0 (apagado) em pequenos passos. Como os passos são pequenos e acontecem rapidamente, seu olho vê um fade suave em vez de um salto.

Se você nunca fez um LED fading antes, o controle de brilho subjacente é abordado na Lição 98-4: Fazendo um LED com Fading Usando Arduino: Controle de Brilho. Esta lição se baseia diretamente nessa base adicionando um botão como gatilho.

Hardware e Componentes

330_ohm_resistor
330_ohm_resistor

Esta é uma montagem de custo muito baixo — tudo aqui é material padrão de kit inicial:

  • Placa Arduino (Uno, Nano, Mega ou qualquer placa compatível)
  • Um LED (5 mm ou 3 mm, qualquer cor)
  • Um botão de pressão (tipo tátil momentâneo de 4 pinos funciona bem)
  • Um resistor para o LED — em qualquer lugar de 200 Ω a 1000 Ω (o clássico 220 Ω ou 330 Ω é perfeito)
  • Protoboard e fios jumper DuPont
  • Cabo USB para programação (e uma bateria ou adaptador de 5 V se você quiser que funcione sem fio)

Uma observação rápida sobre o resistor do LED: um LED precisa de aproximadamente 2 V através dele e cerca de 10 mA de corrente. Com uma alimentação de 5 V, o resistor tem que dissipar os 3 V restantes, então a lei de Ohm dá cerca de 300 Ω. Qualquer valor de 300 Ω até 1000 Ω funcionará — valores mais altos apenas deixam o LED mais fraco. Usar um resistor não é opcional; sem ele o LED consumirá corrente muito acima do limite e queimará.

Guia de Ligação

Esquema do Arduino para LED com um botão
Esquema do Arduino para LED com um botão
Ligação do Arduino para LED com um botão
Ligação do Arduino para LED com um botão

A fiação é intencionalmente mínima. O ânodo do LED (a perna mais longa) conecta-se através do resistor ao pino digital 3, e seu cátodo (a perna mais curta, com o lado plano na cápsula) vai para o terra. O botão conecta-se entre o pino digital 2 e o terra — nenhum resistor de pull-up externo é necessário porque o código habilita o pull-up interno do Arduino.

Preste atenção à polaridade do LED: o lado plano do corpo de plástico e a perna mais curta marcam o cátodo (negativo). Se você inseri-lo ao contrário, o LED simplesmente não acenderá — nenhum dano ocorre, apenas vire-o.

Para o botão, se você estiver usando um interruptor tátil de 4 pinos, lembre-se de que os pinos são pareados internamente: dois dos quatro pinos estão sempre conectados juntos. Use um multímetro no modo de continuidade para encontrar um par que apite quando pressionado, depois use um pino de cada lado. Um lado vai para o pino 2, o outro para o terra.

Explicação do Código

O sketch é curto, e quase tudo que você pode querer alterar está em algumas linhas no topo. Aqui estão as partes configuráveis pelo usuário:

const int pushButtonPin = 2;//o pino ao qual o interruptor de botão está conectado
const int LEDPin = 3;//o pino ao qual o LED está conectado
const int fadeAmount = 10;    // quantos pontos esmaecer o LED
const int fadeSpeed = 5;//tempo de esmaecimento em milissegundos. quanto menor o valor, mais rápido o esmaecimento

pushButtonPin e LEDPin simplesmente informam ao Arduino a quais pinos você conectou as coisas. Se você mover o botão para o pino 4 ou o LED para o pino 9 (um pino compatível com PWM), basta alterar esses dois números para corresponder à sua fiação. Observe que o pino do LED deve suportar PWM — em um Uno, isso significa os pinos 3, 5, 6, 9, 10 ou 11 — porque o esmaecimento requer analogWrite().

fadeAmount controla o tamanho de cada passo de brilho. O brilho vai de 0 a 255, então um fadeAmount de 10 significa que o LED escurece em aproximadamente 25 passos. Um número maior torna o esmaecimento mais grosseiro e rápido; um número menor o torna mais suave e lento.

fadeSpeed é o atraso em milissegundos entre cada passo. Este é o ajuste mais importante para como o efeito parece. Um valor de 5 ms proporciona um esmaecimento rápido e ágil; um valor de 30 ms ou mais proporciona um escurecimento lento e luxuoso. Combinados com fadeAmount, esses dois valores permitem ajustar o esmaecimento exatamente ao caráter que você deseja.

Há também uma variável interna que vale a pena conhecer:

int brightness = 255;    // quão brilhante o LED está
int pushButtonStatus = 0; // valor de leitura do pino 2

brightness começa em 255, o que significa que o LED começa com brilho total toda vez que você pressiona o botão. Se você quiser que o esmaecimento comece de um ponto mais escuro — digamos, metade do brilho — altere para 128.

A lógica em si funciona assim: o loop lê o botão. Se ele estiver pressionado (LOW, por causa do pull-up interno), um loop while é executado enquanto o brilho estiver acima de zero. Dentro desse loop, o Arduino escreve o brilho atual no LED, subtrai fadeAmount, espera fadeSpeed milissegundos e repete. Quando o botão não está pressionado, o LED simplesmente recebe 0 e permanece apagado.

Um detalhe importante: o pull-up interno faz com que o pino leia HIGH quando o botão não está pressionado e LOW quando está pressionado. É por isso que o código verifica LOW para detectar um pressionamento. Se você algum dia trocar para um resistor de pull-down externo, precisará alterar essa comparação para HIGH.

Projeto ao Vivo e Demonstração

Depois de carregado, o comportamento é imediato e satisfatório. Pressione o botão e o LED salta para o brilho total, depois escurece visivelmente até apagar completamente ao longo de um período que você controla. Solte o botão e o LED apaga; pressione novamente e o esmaecimento reinicia a partir do brilho total.

No vídeo, o esmaecimento é demonstrado com várias configurações para que você possa ouvir e ver a diferença. Com fadeAmount = 20, o esmaecimento é rápido e em blocos — ele chega a zero em alguns passos visíveis. Reduzir para fadeAmount = 10 o suaviza consideravelmente, e ir para fadeAmount = 3 faz o esmaecimento levar visivelmente mais tempo e parecer quase contínuo. O valor de fadeSpeed tem um efeito igualmente dramático: defini-lo como 1 ms torna o esmaecimento quase instantâneo, enquanto valores maiores o prolongam.

Tente este experimento: defina fadeAmount = 5 e fadeSpeed = 30. Você obterá um escurecimento lento e suave que parece uma luz adormecendo. Depois defina fadeAmount = 50 e fadeSpeed = 1 para um corte brusco e rápido. Nenhum dos dois está "errado" — trata-se inteiramente do clima que você deseja.

O comportamento de alternância do mesmo botão é abordado separadamente em Lição 98-3: Como Ligar/Desligar um LED de Alternância Usando um Botão com Arduino, e a versão mais simples de pressionar para acender está em Lição 98-2: Como Ligar e Desligar um LED Usando um Botão com Arduino.

Como o esmaecimento é acionado por um contato momentâneo, este mesmo circuito é naturalmente adequado para acionar um relé ou MOSFET em vez de um LED — você poderia esmaecer uma lâmpada de 12 V, a partida suave de um motor ou o aquecimento de um elemento aquecedor. O botão é apenas o gatilho; o que você esmaece depende de você.

Projetos relacionados deste vídeo

Capítulos

  • [00:00] Visão geral dos 10 projetos de LED
  • [01:00] Introdução ao curso passo a passo de Arduino
  • [02:29] Noções básicas de LED: símbolos, polaridade e corrente
  • [03:49] Calculando o resistor do LED com a lei de Ohm
  • [05:53] Projeto 1: Acendendo e apagando um LED
  • [12:43] Projeto 2: LED com botão de pressão
  • [17:13] Projeto 3: Alternar LED com botão de pressão
  • [20:12] Projeto 4: Esmaecendo um LED
  • [23:20] Projeto 5: Esmaecendo um LED com um botão de pressão
  • [27:32] Projeto 6: LED gangorra
  • [30:47] Projeto 7: Luz caminhante
  • [36:41] Projeto 8: Luz caminhante com botão de pressão
  • [42:25] Projeto 9: Medidor de nível de tensão com LED
  • [49:25] Projeto 10: Semáforo com Arduino

Imagens

Arduino wiring for LED with a push button switch
Arduino wiring for LED with a push button switch
Arduino schematic for LED with a push button switch
Arduino schematic for LED with a push button switch
LED-5mm-green
LED-5mm-green
330_ohm_resistor
330_ohm_resistor
LED com resistor em breadboard conectado ao Arduino com um botão de pressão
LED com resistor em breadboard conectado ao Arduino com um botão de pressão
937-Lessson 98-LED-5: Arduino code to fade the LED when push button is pressed
Idioma: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Arquivos📁

Bibliotecas do Arduino (zip)

Manual do Usuário