les vencimos · offline
L32. Semáforo
Maestro
Primer proyecto cerrado. Tres luces, un orden, y nada que escuchar. Por eso aquí delay es honesto: el semáforo no atiende un botón. Rojo, ámbar, verde. Cada uno con su resistencia. Ninguno come más de la cuenta del pin, porque son LED, no lámparas de calle.
Pines del curso: rojo en 10, ámbar en 11, verde en 12. Cada LED con 220 ohmios hacia el pin, cátodo a GND. Da igual si la resistencia va del lado del pin o del lado de masa, mientras haya una por LED. No pongas los tres en paralelo con una sola resistencia. Apaga los tres antes de encender el siguiente, para no dejar dos fases a la vez por un descuido.
Tiempos de juguete, para no aburrirte en la mesa: rojo 3 segundos, ámbar 1, verde 3. En una calle serían otros. El programa es una secuencia. Si más adelante quieres un botón de peatón, delay sobra y toca pasar a estados con millis. Hoy no.
Si una luz no enciende, cambia solo ese LED de sitio con otro que sí. Si al cambiar se enciende, el pin o el cable era el fallo. Si sigue apagada, el LED está al revés o sin resistencia bien puesta. No reescribas la secuencia hasta hacer esa prueba.
Montaje
Pines de esta lección
Por qué
El semáforo es la primera vez que el programa se parece a un objeto de la calle. Aun así es el mismo oficio: pines de salida, un solo HIGH a la vez, esperas que son el mensaje. Rojo en el 10, ámbar en el 11, verde en el 12. Si los cruzas, el programa está bien y la calle miente. Se mueve el cable o el número, no se discute el color real del LED.
Cada LED con su 220. Un retorno común a GND. Si pones una sola resistencia en el GND común, el brillo cambia al encender más de uno y, el día que enciendas ámbar y rojo juntos, te pasas de corriente o se quedan flojos. La función poner escribe los tres pines cada vez, para que no quede un LED encendido de la fase anterior por olvido.
Los delay de 3000 y 1000 bloquean. En este proyecto no hay botón, así que es lícito. No añadas un pulsador de peatón dentro de estos delay: no lo oirás. Si lo quieres, el semáforo tiene que pasar a millis y a estados, que ya conoces. Es un buen extra, no es obligatorio para dar la lección por hecha.
Colores: el LED rojo no se distingue del ámbar en una foto. En la mesa, enciéndelos uno a uno en setup, un segundo cada uno, la primera vez, y marca los cables. Luego puedes quitar esa presentación.
Práctica
- Tres LED, tres filas, tres resistencias de 220, cátodos a GND.
- Ánodos, vía la resistencia, a los pines 10, 11 y 12.
- Carga. Rojo, ámbar, verde, y otra vez. Nunca dos a la vez.
- Cuenta el rojo: tiene que ser claramente más largo que el ámbar.
- Intercambia a propósito los cables de 10 y 12. Mira el verde hacer de rojo. Devuélvelos.
- Tapa un LED con el dedo y comprueba que los otros siguen su turno. No comparten una sola resistencia.
- Déjalo un minuto. Si la placa se reinicia, hay un LED sin resistencia: se apaga y se revisa.
Práctica en la página
En la página el ciclo va más rápido para verlo: rojo, ámbar, verde. El sketch usa 3 s, 1 s y 3 s. La simulación arranca encendida.
Ejemplos resueltos
El ámbar se queda encendido con el verde
Al pasar de fase se enciende el nuevo LED y no se apaga el anterior. Falta escribir LOW, o la función poner no se usa y una rama se olvidó.
Cada cambio pasa por poner, que escribe los tres. No hay un cuarto digitalWrite suelto que deje un HIGH viejo.
El rojo dura lo mismo que el ámbar
Los tres delay quedaron en 1000, copiados. El ciclo es correcto en el orden y mentiroso en el tiempo. En la calle, el ámbar no dura igual que el rojo.
3000, 1000, 3000. El mensaje es la duración, no solo el color.
Soldadura y seguridad
Tres LED en protoboard no se sueldan todavía. Si fijas el semáforo en una caja, suelda cada resistencia en serie con su LED, no una común escondida en el mazo. Placa apagada. Cada soldadura brillante y separada de la vecina.
No hay lámpara de 230 V al final de este semáforo. Es un modelo de mesa. El relé de red no entra en la caja.
En la mesa
Siéntate delante del semáforo y no toques nada durante un ciclo entero. Di el color antes de que cambie. Si fallas, o los tiempos son iguales y no dan pista, o los cables están cruzados. Mira el ámbar: tiene que ser el corto. Un ámbar tan largo como el rojo es un delay copiado, y en la mesa se nota sin abrir el sketch.
Tapa el rojo con un papel. El ámbar y el verde tienen que seguir a su hora. Si al tapar el rojo se apaga otro, comparten resistencia o comparten fila. Cada uno con su 220 es la condición para poder tapar sin efectos raros.
Un minuto seguido sin RESET espontáneo. Si se reinicia, hay un LED sin resistencia y el USB se cansa. Se apaga y se mira cada pata, no se alarga el delay para disimular el reinicio.
Sketch
void setup() {
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
}
void poner(int r, int a, int v) {
digitalWrite(10, r);
digitalWrite(11, a);
digitalWrite(12, v);
}
void loop() {
poner(HIGH, LOW, LOW);
delay(3000);
poner(LOW, HIGH, LOW);
delay(1000);
poner(LOW, LOW, HIGH);
delay(3000);
}
Ejercicio
Monta los tres LED y sube la secuencia. Cronometra un ciclo. Tiene que ser rojo, luego ámbar, luego verde, sin dos encendidos a la vez.
Autoevaluación
1. ¿Por qué en este proyecto delay no es una trampa?
Porque el semáforo no tiene que escuchar nada mientras espera.
2. ¿Cuántas resistencias hacen falta?
Una por LED. No una sola para los tres.
3. Si más adelante hay un botón de peatón, ¿sigue valiendo delay?
No. Habrá que pasar a estados y a millis.