🛠 Potentiomètre et variation LED : l'ADC 10 bits et le PWM 8 bits version AVR
Objetivos
El par analógico clásico en AVR: leer un potenciómetro con el ADC de 10 bits (0–1023 en A0–A5) y controlar el brillo de un LED mediante PWM de 8 bits (0–255). Aprenderás a memorizar los seis pines PWM de la Duemilanove (3, 5, 6, 9, 10, 11) y la conversión de escala 1023→255 con map. A diferencia de la Due, todo funciona a 5 V aquí: no necesitas un adaptador de nivel para tus módulos TTL de 5 V.
Material
- 1 Arduino Duemilanove
- 1 potenciómetro de 10 kΩ
- 1 LED + 1 resistencia de 220 Ω
- 5 cables macho-macho, cable mini-USB
Código completo
// Potentiometre sur A0 -> luminosite 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 serie 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);
}
Verificación esperada
Al girar el potenciómetro, el LED se apaga progresivamente y luego aumenta hasta su máximo, sin saltos visibles. El monitor serie muestra el valor bruto 0–1023 y la consigna PWM 0–255 que lo sigue. Al girar completamente en un sentido o en el otro, se obtienen respectivamente 0 y ~1023 (± ruido).
Errores frecuentes
- Conectar el LED a un pin no-PWM (por ejemplo, 4 o 7):
analogWriteno tiene efecto allí, el LED permanece apagado o encendido fijo; los únicos pines PWM son 3, 5, 6, 9, 10, 11. - Olvidar la resistencia de 220 Ω: el pin AVR tolera 40 mA, pero un LED sin resistencia = LED (o pin) quemado a la larga.
- Equivocarse de rango: el ADC de la Duemilanove es de 10 bits (0–1023), no de 12 bits como en una Due; un código copiado de un tutorial para Due con 4095 divide el brillo por cuatro.
- Alimentar el potenciómetro con 3V3: el pin 3V3 de la Duemilanove es generado por el chip FTDI y está limitado a 50 mA — para un simple potenciómetro funciona, pero 5 V es más natural aquí; la referencia de medición sigue siendo 5 V (modificable vía AREF, ver el tutorial dedicado).
- El LED parpadea en lugar de variar: algunos osciloscopios/cámaras de fotos revelan el PWM a ~500 Hz — es normal, el ojo humano no lo percibe.
- Conectar el cursor del potenciómetro a los extremos: la lectura no cambia linealmente; el cursor debe ir a A0, y las otras dos patas a 5 V y GND.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinopwm-respiration.inoArduinopotentiometre-plotter.inoArduinoservo-balayage.inoArduinobuzzer-melodie.inoArduino