Nota
¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder para Raspberry Pi, Arduino y ESP32 en Facebook. Sumérgete junto a otros entusiastas en el mundo de Raspberry Pi, Arduino y ESP32.
¿Por qué unirte?
Soporte Experto: Resuelve problemas postventa y desafíos técnicos con ayuda de nuestra comunidad y equipo.
Aprende y Comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.
Avances Exclusivos: Accede anticipadamente a anuncios de nuevos productos y adelantos exclusivos.
Descuentos Especiales: Disfruta de descuentos exclusivos en nuestros productos más recientes.
Promociones y Sorteos Festivos: Participa en sorteos y promociones especiales.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [Aquí] y únete hoy mismo.
2.3 Atenuación del LED
Hasta ahora, solo hemos utilizado dos señales de salida: nivel alto y nivel bajo (también conocidos como ENCENDIDO y APAGADO), lo cual se denomina salida digital. Sin embargo, en muchos dispositivos del mundo real no basta con solo ENCENDER/APAGAR para su funcionamiento; por ejemplo, ajustar la velocidad de un motor o la intensidad de una lámpara. Para lograr esto, antes se utilizaban resistencias variables, pero eran poco fiables y poco eficientes. Aquí entra en juego la Modulación por Ancho de Pulso (PWM), una solución práctica para estos problemas.
Un pulso es una salida digital que contiene un nivel alto y un nivel bajo. El ancho del pulso se ajusta variando la velocidad de ENCENDIDO/APAGADO de los pines.
Si en un breve periodo (por ejemplo, 20 ms, que es el tiempo de persistencia visual de la mayoría de las personas), encendemos, apagamos y volvemos a encender un LED, no percibiremos el apagado, sino que veremos una ligera reducción en su brillo. Cuanto más tiempo esté encendido el LED dentro de ese período, mayor será su brillo. En otras palabras, en cada ciclo, cuanto mayor es el ancho del pulso, mayor es la «intensidad de señal» de salida del microcontrolador. Así es como PWM controla el brillo de un LED (o la velocidad de un motor).
Es importante tener en cuenta algunos detalles al utilizar PWM en el Pico W. Observemos esta imagen:

El Pico W admite PWM en cada pin GPIO, aunque en realidad dispone de 16 salidas PWM independientes (en lugar de 30), distribuidas entre GP0 a GP15 a la izquierda, y el PWM de los pines GPIO de la derecha es idéntico al de la izquierda.
Es fundamental evitar configurar el mismo canal PWM para diferentes propósitos en el código. Por ejemplo, GP0 y GP16 comparten PWM_0A.
Vamos a intentar crear el efecto de atenuación en un LED después de comprender esta información.
Componentes Requeridos
En este proyecto, necesitamos los siguientes componentes.
Es conveniente adquirir un kit completo; aquí tienes el enlace:
Nombre |
ELEMENTOS EN ESTE KIT |
ENLACE |
|---|---|---|
Kit Kepler |
450+ |
También puedes comprarlos por separado en los enlaces a continuación.
N.º |
COMPONENTE |
CANTIDAD |
ENLACE |
|---|---|---|---|
1 |
1 |
||
2 |
Cable Micro USB |
1 |
|
3 |
1 |
||
4 |
Varios |
||
5 |
1(220Ω) |
||
6 |
1 |
Esquema

Este proyecto usa el mismo circuito que el primer proyecto 2.1 ¡Hola, LED!, pero con un tipo de señal diferente. El primer proyecto usaba niveles digitales alto y bajo (0 y 1) directamente desde GP15 para encender o apagar los LEDs; aquí se usa PWM en GP15 para controlar el brillo del LED.
Conexión
Código
Nota
Abre el archivo
2.3_fading_led.pyen la rutakepler-kit-main/micropythono copia este código en Thonny, luego haz clic en «Run Current Script» o simplemente presiona F5 para ejecutarlo.No olvides seleccionar el intérprete «MicroPython (Raspberry Pi Pico)» en la esquina inferior derecha.
Para tutoriales detallados, consulta Abrir y ejecutar código directamente.
import machine
import utime
led = machine.PWM(machine.Pin(15))
led.freq(1000)
for brightness in range(0,65535,50):
led.duty_u16(brightness)
utime.sleep_ms(10)
led.duty_u16(0)
El LED se volverá gradualmente más brillante conforme se ejecuta el código.
¿Cómo funciona?
Aquí, variamos el brillo del LED ajustando el ciclo de trabajo de la salida PWM en GP15. Observemos estas líneas:
import machine
import utime
led = machine.PWM(machine.Pin(15))
led.freq(1000)
for brightness in range(0,65535,50):
led.duty_u16(brightness)
utime.sleep_ms(10)
led.duty_u16(0)
led = machine.PWM(machine.Pin(15))configura el pin GP15 como salida PWM.La línea
led.freq(1000)establece la frecuencia PWM a 1000 Hz, es decir, 1 ms (1/1000) es un ciclo.La línea
led.duty_u16()establece el ciclo de trabajo, que es un valor de 16 bits (2^16=65536). Un valor de 0 indica un ciclo de trabajo del 0%, lo que significa que el LED está apagado en cada ciclo. El valor 65535 indica un ciclo de trabajo del 100%, por lo que el LED estará completamente encendido. Un valor de 32768 representaría un 50% de ciclo de trabajo, y el LED estará a media intensidad.
