Código de búsqueda

Lección 98-5: Atenuar la luz cuando se presiona un botón usando Arduino

Lección 98-5: Atenuar la luz cuando se presiona un botón usando Arduino

En esta lección construirás una luz que se desvanece al recibir la orden: presiona un pulsador y el LED comienza con brillo máximo, luego se atenúa suavemente hasta apagarse. Este es uno de los patrones para principiantes más útiles en Arduino porque combina una entrada digital (el botón) con una salida analógica PWM (el brillo del LED), y te enseña cómo controlar la velocidad y la suavidad de un cambio en lugar de simplemente encender y apagar algo.

LED con resistencia en protoboard conectado a Arduino con un pulsador
LED con resistencia en protoboard conectado a Arduino con un pulsador

El desvanecimiento a demanda aparece en todas partes en productos reales. Aquí hay algunas formas prácticas en que puedes usar lo que aprendes aquí:

  • Luces indicadoras de apagado suave — en lugar de que una lámpara se apague de golpe, se atenúa suavemente cuando presionas un botón, lo que se ve mucho más pulido en electrodomésticos y carcasas impresas en 3D.
  • Modo suspensión / espera — presiona un botón y un LED de estado brillante se desvanece a negro para que no te moleste por la noche, mientras el circuito permanece encendido.
  • Iluminación escénica o de maquetas con "fundido a negro" — un solo botón activa un atenuado suave de una tira o panel de LED en lugar de un corte abrupto.
  • Retroalimentación para ahorro de batería — una pulsación momentánea te da un destello de confirmación brillante que se desvanece, por lo que el LED solo está completamente encendido por un corto tiempo.
  • Arte interactivo y utilería — un efecto de "exhalación" activado por el tacto, ideal para cosplay, dioramas o exhibiciones de museo.

La idea central es simple: el botón le dice al Arduino "comienza a desvanecer ahora", y el Arduino lleva el brillo del LED desde 255 (máximo) hasta 0 (apagado) en pequeños pasos. Como los pasos son pequeños y ocurren rápidamente, tu ojo ve un desvanecimiento suave en lugar de un salto.

Si nunca antes has desvanecido un LED, el control de brillo subyacente se cubre en Lección 98-4: Desvanecer una luz LED usando Arduino: Control de brillo. Esta lección se basa directamente en esa base añadiendo un pulsador como disparador.

Hardware y componentes

resistencia_de_330_ohmios
resistencia_de_330_ohmios

Esta es una construcción de muy bajo costo — todo aquí es material estándar de kit de iniciación:

  • Placa Arduino (Uno, Nano, Mega o cualquier placa compatible)
  • Un LED (de 5 mm o 3 mm, de cualquier color)
  • Un pulsador (tipo táctil momentáneo de 4 pines funciona bien)
  • Una resistencia para el LED — en cualquier valor desde 200 Ω hasta 1000 Ω (la clásica de 220 Ω o 330 Ω es perfecta)
  • Protoboard y cables jumper DuPont
  • Cable USB para programar (y una batería o adaptador de 5 V si quieres que funcione sin cables)

Una nota rápida sobre la resistencia del LED: un LED necesita aproximadamente 2 V entre sus terminales y alrededor de 10 mA de corriente. Con una fuente de 5 V, la resistencia debe dejar caer los 3 V restantes, así que la ley de Ohm da alrededor de 300 Ω. Cualquier valor desde 300 Ω hasta 1000 Ω funcionará — valores más altos solo hacen que el LED sea más tenue. Usar una resistencia no es opcional; sin ella el LED consumirá demasiada corriente y se quemará.

Guía de conexión

Esquema de Arduino para LED con un pulsador
Esquema de Arduino para LED con un pulsador
Cableado de Arduino para LED con un pulsador
Cableado de Arduino para LED con un pulsador

El cableado es intencionalmente mínimo. El ánodo del LED (la pata más larga) se conecta a través de la resistencia al pin digital 3, y su cátodo (la pata más corta, con el lado plano en la carcasa) va a tierra. El pulsador se conecta entre el pin digital 2 y tierra — no se necesita una resistencia pull-up externa porque el código habilita el pull-up interno del Arduino.

Presta atención a la polaridad del LED: el lado plano del cuerpo de plástico y la pata más corta marcan el cátodo (negativo). Si lo insertas al revés, el LED simplemente no se encenderá — no ocurre ningún daño, solo gíralo.

Para el pulsador, si estás usando un interruptor táctil de 4 pines, recuerda que los pines están emparejados internamente: dos de los cuatro pines siempre están conectados entre sí. Usa un multímetro en modo de continuidad para encontrar un par que emita un pitido al presionarlo, luego usa un pin de cada lado. Un lado va al pin 2, el otro a tierra.

Explicación del código

El sketch es corto, y casi todo lo que podrías querer cambiar vive en un puñado de líneas en la parte superior. Aquí están las partes configurables por el usuario:

const int pushButtonPin = 2;//el pin al que está conectado el interruptor del botón pulsador
const int LEDPin = 3;//el pin al que está conectado el LED
const int fadeAmount = 10;    // cuántos puntos atenuar el LED
const int fadeSpeed = 5;//tiempo de atenuación en milisegundos. cuanto menor sea el valor, más rápida será la atenuación

