🛠 LED qui respire en PWM
Objetivos
Hacer «respirar» un LED con la modulación de ancho de pulso (PWM): analogWrite de 0 a 255, rampa triangular y, a continuación, control del brillo mediante el sensor de luz. Se identifican los pines PWM (5, 6, 9, 10, 11 en Simple/SimpleSnap) y el límite de corriente de 40 mA por pin.
Material
- 1 LilyPad SimpleSnap + pila de 3,7 V
- 1 LED LilyPad en un pin PWM (se recomienda el 9, PWM en todos los modelos)
- 1 sensor de luz LilyPad en A2 (variante controlada por la luz)
- Adaptador FTDI para las pruebas serie
Código completo
// LED « qui respire » sur pastille PWM 9 — analogWrite 0..255
const uint8_t LED = 9; // PWM sur toutes les LilyPad (5/6/9/10/11 sur Simple)
const uint8_t CAPTEUR = A2; // option : luminosité ambiante
bool modeCapteur = false; // true = luminosité imposée par le capteur
uint16_t niveau = 0;
int8_t pas = 4; // avance de 4/255 toutes les 10 ms
void setup {
pinMode(LED, OUTPUT);
}
void loop {
if (modeCapteur) {
int brut = analogRead(CAPTEUR); // 0..1023
analogWrite(LED, map(brut, 0, 1023, 0, 255));
} else {
if (niveau >= 255) pas = -4; // sommet : on redescend
if (niveau <= 0) pas = 4; // fond : on remonte
niveau += pas;
analogWrite(LED, niveau);
}
delay(10);
}
Verificación esperada
El LED aumenta su brillo durante aproximadamente 0,65 s, desciende, vuelve a subir, en un bucle fluido: el ojo percibe una respiración. En modo sensor, el LED se apaga en la oscuridad y se enciende al máximo bajo una linterna. El LED no parpadea de forma brusca: si solo permanece encendido/apagado, el pin elegido no es una salida PWM.
Errores frecuentes
- analogWrite en un pin no PWM: el LED parpadea demasiado rápido para el ojo o se queda fijo a media tensión.
- Confundir 0–255 (PWM) y 0–1023 (ADC): map es imprescindible entre el sensor y el LED.
- Sobrecargar el pin: 40 mA máximo por pin (documentado); para varios LED, repartirlos entre varios pines o añadir un transistor.
- Rampa con un contador uint8_t: nivel += paso desborda silenciosamente a 255; usar uint16_t como aquí.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinopwm-respiration.inoArduinoluxmetre-couture.inoArduinointerrupteur-tilt.inoArduinoservo-balayage.inoArduino