Semáforo con pulsador para peatones

Aumentamos el nivel de dificultad y realizamos un semáforo con un pulsador para peatones.

Uno de los compañeros de este sitio, nos proponía hacer el mismo semáforo pero para peatones. Considero que aunque es muy sencillo, aumenta enormemente la dificultad, especialmente para que pueda ser entendido por niños, pues se escribió originalmente estos artículos para ellos.

Vamos a ver en este ejemplo, la importancia de programar correctamente y porque en ocasiones es tan importante pensarse bien que se esta haciendo. Es un excelente ejercicio para calcular posibilidades futuras.

Si no el tema os pilla muy grande, mejor pegáis un repaso a la anterior entrada Operaciones lógicas, conceptos básicos de programación y electrónica.

Programando en Arduino

Tomamos solo el ejemplo del semáforo en Arduino de la entrada anterior.

En ella, un programa secuencial encendía los leds del semáforo uno a uno. Para contar el tiempo que permanecía encendido usábamos la orden Delay, que detenía el programa después de encender uno de los leds, para que este permaneciera encendido antes de que la siguiente orden lo apagara.

Sin entrar en ordenes especificas de Arduino para solucionar el problema, vamos a centrarnos en ese Delay y pensar que ocasiona.
En la imagen vemos encenderse el led rojo (pin 12), esperar 4 segundos y apagarse pasado ese tiempo. Es una forma muy sencilla de programar el sistema, y precisa, pues de forma secuencial primero hará la primera orden, esperará 4 segundos y hará la tercera orden.

Esos 4 segundos son los que nos están fastidiando todo para poder poner un interruptor y explico porque .

Captura de pantalla de 2016-05-18 19-09-31

¿Por qué?

Por que mientras espera esos 4 segundos no hace nada más, no avanza en el código y por lo tanto esta bloqueado ahí durante ese tiempo. Hay soluciones, algunas especificas, pero no me interesan. También tengo que confesar que no soy un experto en Arduino y es posible que aún existan formas más sencillas que no conozco. A mi me interesa la idea básica para poder explicárselo al mismo niño que hizo el primer ejemplo.Captura de pantalla de 2016-06-06 21-14-28

Si ponemos un pulsador y todo el código para leer el pulsador y dos leds para peatones siguiendo el mismo sistema usado, nos vamos a encontrar que, durante esos 4 segundos, el pulsador no sera detectado. Tampoco lo será durante los segundos del semáforo amarillo o verde. Es más no lo detectará a menos que coincida la pulsación con la zona donde esta el código que lee el pulsador.

Lo que necesitamos es un enclavamiento.

Enclavamiento y Autoenclavamiento de un pulsador

Vamos a tratar el conocimiento básico de los distintos tipos de actuadores que podemos encontrar en la vida diaria. En concreto la diferencia entre interruptor y pulsador, y porque se usa este ultimo tan a menudo en situaciones donde parecería que lo indicado es un interruptor.

No voy a entrar en tecnicismos, pero el concepto de interruptor puede confundir a más de uno, cuando lo diferenciamos del pulsador, sobre todo porque en el formato pulsador podemos encontrar interruptores y viceversa.

Así que para no complicar las cosas, aquí vamos a llamar interruptor, aquel que mecánicamente, él sólito, cuando lo accionamos, permanece en la posición que le decimos, como las llaves de casa que encienden la luz. Para apagar hay que volver a darle.
El pulsador seria aquel que solo da una orden instantánea, y vuelve a su posición original. Sería lo mismo el clásico interruptor de palanca con retorno, que accionamos la palanca y vuelve a su posición. Para estos casos, hay una forma de diferenciarlos. Una leyenda escrita en su superficie o en sus características que indica algo tipo (ON)-OFF donde los paréntesis indicaran cuando hace la acción momentánea.

Para el semáforo lo que necesitamos es un mecanismo que nos indique de forma permanece que hay alguien ahí esperando, así mientras espera ese Delay podremos tener activo el interruptor y no perder esa señal por culpa del interruptor.

Pero claro, lo que posiblemente pasaría es que siempre estaría el interruptor en ON permitiendo el paso de los peatones. Al menos hasta que algún conductor, cansado, se bajase del coche a darle a OFF.

La solución es el pulsador, y solucionar ese pequeño inconveniente de que es momentáneo. Y es precisamente esa la gracia de los pulsadores que son momentáneos y se comportan como sensores.

En automatismos la función de pulsar y quedarse permanentemente en ese estado, se denomina auto enclavamiento. Y tengo un diseño para mostrarlo.

Realizado con Autodesk 123 Circuits
Realizado con Autodesk 123 Circuits

Puedes probarlo aquí.

El circuito que en cada pulsación cambia de estado, sería el monoestable, y para este diseño tampoco nos es valido, pues lo que necesitamos es un circuito en el que una vez dada la orden por el pulsador, ya no haga caso de ninguna más hasta que realice su trabajo.

La programación del diseño

Hemos visto que con un pulsador y un circuito externo al diseño con la Arduino, podemos hacer que reciba la orden mientras está en Delay y no hace caso de nada del exterior. Cuando termina de realizar el código del semáforo de peatones, podría enviar una orden para que el Relé deje de funcionar.

Pero lo mejor es que no tengamos ese Delay y funcione con otro sistema. Yo voy a explicar uno que puede ayudar a pensar, y es un poco rudimentario.

Imaginemos que jugamos al escondite o similar, y tenemos que contar hasta 10 con los ojos cerrados. Queremos hacer trampas y que no se note demasiado. Para atrapar a los adversarios deberíamos poder ver donde se esconden, y si abrimos los ojos cuando hemos contado 10, seguramente se nos habrán escapado.

Si contamos 10 con los ojos abiertos, se darán cuenta y no valdrá. Lo mejor es abrir los ojos muy rápidamente durante un solo instante mientras contamos. A más veces abramos y mas rápido lo hagamos, mejor. El problema es que como no somos capaces de concentrarnos en contar y mirar al mismo tiempo, igual acabamos tardando un poco más que si solo contáramos.

Es exactamente eso lo que vamos a hacer. Usamos un Delay muy corto, y contamos los Delay hasta llegar aproximadamente al numero que queremos. La suma de pequeños Delay, más el tiempo que tarda en realizar todo el proceso, será el tiempo encendido de cada semáforo. De mientras podemos mirar a ver si alguien ha pulsado el pulsador.

Captura de pantalla de 2016-06-06 19-29-56

Como se ve, hay un contar 50 veces y luego un Delay de 100 milesegundos, y de mientras se comprueba constantemente si esta pulsado el pulsador.

Con el uso de las variables y con los condicionales se puede complicar muchísimo más el ejercicio.

Dejo un ejemplo funcional con otra forma de realizarlo.

Deja un comentario