Ir al contenido
← Volver a Formación Arduino Principiante

04. Atenuador de LED con potenciómetro (PWM)

Controla el brillo de un LED girando un mando. Descubre el PWM, el truco con el que los microcontroladores 'simulan' voltajes intermedios.

Dificultad: Principiante · Tiempo: 35 min · Cerebro: Arduino Uno

🧰 Lista de materiales

Arduino Uno R3 (ATmega328P)
Arduino Uno R3 (ATmega328P)
Lee el mando, genera PWM
sin foto
Potenciómetro rotativo B5K (5 kΩ)
Mando de brillo
LED 5 mm amarillo difuso
LED 5 mm amarillo difuso
Carga a atenuar
sin foto
Resistencias película metálica 1/4 W
220 Ω
Breadboard 830 puntos
Breadboard 830 puntos
Montaje

🎯 Qué vas a aprender

Vas a unir una entrada analógica (potenciómetro) con una salida PWM (brillo del LED). Entenderás qué es la modulación por ancho de pulso y cómo escalar rangos con map().

📚 Teoría: qué es el PWM

El Arduino no puede dar «media tensión» en sus salidas: solo 0 V o 5 V. Para regular brillo usa PWM (Pulse Width Modulation): enciende y apaga el pin miles de veces por segundo. Si está encendido el 25% del tiempo, el LED recibe de media el 25% de la potencia y brilla a un cuarto. El ojo no percibe el parpadeo.

La proporción de tiempo encendido se llama ciclo de trabajo (duty cycle). En Arduino se controla con analogWrite(pin, valor), donde valor va de 0 (apagado) a 255 (siempre encendido). Solo funciona en los pines marcados con ~ (3, 5, 6, 9, 10, 11).

💡 ConsejoEl potenciómetro da 0–1023 (10 bits) y el PWM acepta 0–255 (8 bits). La función map() reescala un rango a otro automáticamente.

🔌 Conexiones

Pin del potenciómetroHasta
Extremo izquierdoGND
Extremo derecho5 V
Central (cursor)A0
LED ánodoD9 (~) vía 220 Ω
LED cátodoGND

💻 Código completo

// Atenuador de LED con potenciómetro
const int PIN_POT = A0;
const int PIN_LED = 9;   // debe ser un pin PWM (~)

void setup() {
  pinMode(PIN_LED, OUTPUT);
}

void loop() {
  int lectura = analogRead(PIN_POT);          // 0..1023
  int brillo  = map(lectura, 0, 1023, 0, 255); // reescala a 0..255
  analogWrite(PIN_LED, brillo);               // aplica el PWM
  delay(10);
}

🛠️ Montaje paso a paso

  1. Coloca el potenciómetro en la breadboard; sus 3 patas en filas distintas.
  2. Cablea extremos a GND y 5 V, y el central a A0.
  3. Conecta el LED con su resistencia entre D9 y GND.
  4. Sube el sketch y gira el mando: el brillo sube y baja suave.

🧩 Resolución de problemas

SíntomaCausaSolución
Brillo no cambiaLED en pin sin PWMUsa 3/5/6/9/10/11
Salta a tope de golpeExtremos del pot invertidosDa igual la dirección; revisa cursor en A0
Parpadeo visibledelay demasiado largoReduce a 10 ms

🚀 Para ir más lejos

  • Aplica una curva gamma para que el brillo parezca lineal al ojo.
  • Controla un servo (proyecto 18) con el mismo potenciómetro.
← Volver a Formación Arduino