les vencimos · offline

L34. Luz o aviso que decide solo

Proyectos guiados (92–97%)

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

LDRA0 divisorumbral 400Permisobotón pin 2a GND, pull-upun flancoLuzpin 9 PWManalogWrite 180o 0 si no toca
Divisor del LDR en A0. Botón de permiso en el 2, a GND. LED con resistencia en el pin 9, que sí hace PWM. analogWrite 180 si hay permiso y hay poca luz; si no, 0.

Pines de esta lección

Uno R3 · 5 V · mira la serigrafía, no la memoriaA0LDR2permiso9luz PWM400umbral
El 9 no es el 13. El umbral vive en una constante con nombre, para no esconderlo dentro del if.

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

  1. 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.
  2. Carga. Con permiso y la mano tapando el LDR, el LED del 9 luce.
  3. Destapa. Se apaga, aunque el permiso siga.
  4. Tapa otra vez, y da un golpe al botón. Se apaga aunque siga oscuro.
  5. Otro golpe. Si sigue oscuro, vuelve la luz.
  6. Cambia UMBRAL en un solo sitio, carga, y mira si el punto de tapa se mueve.
  7. 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?

2. ¿De dónde sale el número del umbral?

3. ¿Por qué el botón mira el flanco y no el nivel todo el rato?