L4: LED de intensidad variable
Categorías:
LED de intensidad variable
Qué vas a aprender en esta lección
En esta lección trabajaremos:
- Control de la intensidad de un LED externo desde la placa de desarrollo.
- Salidas PWM. Qué son y para qué sirven.
Requisitos previos
Para poder seguir esta lección debes haber completado previamente la Lección 1: Mi primer proyecto, la Lección 2: El diodo LED y la Lección 3: El diodo LED (2). En esta lección usaremos el mismo tipo de montaje que en la lección anterior, pero aprenderemos a controlar el LED con más valores que simplemente encendido y apagado.
Explicación teórica
¡Quiero saber más!
Encendido, apagado… y puntos intermedios
En las lecciones anteriores hemos usado el LED de una forma muy sencilla:
- Valor 100: el LED se enciende.
- Valor 0: el LED se apaga.
Pero en muchos proyectos no queremos solamente encender o apagar una luz. A veces queremos que brille poco, que brille mucho o que vaya cambiando poco a poco. Por ejemplo:
- Una luz de ambiente.
- Un indicador que aumenta de intensidad.
- Una alarma luminosa que se enciende suavemente.
- Un efecto de “respiración”, en el que la luz sube y baja de intensidad.
Para conseguirlo necesitamos controlar la intensidad del LED.
¿Puede un pin digital dar valores intermedios?
Un pin digital de la placa puede estar en dos estados principales:
- ON: conectado al voltaje positivo.
- OFF: conectado a GND.
Eso parece un problema: si solo hay ON y OFF, ¿cómo podemos conseguir que un LED parezca encendido al 25%, al 50% o al 75%?
La solución consiste en encender y apagar el LED muy rápido. Tan rápido que nuestros ojos no ven los parpadeos separados, sino una luz con más o menos brillo.
Salidas PWM
PWM significa Pulse Width Modulation, que podemos traducir como modulación por anchura de pulso.
Aunque el nombre parece complicado, la idea básica es sencilla:
- Si el LED está encendido casi todo el tiempo, lo veremos muy brillante.
- Si el LED está encendido solo una parte pequeña del tiempo, lo veremos con poca luz.
- Si el LED está encendido la mitad del tiempo y apagado la otra mitad, lo veremos con una intensidad intermedia.
Por ejemplo, durante un periodo muy corto de tiempo:
| Valor enviado al LED | Tiempo encendido | Resultado aproximado |
|---|---|---|
| 0 | 0% | Apagado |
| 25 | 25% | Poca luz |
| 50 | 50% | Luz media |
| 100 | 100% | Máxima luz |
Al porcentaje de tiempo que la señal permanece encendida se le suele llamar ciclo de trabajo o duty cycle.
No es necesario que recuerdes el nombre técnico para completar la lección. Lo importante es entender la idea: con PWM el LED se enciende y se apaga muy rápido, y eso nos permite controlar cómo de brillante parece.
¿Por qué no vemos el parpadeo?
Nuestros ojos no detectan todos los cambios si ocurren muy rápido. Algo parecido sucede en el cine o en los vídeos: vemos movimiento continuo aunque en realidad se muestran muchas imágenes fijas una detrás de otra.
Con PWM ocurre algo parecido. El LED cambia entre ON y OFF muchas veces por segundo. Como sucede muy rápido, nuestro ojo interpreta el resultado como una luz más fuerte o más débil.
Parte Práctica
Necesitas los siguientes materiales:
- Placa de desarrollo ESP32.
- Placa de expansión BatSTEM.
- Cable de conexión USB.
- Placa de prototipos.
- LED rojo.
- Resistencia de 100 Ohm.
- Cables de conexión.
Esquema electrónico y diagrama de conexión
En esta lección vamos a reutilizar el montaje de la Lección 3: El diodo LED (2). El LED externo estará conectado a un pin GPIO de la placa de desarrollo a través de una resistencia de protección.
Usaremos el pin GPIO4, igual que en la lección anterior.

Esquema electrónico