pushButtonPin y LEDPin simplemente le indican al Arduino a qué pines conectaste las cosas. Si mueves el botón al pin 4 o el LED al pin 9 (un pin compatible con PWM), solo cambia estos dos números para que coincidan con tu cableado. Ten en cuenta que el pin del LED debe ser compatible con PWM — en un Uno eso significa los pines 3, 5, 6, 9, 10 u 11 — porque la atenuación requiere analogWrite().

fadeAmount controla qué tan grande es cada paso de brillo. El brillo va de 0 a 255, así que un fadeAmount de 10 significa que el LED se atenúa en aproximadamente 25 pasos. Un número mayor hace que la atenuación sea más brusca y rápida; un número menor la hace más suave y lenta.

fadeSpeed es el retardo en milisegundos entre cada paso. Esta es la perilla más importante para cómo se siente el efecto. Un valor de 5 ms da una atenuación rápida y ágil; un valor de 30 ms o más da una atenuación lenta y lujosa. Combinados con fadeAmount, estos dos valores te permiten ajustar la atenuación exactamente al carácter que deseas.

También hay una variable interna que vale la pena conocer:

int brightness = 255;    // qué tan brillante está el LED
int pushButtonStatus = 0; // valor pulsado del pin 2

brightness comienza en 255, lo que significa que el LED empieza con brillo máximo cada vez que presionas el botón. Si quieres que la atenuación comience desde un punto más tenue — digamos, medio brillo — cambia esto a 128.

La lógica en sí funciona así: el bucle lee el botón. Si está presionado (LOW, debido a la resistencia pull-up interna), un bucle while se ejecuta mientras el brillo esté por encima de cero. Dentro de ese bucle, el Arduino escribe el brillo actual en el LED, resta fadeAmount, espera fadeSpeed milisegundos y repite. Cuando el botón no está presionado, el LED simplemente se escribe a 0 y permanece apagado.

Un detalle importante: la resistencia pull-up interna hace que el pin lea HIGH cuando el botón no está presionado y LOW cuando lo está. Por eso el código verifica LOW para detectar una pulsación. Si alguna vez cambias a una resistencia pull-down externa, tendrías que cambiar esa comparación a HIGH.

Proyecto en vivo y demostración

Una vez cargado, el comportamiento es inmediato y satisfactorio. Presiona el botón y el LED salta a brillo máximo, luego se atenúa visiblemente hasta apagarse durante un período que tú controlas. Suelta el botón y el LED se apaga; presiona de nuevo y la atenuación se reinicia desde brillo máximo.

En el video se demuestra la atenuación con varios ajustes para que puedas oír y ver la diferencia. Con fadeAmount = 20 la atenuación es rápida y a saltos — llega a cero en unos pocos pasos visibles. Bajar a fadeAmount = 10 la suaviza considerablemente, y pasar a fadeAmount = 3 hace que la atenuación tarde notablemente más y se vea casi continua. El valor de fadeSpeed tiene un efecto igualmente dramático: ponerlo en 1 ms hace que la atenuación sea casi instantánea, mientras que valores mayores la alargan.

Prueba este experimento: establece fadeAmount = 5 y fadeSpeed = 30. Obtendrás una atenuación lenta y suave que parece una luz quedándose dormida. Luego establece fadeAmount = 50 y fadeSpeed = 1 para un corte duro y rápido. Ninguno está "mal" — se trata enteramente del ambiente que quieras.

El comportamiento de alternancia del mismo botón se cubre por separado en Lección 98-3: Cómo encender/apagar un LED conmutador usando un botón pulsador con Arduino, y la versión más simple de presionar para iluminar está en Lección 98-2: Cómo encender y apagar un LED usando un botón pulsador con Arduino.

Como la atenuación se activa mediante un contacto momentáneo, este mismo circuito es una opción natural para controlar un relé o un MOSFET en lugar de un LED — podrías atenuar una lámpara de 12 V, el arranque suave de un motor o el calentamiento de un elemento calefactor. El botón es solo el disparador; lo que atenúas depende de ti.

Proyectos relacionados de este video

Capítulos

  • [00:00] Resumen de los 10 proyectos con LED
  • [01:00] Introducción al curso paso a paso de Arduino
  • [02:29] Fundamentos del LED: símbolos, polaridad y corriente
  • [03:49] Cálculo de la resistencia del LED con la ley de Ohm
  • [05:53] Proyecto 1: Encender y apagar un LED
  • [12:43] Proyecto 2: LED con pulsador
  • [17:13] Proyecto 3: Alternar LED con pulsador
  • [20:12] Proyecto 4: Atenuar un LED
  • [23:20] Proyecto 5: Atenuar un LED con un pulsador
  • [27:32] Proyecto 6: LED balancín
  • [30:47] Proyecto 7: Luz caminante
  • [36:41] Proyecto 8: Luz caminante con pulsador
  • [42:25] Proyecto 9: Medidor de nivel de voltaje con LED
  • [49:25] Proyecto 10: Semáforo con Arduino

Imágenes

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 con resistencia en protoboard conectado a Arduino con un pulsador
LED con resistencia en protoboard conectado a Arduino con un pulsador
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.

Archivos📁

Bibliotecas de Arduino (zip)

Manual del Usuario