
Programar un sistema de semáforos: detectar un vehículo

Actualiza para más contenido
¿Qué mensaje se envía por radio al semáforo?
Esto es un semáforo. Está en rojo. Aquí llega un autobús que va con retraso. ¿Y si el autobús pudiera recuperar su horario sin tener que esperar en un semáforo en rojo? ¿Y si el autobús pudiera decirle al semáforo que está llegando? Vamos a programar un autobús para que pueda enviarle un mensaje al semáforo. Vamos a usar las señales de radio para la comunicación.
Antes de arrancar el programa necesitamos: un microcontrolador y tres LEDs conectados a él, tal como hemos descrito en el otro vídeo. Otro microcontrolador que represente al autobús. Y un programa para el autobús. Empezaremos por el pseudocódigo para el autobús. El autobús va a mandarle una señal de radio al semáforo.
Para que el semáforo pueda recibir la señal de radio del autobús, tiene que usar la misma frecuencia, el mismo grupo radiofónico. Vamos a escoger el grupo radiofónico "uno". El pseudocódigo para el programa del autobús arranca con: Iniciar programa. Sintonizar grupo radiofónico "uno". El autobús quiere tener luz verde.
Cuando el autobús mande el mensaje "uno" significará "Estoy llegando, cambia a verde". Entonces, ¿cuándo tiene que mandar el autobús su "uno"? Pues cuando se aproxime al semáforo. Dedicidimos conectar esto con el botón A del microcontrolador. Si se pulsa el botón A, enviar un "uno".
Pues eso es todo lo que necesitamos para el programa del autobús. Vayamos ahora al programa del semáforo. El semáforo escucha el mismo canal de radio desde el que envía el autobús. Así que el pseudocódigo del semáforo también será: Iniciar programa. Sintonizar grupo radiofónico "uno".
El semáforo no solo tiene que escuchar, sino también reaccionar ante todos los mensajes del autobús. Para escuchar y reaccionar constantemente, necesitamos un código que se repita una y otra vez. Así que usamos un bucle con una condición que siempre es verdadera. Esa parte del código tendría este aspecto: Ahora el semáforo está siempre en rojo. Cuando reciba el mensaje del autobús, cambiará a verde: dar prioridad al autobús.
Crea la variable "prio" que le siga la pista al autobús solicitando prioridad. Cuando "prio" es "verdadero", el autobús tiene prioridad, si no: "prio" es "falso". Añadimos esto al pseudocódigo: Si la radio recibe "uno", entonces cambiar "prio" a "verdadero". Cuando "prio" es "verdadero", el semáforo cambia a verde. Si no, el semáforo debe estar en rojo.
Añadimos esta condición. Si "prio" es igual a "falso", solo entonces el semáforo cambiará a rojo. Sangramos la línea conectada con la línea del "si". Pero, y ¿si "prio" no es igual a "falso"? Escribimos: Si no, apagar rojo y encender verde.
Al iniciar el programa, el semáforo debería estar en rojo, "prio" debería ser "falso". ¿Comprobamos el pseudocódigo? Al principio "prio" es "falso" y el semáforo está en rojo. Ahora el conductor del autobús pulsa el botón. "Prio" se convierte en "verdadero". El código salta a "si no" y ¡el semáforo se pone verde! Pero no vuelve a ponerse en rojo.
Hmmm... No hemos decidido aún cuánto tiempo tiene que estar encendido el verde; "prio" no volverá a "falso". Así que le concedemos al autobús tres segundos para pasar por el semáforo añadiendo aquí una pausa de tres segundos. Luego apagamos la luz verde y establecemos "prio" como "falso" para que el semáforo pueda estar otra vez en rojo. Todas estas líneas están conectadas con la parte del "si no".
Lo señalizamos sangrándolas. Volvamos a hacer la prueba. "Prio" es "falso" y el semáforo está en rojo. Aquí viene el autobús que va con retraso. Se pulsa el botón A y "prio" se convierte en "verdadero". El programa salta a "si no" y el semáforo se pone en verde.
Transcurridos tres segundos, "prio" se convierte en "falso" y el semáforo vuelve a ponerse en rojo. Aunque no hemos programado la luz ámbar, y siempre está en rojo si no viene ningún autobús, es un buen comienzo. Y puede que el autobús recupere su horario. ¡Bien!