Materiales necesarios
-
Placa ESP32
-
Potenciómetro de 10kΩ
-
Protoboard
-
Cables de conexión
-
LED (opcional, aunque usaremos el integrado)
Esquema de conexiones
Potenciometro: Patilla izquierda → 3.3V del ESP32 Patilla derecha → GND del ESP32 Patilla central → GPIO34 (ADC1_CH6) LED integrado → GPIO2 (no necesita conexión externa)
Explicación del PWM
PWM (Modulación por Ancho de Pulso) es una técnica que permite controlar la cantidad de energía entregada a un dispositivo sin variar el voltaje, sino modulando el tiempo durante el cual el voltaje está encendido (HIGH) o apagado (LOW).
El ESP32 tiene un ADC (Convertidor Analógico-Digital) de 12 bits, que lee valores entre 0 y 4095 del potenciómetro. Convertimos este valor a un rango de 0-255 para el PWM.
Código para Arduino IDE
// Pines const int potPin = 34; // Pin del potenciómetro (ADC) const int ledPin = 2; // Pin del LED integrado // Configuración PWM const int freq = 5000; // Frecuencia PWM (5kHz) const int resolution = 8; // Resolución de 8 bits (0-255) const int pwmChannel = 0; // Canal PWM (0-15) void setup() { // Inicializar comunicación serial Serial.begin(115200); // Configurar el canal PWM ledcSetup(pwmChannel, freq, resolution); // Adjuntar el pin al canal PWM ledcAttachPin(ledPin, pwmChannel); // El pin del potenciómetro es entrada, no necesita configuración adicional Serial.println("Practica PWM: Control de intensidad LED con potenciometro"); Serial.println("Gira el potenciometro para controlar la intensidad del LED"); } void loop() { // Leer valor del potenciómetro (0-4095) int potValue = analogRead(potPin); // Mapear a valor PWM (0-255) int pwmValue = map(potValue, 0, 4095, 0, 255); // Escribir valor PWM al LED ledcWrite(pwmChannel, pwmValue); // Calcular el ciclo de trabajo en porcentaje int dutyCycle = (pwmValue * 100) / 255; // Mostrar valores por el monitor serial Serial.print("Valor potenciometro: "); Serial.print(potValue); Serial.print(" | Valor PWM: "); Serial.print(pwmValue); Serial.print(" | Ciclo de trabajo: "); Serial.print(dutyCycle); Serial.println("%"); // Pequeña pausa para estabilidad delay(100); }
Explicación del código
-
Configuración de pines: Definimos los pines para el potenciómetro (entrada analógica) y el LED (salida PWM).
-
Configuración PWM:
-
Frecuencia de 5000Hz (adecuada para control de LEDs)
-
Resolución de 8 bits (valores entre 0-255)
-
Usamos el canal PWM 0
-
-
Función setup():
-
Inicializa la comunicación serial
-
Configura el canal PWM
-
Asocia el pin del LED al canal PWM
-
-
Función loop():
-
Lee el valor del potenciómetro (0-4095)
-
Convierte este valor a rango PWM (0-255)
-
Aplica el valor PWM al LED
-
Muestra los valores por el monitor serial
-
Espera 100ms antes de repetir
-
Procedimiento paso a paso
-
Conecta el potenciómetro al ESP32 como se indicó anteriormente
-
Abre el Arduino IDE y asegúrate de tener instalado el soporte para ESP32
-
Copia y pega el código en el IDE
-
Conecta el ESP32 al ordenador
-
Selecciona la placa correcta y el puerto COM
-
Sube el código a la placa
-
Abre el monitor serial (115200 baudios)
-
Gira el potenciómetro y observa cómo cambia la intensidad del LED
-
Verifica los valores en el monitor serial
Resultados esperados
Al girar el potenciómetro, deberías observar:
-
El LED integrado en el pin 2 cambiará su intensidad
-
En el monitor serial verás los valores del potenciómetro, PWM y ciclo de trabajo
-
Cuando el potenciómetro está en 0Ω (GND), el LED estará apagado
-
Cuando el potenciómetro está en 10kΩ (3.3V), el LED estará a máxima intensidad
Conceptos aprendidos
-
Cómo funciona la modulación por ancho de pulso (PWM)
-
Cómo leer valores analógicos con el ESP32
-
Cómo configurar el hardware PWM del ESP32
-
Conversión de valores entre diferentes rangos (mapeo)
-
Control de intensidad de un LED mediante PWM