Conexión de los componentes en la placa de prototipos
Paso a paso
- Coloca la placa de desarrollo ESP32 sobre la placa de expansión BatSTEM.
- Conecta un cable negro entre el conector GND de la placa de expansión y la línea azul de la placa de prototipos. Esta será nuestra línea de 0 voltios, referencia o GND.
- Conecta un cable desde el pin D4 (GPIO4) de la placa de expansión hasta una línea libre de la zona central de la placa de prototipos.
- Coloca una resistencia de 100 Ohm de manera que uno de sus terminales esté en la misma línea que el cable conectado al pin GPIO4.
- Conecta el LED rojo: el ánodo debe quedar en la misma línea que el otro terminal de la resistencia y el cátodo debe quedar en una línea diferente.
- Conecta un cable negro entre la línea del cátodo del LED y la línea azul de GND.
- Conecta la placa de desarrollo al ordenador con el cable USB.
Recuerda que el LED tiene polaridad. Si el LED no se enciende durante la práctica, revisa que el ánodo y el cátodo estén colocados en el sentido correcto y que la resistencia esté en serie con el LED.
Código
En esta lección vamos a crear dos sketches. En el primero probaremos distintos niveles de intensidad. En el segundo haremos que el LED aumente y disminuya su brillo poco a poco.
¡Quiero saber más!
Cuando usamos el bloque de alto nivel para un LED, el valor no tiene por qué ser solamente 0 o 100. También podemos usar valores intermedios. BatSTEM Cloud se encarga de generar la señal PWM necesaria para que el LED parezca más o menos brillante.
Esto nos permite concentrarnos en la idea del programa sin tener que configurar manualmente todos los detalles de la señal PWM.
También existe una forma de bajo nivel en la categoría GPIO: el bloque “poner pin al % analógico”. Ese bloque permite enviar un porcentaje directamente a un pin GPIO. En esta lección usaremos primero el bloque “LED con nombre” porque es más claro y evita tener que recordar el número del pin en cada paso.
Probar varias intensidades
Construye y ejecuta el siguiente sketch:

- En el bloque configuración, crea un LED con nombre conectado al pin GPIO4. Puedes llamarlo MiLED.
- En el bucle principal, pon el LED al valor 0.
- Añade una espera de 1 segundo.
- Pon el LED al valor 25.
- Añade una espera de 1 segundo.
- Pon el LED al valor 50.
- Añade una espera de 1 segundo.
- Pon el LED al valor 75.
- Añade una espera de 1 segundo.
- Pon el LED al valor 100.
- Añade una espera de 1 segundo.
Paso a paso
- Haz clic en Dispositivos y arrastra un bloque “LED con nombre” al bloque configuración.
- Escribe MiLED como nombre del LED.
- Selecciona el pin GPIO4, que es el pin al que hemos conectado el LED externo.
- Arrastra un bloque “poner LED” al bucle principal y selecciona el LED MiLED.
- Escribe el valor 0 en el bloque “poner LED”.
- Haz clic en Tiempo y añade un bloque de espera de 1 segundo.
- Duplica la pareja formada por “poner LED” y “esperar” hasta tener cinco niveles.
- Cambia los valores del LED para que sean 0, 25, 50, 75 y 100.
- Pulsa el botón Ejecutar y espera a que el sketch se compile y se transfiera a la placa.
- Observa cómo el LED cambia de intensidad paso a paso.
Si te cuesta distinguir algunos niveles, prueba a mirar el LED desde un lado o a bajar un poco la luz de la habitación. Algunos LEDs tienen diferencias de brillo más fáciles de ver que otros.
Crear un efecto de luz suave
Ahora vamos a hacer que el LED suba y baje de intensidad. Construye un nuevo sketch con esta secuencia:

