Semáforos en Arduino… cuidado con la carretera
La cosa es que hace poco recibí un correo de Ivanxu, un lector del blog. Ahí me pedía ayuda para hacer un proyecto con semáforos. La verdad te digo, ahí me acojoné. Me veía en Gran Vía montando semáforos o peor.. hackeándolos. Pero nada, era un ejercicio más terrenal y asequible para mí: leds.
Tras intercambiar algunos correos para ver la idea digamos que le resolví algunas dudas a Ivanxu. Nada del otro mundo la verdad, lo tenía casi todo montado. Pero a cambio me ha dejado publicar su proyecto por aquí. Igual alguien se anima a hacer algún semáforo. Bueno, en este caso son cuatro.
La idea de Ivanxu era hacer un par de semáforos con su semáforo de viandantes incluido. Es decir, un semáforo con uno más pequeño para avisar a las personas esperando en el paso de peatones que pueden o no pueden pasar. Además, quería añadirle un botón de esos que reducen el tiempo de espera y hacen que el semáforo de las personas de a pie pase a verde más rápido.
Supongo que entenderás que esto del semáforo es una forma de hablar. Al final, para replicar el proyecto de Ivanxu necesitarás 10 leds (4 verdes, 4 rojos y 2 amarillos) y dos pulsadores. Además de cables, una protoboard y tu Arduino. Si quieres darle forma de semáforo después ya es cosa tuya, yo voy a lo concreto 😉
La electrónica de los semáforos
Empezarás por la parte hardware, la electrónica. Esta parte es bastante sencilla. Al final es conectar 10 leds a la protoboard teniendo en cuenta que cada uno va en una fila (Si están en la misma línea están conectados al mismo punto y no funcionan). La fila en la que pinchemos la pata más corta del led irá conectada a GND y la otra a un pin digital que será el encargado de encender y apagar.
Ivanxu ha utilizado esta distribución, tú puedes copiarla o simplemente diseñar tu propio sistema:


Cómo programar los semáforos en Arduino
const int boton1 = 8; const int boton2 = 13; char EstadoActual = 1; int segundos=0; int TiempoEspera[4] = {20, 5, 20, 5}; void CambiarEstado(char estado); void setup() { for (int pin = 2; pin <= 7; pin++) pinMode(pin, OUTPUT); for (int pin = 9; pin <= 12; pin++) pinMode(pin, OUTPUT); pinMode(boton1, INPUT); pinMode(boton2, INPUT); CambiarEstado(1); } void loop(){ if ((EstadoActual == 1) && (digitalRead(boton2) == true)) TiempoEspera[0] = 10; if ((EstadoActual == 3) && (digitalRead(boton1) == true)) TiempoEspera[2] = 10; delay(1000); segundos++; if (segundos > TiempoEspera[EstadoActual - 1]) { if (EstadoActual == 4) EstadoActual = 1; else EstadoActual++; CambiarEstado(EstadoActual); segundos = 0; TiempoEspera[0] = 20; TiempoEspera[2] = 20; } } void CambiarEstado(char estado) { switch (estado) { case 1: digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(6, LOW); digitalWrite(7, HIGH); digitalWrite(12, LOW); digitalWrite(11, HIGH); digitalWrite(4, LOW); digitalWrite(2, HIGH); break; case 2: digitalWrite(2, LOW); digitalWrite(3, HIGH); break; case 3: digitalWrite(10, LOW); digitalWrite(9, HIGH); digitalWrite(7, LOW); digitalWrite(5, HIGH); digitalWrite(11, LOW); digitalWrite(12, HIGH); digitalWrite(3, LOW); digitalWrite(4, HIGH); break; case 4: digitalWrite(5, LOW); digitalWrite(6, HIGH); } }
for(int i = 0; i<60 ; i++){ if (digitalRead(pulsador) == true) { break; } }
Lo que harías sería poner esto después de encender el led verde del semáforo 1 y 3. De esta manera, si se pulsa el botón en ese tiempo de espera rápidamente se rompe el bucle (break) y sale de él para continuar con el paso a el color ámbar. Pero seguro que se te ocurre alguna otra manera. Esto es lo que le ha quedado a Ivanxu finalmente:

Información básica sobre Proteción de datos
Responsable ➥ Sergio Luján Cuenca
Finalidad ➥ Gestionar el envío de correos electrónicos con artículos, noticias y publicidad. Todo relacionado con los temas de rufianenlared.com
Legitimación ➥ Consentimiento del interesado
Destinatarios ➥ Estos datos se comunicarán a MailRelay para gestionar el envío de los correos electrónicos
Derechos ➥ Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la política de privacidad
Plazo de conservación de los datos ➥ Hasta que se solicite la supresión por parte del interesado
Información adicional ➥ Puedes encontrarla en la política de privacidad y el aviso legal
Me las piro…
Bueno, espero que si eres de esos que lleva tiempo pidiéndome algún proyecto para hacer y que me moje con este tema más o menos te des por satisfecho. El proyecto no es mío pero te lo traigo para que lo montes. Poco a poco. Si te gusta que ponga proyectos de este estilo solo tienes que dejarme un comentario ahí debajo expresando esa voluntad… 😉