🛠 Variateur d'intensité LED avec PWM
Objetivos
Utilizar la modulación de ancho de pulso (PWM) para variar la luminosidad de un LED: el núcleo Arduino expone analogWrite(pin, 0-255) en los pines PWM (6 pines en el conector digital del Nano). El potenciómetro conectado a A0 (0-1023) se escala a 0-255 para controlar el ciclo de trabajo a ~490 Hz.
Material
- 1 × Arduino Nano clásico (ATmega328P, 6 pines PWM)
- >
- 1 × LED + 1 × resistencia de 220 Ω (o transistor NPN/MOSFET para un LED de potencia, máx. 40 mA por pin)
- 1 × potenciómetro de 10 kΩ en A0
Código completo
// Variateur PWM : potentiometre A0 -> LED broche 9
const uint8_t POT = A0;
const uint8_t LED_PWM = 9; // broche PWM (marque ~ sur le silk)
uint32_t derniere = 0;
void setup {
pinMode(LED_PWM, OUTPUT);
Serial.begin(9600);
}
void loop {
if (millis - derniere >= 20) {
derniere = millis;
int brut = analogRead(POT); // 0..1023
uint8_t rapport = map(brut, 0, 1023, 0, 255);
analogWrite(LED_PWM, rapport); // 0..255
Serial.println(rapport);
}
}
Verificación esperada
Al girar el potenciómetro, el LED se apaga progresivamente (0) y luego aumenta su luminosidad hasta el máximo (255) sin saltos. Al observar el LED a través de la cámara de un teléfono en cámara lenta, se distingue el parpadeo PWM (~490 Hz en los pines 9/10 del 328P), mientras que el ojo percibe una luz continua.
Errores frecuentes
analogWriteen un pin no PWM: el pin se comporta como todo-o-nada (0 = apagado, cualquier otro valor = encendido permanentemente).- LED de potencia conectado directamente al pin: se superan los 40 mA máximos por pin y se daña la salida; utilice un transistor.
- Confundir escalas:
analogWriteacepta 0-255,analogReaddevuelve 0-1023 — de ahí la necesidad obligatoria demap. - Esperar una tensión analógica real: el PWM es una señal rectangular filtrada por la persistencia visual, no una verdadera salida DAC.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
buzzer-melodie.inoArduinoservo-sweep.inoArduinoultrason-hcsr04.inoArduinolcd-i2c.inoArduinoeeprom-contre.inoArduinosommeil-watchdog.inoArduino