🛠 Variateur d'intensité LED avec PWM
Objectifs
Utiliser la modulation de largeur d'impulsion (PWM) pour faire varier la luminosité d'une LED : le core Arduino expose analogWrite(pin, 0-255) sur les broches PWM (6 broches sur l'en-tête numérique du Nano). Le potentiomètre de l'A0 (0-1023) est mis à l'échelle 0-255 pour piloter le rapport cyclique à ~490 Hz.
Matériel
- 1 × Arduino Nano classique (ATmega328P, 6 broches PWM)
- >
- 1 × LED + 1 × résistance 220 Ω (ou transistor NPN/MOSFET pour une LED de puissance, max 40 mA par broche)
- 1 × potentiomètre 10 kΩ sur A0
Code complet
// Variateur PWM : potentiomètre 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);
}
}
Vérification attendue
En tournant le potentiomètre, la LED s'éteint progressivement (0) puis monte en luminosité jusqu'à plein régime (255) sans palier. En regardant la LED via la caméra d'un téléphone au ralenti, on distingue le scintillement PWM (~490 Hz sur les broches 9/10 du 328P) alors que l'œil perçoit une lumière continue.
Erreurs fréquentes
- analogWrite sur une broche non PWM : la broche se comporte en tout-ou-rien (0 = éteint, toute autre valeur = allumé en permanence).
- LED de puissance branchée directement sur la broche : on dépasse les 40 mA max par broche et on grille la sortie ; passer par un transistor.
- Confondre échelles : analogWrite prend 0-255, analogRead renvoie 0-1023 — d'où le map obligatoire.
- Attendre une tension analogique réelle : le PWM est un créneau filtré par la persistance visuelle, pas une vraie sortie DAC.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
buzzer-melodie.inoArduinoservo-sweep.inoArduinoultrason-hcsr04.inoArduinolcd-i2c.inoArduinoeeprom-contre.inoArduinosommeil-watchdog.inoArduino