🛠 Faire varier la luminosité avec un potentiomètre (ADC + PWM)
Objetivos
Comprender la doble conversión analógica/digital: el ADC de 10 bits del ATmega328P (6 entradas analógicas, valores 0–1023) y la salida PWM (~980 Hz en los pines 3, 5, 6, 9, 10, 11 — los únicos seis pines PWM del UNO). Todo ello conectado mediante map.
Material
- 1 Arduino UNO R3 + cable USB-B
- 1 potenciómetro de 10 kΩ (las 3 patillas: una a 5 V, una a GND, el cursor en el medio)
- 1 LED + 1 resistencia de 330 Ω
- Cableado: cursor del potenciómetro hacia A0; LED + 330 Ω hacia el pin 9 (obligatoriamente uno de los seis pines PWM).
Código completo
// "Fade" classique : ADC 10 bits (0..1023) -> PWM 8 bits (0..255).
const uint8_t POT = A0;
const uint8_t PWM_PIN = 9; // une des six pins PWM : 3, 5, 6, 9, 10, 11
void setup {
Serial.begin(115200);
}
void loop {
int brut = analogRead(POT); // 10 bits : 0..1023
uint8_t pwm = map(brut, 0, 1023, 0, 255);
analogWrite(PWM_PIN, pwm); // PWM ~980 Hz pilotée par un timer
Serial.print("brut="); Serial.print(brut);
Serial.print(" pwm="); Serial.println(pwm); // suivez ça dans le Traceur série
delay(10);
}
Verificación esperada
Al girar el potenciómetro, el LED se apaga progresivamente y luego se intensifica, sin escalones perceptibles (el PWM modula el ancho de pulso, el ojo integra). El Monitor serie (Herramientas > Monitor serie) muestra brut que sigue 0→1023 y pwm que sigue 0→255.
Errores frecuentes
- Conectar el LED a un pin no-PWM (por ejemplo, pin 4): analogWrite no tiene ningún efecto, el LED permanece apagado.
- Confundir los rangos: enviar un valor 0–1023 a analogWrite (que espera 0–255) satura desde 255.
- Potenciómetro cableado solo en dos patillas: el cursor ya no sigue nada, el valor salta aleatoriamente.
- No alimentar el potenciómetro con 5 V: con 3,3 V el rango ADC se reduce (el ADC mide respecto a AREF, 5 V por defecto).
- El 3,3 V de la placa está limitado a 50 mA: no conectar varios LED sin calcular.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-poussoir.inoArduinopwm-fade.inoArduinocapteur-lumiere-ldr.inoArduinoservo-balayage.inoArduinoruban-neopixel.inoArduino