🛠 Faire varier la luminosité avec un potentiomètre (ADC + PWM)
Objectifs
Comprendre la double conversion analogique/numérique : l'ADC 10 bits de l'ATmega328P (6 entrées analogiques, valeurs 0–1023) et la sortie PWM (~980 Hz sur les pins 3, 5, 6, 9, 10, 11 — les six seules pins PWM de l'UNO). Le tout relié par map.
Matériel
- 1 Arduino UNO R3 + câble USB-B
- 1 potentiomètre 10 kΩ (les 3 pattes : une à 5 V, une à GND, le curseur au milieu)
- 1 LED + 1 résistance 330 Ω
- Câblage : curseur du potentiomètre vers A0 ; LED + 330 Ω vers la pin 9 (obligatoirement une des six pins PWM).
Code complet
// "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);
}
Vérification attendue
En tournant le potentiomètre, la LED s'éteint progressivement puis s'intensifie, sans palier perceptible (le PWM module la largeur d'impulsion, l'œil intègre). Le Traceur série (Outils > Traceur série) montre brut qui suit 0→1023 et pwm qui suit 0→255.
Erreurs fréquentes
- Câbler la LED sur une pin non-PWM (par ex. pin 4) : analogWrite n'a aucun effet, la LED reste éteinte.
- Confondre les plages : envoyer une valeur 0–1023 à analogWrite (qui attend 0–255) sature dès 255.
- Potentiomètre câblé sur deux pattes seulement : le curseur ne suit plus rien, valeur qui saute partout.
- Ne pas alimenter le potentiomètre en 5 V : sur 3,3 V la plage ADC est amputée (l'ADC mesure par rapport à AREF, 5 V par défaut).
- Le 3,3 V de la carte est limité à 50 mA : ne pas y brancher plusieurs LED sans calcul.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-poussoir.inoArduinopwm-fade.inoArduinocapteur-lumiere-ldr.inoArduinoservo-balayage.inoArduinoruban-neopixel.inoArduino