- LED al valor 0.
- Esperar 200 milisegundos.
- LED al valor 20.
- Esperar 200 milisegundos.
- LED al valor 40.
- Esperar 200 milisegundos.
- LED al valor 60.
- Esperar 200 milisegundos.
- LED al valor 80.
- Esperar 200 milisegundos.
- LED al valor 100.
- Esperar 200 milisegundos.
- Repetir la misma secuencia hacia abajo: 80, 60, 40, 20, 0.
Paso a paso
- Mantén el bloque “LED con nombre” en la configuración, conectado al pin GPIO4.
- En el bucle principal, coloca bloques “poner LED” y bloques de espera alternados.
- Usa primero valores que suben: 0, 20, 40, 60, 80, 100.
- Después añade valores que bajan: 80, 60, 40, 20, 0.
- Pon una espera de 200 milisegundos después de cada cambio de intensidad.
- Ejecuta el sketch.
Cuando termine la secuencia, el bucle principal volverá a empezar desde el principio, así que el efecto se repetirá continuamente.
Este tipo de efecto se suele llamar fundido o fade. En proyectos reales se usa para que las luces no cambien de golpe, sino de manera más agradable.
La misma idea con bloques GPIO
¡Quiero saber más!
Los bloques de alto nivel nos permiten trabajar con un LED usando un nombre. Pero también podemos controlar directamente el pin con bloques de la categoría GPIO.
Para probarlo, puedes construir un sketch equivalente usando el bloque “poner pin al % analógico”:
- En el bucle principal, añade un bloque “poner pin al % analógico”.
- Escribe el pin 4.
- Escribe el valor 0.
- Añade una espera.
- Repite la misma idea con valores 25, 50, 75 y 100.
El resultado será parecido al del bloque “poner LED”, pero ahora estarás controlando directamente el pin GPIO. Esta forma es más flexible, aunque también exige tener más cuidado con el número del pin.
Ejercicios adicionales o retos
- Cambia los tiempos de espera para que el efecto sea más rápido o más lento.
Si aumentas el tiempo de espera, el cambio será más lento. Si lo reduces, el cambio será más rápido.
- Cambia los valores intermedios para que el LED tenga más pasos de intensidad.
Puedes probar con valores de 10 en 10: 0, 10, 20, 30… hasta 100. El efecto será más suave, pero necesitarás más bloques.
Crea una señal luminosa que haga esto: subir poco a poco, quedarse encendida al máximo durante 2 segundos y apagarse de golpe.
Conecta un segundo LED a otro pin GPIO y crea un efecto en el que uno aumente de intensidad mientras el otro disminuye.
Resumen de lo aprendido
- Hemos aprendido que un LED no tiene por qué estar solamente encendido o apagado.
- Hemos usado valores intermedios para controlar la intensidad de un LED externo.
- Hemos visto que PWM permite simular distintos niveles de brillo encendiendo y apagando el LED muy rápido.
- Hemos creado un efecto de fundido en el que la luz sube y baja de intensidad.
- Hemos reutilizado el montaje de la lección anterior para aprender una nueva forma de controlar el LED.
Próximos pasos
- Aprende a controlar varios colores con un LED RGB en la Lección 5.
Soluciones a ejercicios adicionales
Mostrar
Efecto más suave con pasos de 10 en 10
Para crear un cambio de brillo más suave podemos usar más valores intermedios. Por ejemplo:
- 0
- 10
- 20
- 30
- 40
- 50
- 60
- 70
- 80
- 90
- 100
Después repetimos la misma secuencia en sentido contrario. El programa será más largo, pero el cambio entre un nivel y el siguiente será menos brusco.
Señal luminosa con encendido progresivo
Para resolver el tercer reto, podemos usar esta idea:
- Subir la intensidad con varios valores intermedios.
- Cuando el LED llegue a 100, añadir una espera de 2 segundos.
- Después poner el LED directamente a 0.
- Añadir otra espera antes de repetir la secuencia.
Dos LEDs en sentido contrario
Para que un LED aumente mientras otro disminuye, necesitamos crear dos LEDs con nombre en el bloque configuración. Por ejemplo:
- LED_A en GPIO4.
- LED_B en otro pin GPIO disponible.
Después, en cada paso del bucle principal, usamos valores opuestos:
| LED_A | LED_B |
|---|---|
| 0 | 100 |
| 20 | 80 |
| 40 | 60 |
| 60 | 40 |
| 80 | 20 |
| 100 | 0 |