ESP32 PWM led
Ahora que ya sabemos encender un led vamos a aprender a trabajar con ESP32 PWM led, pero que es PWM, PWM es el acrónimo de Pulse Width Modulation (Modulación por ancho de pulso). En caso de que estés igual de confundido, lo voy a explicar de forma analítica con este ejercicio mental.
Ejercicio de ESP32 PWM led
Supongamos que debemos encender un foco (led) de 5 Volts con una intensidad lumínica variable, pero al 50% de su capacidad, pero, solo podemos enviar o 0 Volts o 5 Volts (o sea no podemos enviar 2.5 Volts). Pues ahí entra el PWM porque vamos a jugar con el tiempo y el voltaje enviando la mitad del tiempo 5 Volts y la otra mitad del tiempo 0 Volts generando un efecto de medio encendido como se muestra en este diagrama:
Como te puedes dar cuenta, mientras más tiempo se manden 5 Volts más fuerte enciende el led y viceversa entre menos tiempo se manden 5 Volts menor es la intensidad.
Diagrama
Para entender más a detalle vamos a crear un código que encienda el led con una intensidad de 0 y que aumente poco a poco 256 y despues que vaya de 256 0 así que vamos a requerir:
Requerimientos:
- ESP32
- Un led (Cualquier color)
- Resistencia de 330 ohms
- Cables
Conexión:
- Conectaremos el pin D2 al Ánodo del led.
- Conectamos una resistencia de 330 Ohms a GND del ESP32 y después al Cátodo del led.
El diagrama de conexión terminará así:
Codigo
/* Mira el tutorial en https://www.programadornovato.com/esp32-pwm-led/ */ // Declaramos la intensidad del brillo del led int brillo = 0; // Declaramos el pin que enviara el voltaje int pinLed=2; //Características del PWM const int frecuencia = 1000; const int canal = 0; const int resolucion = 10; void setup() { //Inicializamos las características del pwm ledcSetup(canal, frecuencia, resolucion); // Definimos que el pin 2 sacara el voltaje ledcAttachPin(pinLed, OUTPUT); } void loop() { // Incrementamos el brillo de 0 a 256 for (brillo = 0; brillo <= 256; brillo += 1) { //Encendemos el pinLed con la intensidad del brillo ledcWrite(pinLed, brillo); //Esperamos 15 milisegundos delay(15); } // Decrementamos el brillo de 0 a 256 for (brillo = 256; brillo >= 0; brillo -= 1) { //Encendemos el pinLed con la intensidad del brillo ledcWrite(pinLed, brillo); //Esperamos 15 milisegundos delay(15); } }
Ahora veremos como se mira simulando en wokwi.com
Podemos descargar el código y ver la simulación aquí: https://wokwi.com/projects/342126250860479060