les vencimos · offline
L34. Luz o aviso que decide solo
Maestro
Tercer proyecto: una luz que se enciende sola cuando falta claridad, y un botón que la manda callar. Ya no es el LED copiando el sensor en bruto. Hay una decisión, un permiso, y un umbral que salió de tu mesa al calibrar. Si copias 400 sin medir, la luz decidirá para otra habitación.
LDR como en la lección 17: sensor de A0 a 5V, 10 kΩ de A0 a GND. LED externo en el pin 9, con resistencia, para dejarlo a un brillo fijo con analogWrite. Pulsador de permiso en el pin 2, a GND, INPUT_PULLUP. Apretar cambia la variable permiso. Si no hay permiso, la luz se queda apagada aunque esté oscuro. Si hay permiso y la lectura baja del umbral, enciende.
El umbral no va escrito como verdad eterna. Déjalo en una constante al principio del sketch, con el número que anotaste al calibrar. Cambiar de mesa es cambiar esa constante, no rehacer el programa.
El botón usa el flanco: solo actúa cuando pasa de suelto a apretado, con 30 ms de rebote. Si miraras el nivel todo el rato, al mantener el dedo el permiso parpadearía.
Este es el cierre de los tres guiados. Semáforo, alarma, luz que decide. Lo demás, en la balda Proyectos, apoyado en estos gestos.
Montaje
Pines de esta lección
Por qué
La luz que decide junta tres cosas: medir, recordar un permiso, y graduar. El permiso no es el dedo mantenido: es un estado que un flanco invierte. Puedes soltar y la lámpara sigue autorizada. Otro flanco la prohíbe aunque sea de noche. Así una luz de pasillo se apaga de día y también se apaga cuando tú no quieres que trabaje.
El LED va al 9 porque analogWrite(9, 180) pide un pin con PWM. 180 es un brillo alto, no el máximo, para no deslumbrar. 0 es apagado de verdad. El 13 se queda libre. Si pones el LED en el 13, verás encendido o apagado a saltos, o nada fino, y no es el proyecto.
UMBRAL es una constante escrita arriba, 400 de partida, la misma idea que al calibrar. Se cambia ahí, no en medio de la línea del if, porque el proyecto se explica con una palabra. Si tu mesa necesita 500, se cambia la constante y el resto del programa ni se mira.
El divisor del LDR se queda como lo aprendiste: LDR hacia 5 V, 10 k hacia GND, nudo en A0. Invertirlo enciende la luz de día. El botón no lleva 5 V. Lleva GND y pull-up.
Práctica
- LDR y 10 k en A0, como en su lección. Botón en el 2 a GND. LED y 220 en el pin 9.
- Carga. Con permiso y la mano tapando el LDR, el LED del 9 luce.
- Destapa. Se apaga, aunque el permiso siga.
- Tapa otra vez, y da un golpe al botón. Se apaga aunque siga oscuro.
- Otro golpe. Si sigue oscuro, vuelve la luz.
- Cambia UMBRAL en un solo sitio, carga, y mira si el punto de tapa se mueve.
- Confirma que de día y sin tapa el pin 9 está a 0, no a un brillo residual por un analogWrite olvidado.
Práctica en la página
Oscuro y con permiso: la luz del pin 9 se enciende. Arranca de noche y con permiso. La simulación arranca encendida.
Ejemplos resueltos
Solo luce con el dedo encima del botón
Se escribió el LED dentro del if del nivel LOW, sin memoria. Al soltar, no hay permiso. Es un pulsador de linterna, no el proyecto.
El flanco invierte la variable permiso. El dedo se va y la variable se queda. El LDR decide solo si permiso es verdad.
Brillo que no baja del todo de día
En el else se escribió analogWrite(9, 20) para un piloto. De día hay una lucecita y el proyecto no dice eso. Además, si el pin no fuera PWM, ese 20 ni siquiera se vería como se espera.
El no es 0. Un piloto, si se quiere, es otro pin y otra decisión, no un resto olvidado.
Soldadura y seguridad
Si la luz pasa a una mesilla, el LDR tiene que ver la habitación, no el brillo de su propio LED. Se suelda un alargue y se orienta el LDR hacia la ventana, el LED hacia el suelo. Si se miran, la luz se apaga a sí misma en cuanto enciende.
Placa sin USB al soldar. Cada pata del LDR por separado. El botón, si es de panel, se suelda a GND y al pin 2, no a 5 V.
En la mesa
Haz las cuatro combinaciones, no solo la bonita. Oscuro y permiso: luce. Claro y permiso: no luce. Oscuro y sin permiso: no luce. Claro y sin permiso: no luce. Si solo pruebas la primera, un botón que no hace nada también aprueba. El golpe del botón tiene que notarse en la oscuridad, que es donde hay algo que quitar.
Mira que el LED de la luz sea el del pin 9. El de la placa, el 13, no es la lámpara. Si el 13 parpadea por un sketch viejo y el 9 está apagado, estás mirando el testigo equivocado. Cubre el 13 con un papel si te distrae, no lo uses de lámpara.
Cambia el umbral en la constante, una sola vez, y di si ahora hace falta más oscuridad o menos. Si no sabes predecir el lado, no entiendes todavía si el número bajo es noche. Vuelve al divisor antes de coleccionar constantes.
Sketch
const int UMBRAL = 400;
bool permiso = true;
int antes = HIGH;
void setup() {
pinMode(9, OUTPUT);
pinMode(2, INPUT_PULLUP);
}
void loop() {
int btn = digitalRead(2);
if (antes == HIGH && btn == LOW) {
delay(30);
permiso = !permiso;
}
antes = digitalRead(2);
int luz = analogRead(A0);
if (permiso && luz < UMBRAL) analogWrite(9, 180);
else analogWrite(9, 0);
}
Ejercicio
Calibra el umbral otra vez, escríbelo en la constante, y comprueba tres casos: claro con permiso, oscuro con permiso, oscuro sin permiso. Solo el segundo enciende.
Autoevaluación
1. ¿Qué apaga la luz aunque esté oscuro?
La variable de permiso, con el pulsador del pin 2.
2. ¿De dónde sale el número del umbral?
De tu calibración, no de un valor copiado.
3. ¿Por qué el botón mira el flanco y no el nivel todo el rato?
Para no conmutar el permiso cien veces mientras el dedo sigue ahí.