🛠 Potentiomètre et variation LED : l'ADC 10 bits et le PWM 8 bits version AVR
Objectifs
Le couple analogique classique sur AVR : lire un potentiomètre avec l'ADC 10 bits (0–1023 sur A0–A5) et commander la luminosité d'une LED par PWM 8 bits (0–255). Vous mémoriserez les six broches PWM de la Duemilanove (3, 5, 6, 9, 10, 11) et le passage d'échelle 1023→255 avec map. Contrairement à la Due, tout est en 5 V ici : pas de niveau-baisseur à prévoir pour vos modules TTL 5 V.
Matériel
- 1 Arduino Duemilanove
- 1 potentiomètre 10 kΩ
- 1 LED + 1 résistance 220 Ω
- 5 fils mâche-mâche, câble mini-USB
Code complet
// Potentiometre sur A0 -> luminosité LED sur broche PWM 9
const byte POT = A0; // ADC 10 bits : 0..1023, plage 0..5 V (AREF)
const byte LED_PIN = 9; // PWM 8 bits (broches PWM : 3,5,6,9,10,11)
void setup {
Serial.begin(9600); // suivi série via la FTDI
}
void loop {
int brut = analogRead(POT); // 0..1023
byte consigne = map(brut, 0, 1023, 0, 255); // -> PWM 8 bits
analogWrite(LED_PIN, consigne);
Serial.print("brut="); Serial.print(brut);
Serial.print(" pwm="); Serial.println(consigne);
delay(50);
}
Vérification attendue
En tournant le potentiomètre, la LED s'éteint progressivement puis monte jusqu'à son maximum, sans paliers visibles. Le moniteur série affiche le brut 0–1023 et la consigne PWM 0–255 qui suit. À fond dans un sens comme dans l'autre, on obtient respectivement 0 et ~1023 (± bruit).
Erreurs fréquentes
- Mettre la LED sur une broche non-PWM (par ex. 4 ou 7) :
analogWritey est sans effet, la LED reste éteinte ou allumée fixe ; les seules broches PWM sont 3, 5, 6, 9, 10, 11. - Oublier la résistance 220 Ω : la broche AVR tolère 40 mA mais LED sans résistance = LED (ou broche) grillée à terme.
- Se tromper de plage : l'ADC de la Duemilanove est 10 bits (0–1023), pas 12 bits comme sur une Due ; un code copié d'un tuto Due avec 4095 divise la luminosité par quatre.
- Potentiomètre alimenté en 3V3 : la broche 3V3 de la Duemilanove est produite par la FTDI et limitée à 50 mA — pour un simple potentiomètre ça passe, mais le 5 V est plus naturel ici ; la référence de mesure reste le 5 V (modifiable via AREF, voir le tuto dédié).
- LED qui clignote au lieu de varier : certains oscilloscopes/appareils photo révèlent le PWM à ~500 Hz — normal, l'œil ne le voit pas.
- Câbler le curseur du potentiomètre sur les extrémités : la lecture ne bouge pas linéairement ; curseur sur A0, les deux autres pattes sur 5 V et GND.
Autres tutoriels pour cette carte
- Faire clignoter la LED 13 d'une Duemilanove (et choisir le bon ATmega)
- Bouton poussoir et moniteur série sur la Duemilanove (avec ses 0,5 s de silence)
- Ajouter un deuxième port série avec SoftwareSerial (GPS sur broches 10/11)
- Régler la référence de mesure avec AREF et analogReference
- Persister une calibration dans l'EEPROM de l'ATmega (512 octets ou 1 Ko)
- Convertir la Duemilanove en programmateur AVR (ArduinoISP) pour graver des puces nues
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinopwm-respiration.inoArduinopotentiometre-plotter.inoArduinoservo-balayage.inoArduinobuzzer-melodie.inoArduino