Último post sobre simulación de semáforos en Arduino. En este ejercicio veremos cómo simular el comportamiento de un semáforo doble (o dos semáforos) que tienen además un cruce peatonal.
En total vamos a usar 10 leds: 3 para el semáforo 1, 3 para el semáforo 2 y finalmente 4 para los dos cruces peatonales (verde y rojo)
El ejercicio anterior trató sobre un semáforo doble en Arduino; el presente es la “continuación” del mismo.
Instrucciones
Realizar un sketch en Arduino que permita encender 10 LED’s con la lógica de dos semáforos con cruce y, adicionalmente, con cruce de peatones; cuando uno de ellos esté en ROJO, un led debe indicar el paso peatonal en VERDE.
Previo a que el semáforo dé paso a los automóviles, el cruce de peatones debe parpadear 4 veces; al colocarse el semáforo en verde, el cruce peatonal debe estar en ROJO; dicho comportamiento debe replicarse en el segundo semáforo.
Circuito de semáforo doble con cruces peatonales
Tiene 2 semáforos y dos cruces peatonales. Cada cruce peatonal está ligado a un semáforo; se sigue la misma lógica que en los ejercicios anteriores respetando las instrucciones previamente presentadas.
1.3 Semáforo doble con cruces peatonales
Usamos, como siempre, resistencias de 220 ohms. La distribución es:
Pines 2, 3 y 4 para el semáforo 1
Pines 5 y 6 para el cruce 1
Pines 7, 8 y 9 para el semáforo 2
Pines 10 y 11 para el cruce 2
El Arduino alimenta a la protoboard a través de los pines de voltaje, los leds también van conectados a la tierra de la placa.
Código de semáforos con cruces peatonales en Arduino
El código es una evolución de los anteriores, se utilizan más pines pero al final el comportamiento es casi el mismo.
He puesto los semáforos y cruces peatonales en arreglos, además de haber creado varias funciones útiles y amigables como parpadear_led_verde_cruce_1 que indican lo que hacen por su nombre.
/**
Prueba 3: Semáforo doble con cruces peatonales
INSTRUCCIONES: Realizar un sketch en Arduino que permita
encender 10 LED’s con la lógica de dos semáforos con cruce y,
adicionalmente, con cruce de peatones; cuando uno de ellos esté en ROJO,
un led debe indicar el paso peatonal en VERDE. Previo a que el semáforo
dé paso a los automóviles, el cruce de peatones debe parpadear 4 veces;
al colocarse el semáforo en verde, el cruce peatonal debe estar en ROJO;
dicho comportamiento debe replicarse en el segundo semáforo
@author parzibyte
Visita: parzibyte.me/blog
*/
const int semaforo1[]={2,3,4},
cruce1[]={5,6},
semaforo2[]={7,8,9},
cruce2[]={10,11},
duracion_verde_rojo =2000,
duracion_amarillo =1000,
duracion_parpadeo =150;
const boolean DEBUG =true;voidencender_verde_semaforo_1(){digitalWrite(semaforo1[0],HIGH);if(DEBUG)Serial.println("Semaforo 1: VERDE");}voidapagar_verde_semaforo_1(){digitalWrite(semaforo1[0],LOW);}voidparpadear_verde_semaforo_1(){if(DEBUG)Serial.println("Semaforo 1: VERDE PARPADEANDO");for(int x =0; x <2; x++){digitalWrite(semaforo1[0],HIGH);delay(duracion_parpadeo);digitalWrite(semaforo1[0],LOW);delay(duracion_parpadeo);}if(DEBUG)Serial.println("Semaforo 1: VERDE HA TERMINADO DE PARPADEAR");}voidencender_amarillo_semaforo_1(){if(DEBUG)Serial.println("Semaforo 1: AMARILLO");digitalWrite(semaforo1[1],HIGH);}voidapagar_amarillo_semaforo_1(){digitalWrite(semaforo1[1],LOW);}voidencender_rojo_semaforo_1(){if(DEBUG)Serial.println("Semaforo 1: ROJO");digitalWrite(semaforo1[2],HIGH);}voidapagar_rojo_semaforo_1(){digitalWrite(semaforo1[2],LOW);}voidencender_verde_semaforo_2(){if(DEBUG)Serial.println("Semaforo 2: VERDE");digitalWrite(semaforo2[0],HIGH);}voidapagar_verde_semaforo_2(){digitalWrite(semaforo2[0],LOW);}voidparpadear_verde_semaforo_2(){if(DEBUG)Serial.println("Semaforo 2: VERDE PARPADEANDO");for(int x =0; x <2; x++){digitalWrite(semaforo2[0],HIGH);delay(duracion_parpadeo);digitalWrite(semaforo2[0],LOW);delay(duracion_parpadeo);}if(DEBUG)Serial.println("Semaforo 2: VERDE HA TERMINADO DE PARPADEAR");}voidencender_amarillo_semaforo_2(){if(DEBUG)Serial.println("Semaforo 2: AMARILLO");digitalWrite(semaforo2[1],HIGH);}voidapagar_amarillo_semaforo_2(){digitalWrite(semaforo2[1],LOW);}voidencender_rojo_semaforo_2(){if(DEBUG)Serial.println("Semaforo 2: ROJO");digitalWrite(semaforo2[2],HIGH);}voidapagar_rojo_semaforo_2(){digitalWrite(semaforo2[2],LOW);}voidesperar_duracion_verde_o_rojo(){if(DEBUG)Serial.println("Esperando que acabe el tiempo del verde o del rojo");delay(duracion_verde_rojo);if(DEBUG)Serial.println("Tiempo del verde o del rojo terminado");}voidesperar_duracion_amarillo(){if(DEBUG)Serial.println("Esperando que acabe el tiempo del amarillo");delay(duracion_amarillo);if(DEBUG)Serial.println("Tiempo del amarillo terminado");}voidparpadear_verde_cruce_1(){if(DEBUG)Serial.println("Cruce peatonal 1: VERDE PARPADEANDO");for(int x =0; x <5; x++){digitalWrite(cruce1[0],HIGH);delay(duracion_parpadeo);digitalWrite(cruce1[0],LOW);delay(duracion_parpadeo);}if(DEBUG)Serial.println("Cruce peatonal 1: VERDE HA TERMINADO DE PARPADEAR");}voidencender_verde_cruce_1(){if(DEBUG)Serial.println("Cruce peatonal 1: VERDE");digitalWrite(cruce1[0],HIGH);}voidapagar_verde_cruce_1(){digitalWrite(cruce1[0],LOW);}voidencender_rojo_cruce_1(){if(DEBUG)Serial.println("Cruce peatonal 1: ROJO");digitalWrite(cruce1[1],HIGH);}voidapagar_rojo_cruce_1(){digitalWrite(cruce1[1],LOW);}voidparpadear_verde_cruce_2(){if(DEBUG)Serial.println("Cruce peatonal 2: VERDE PARPADEANDO");for(int x =0; x <5; x++){digitalWrite(cruce2[0],HIGH);delay(duracion_parpadeo);digitalWrite(cruce2[0],LOW);delay(duracion_parpadeo);}if(DEBUG)Serial.println("Cruce peatonal 2: VERDE HA TERMINADO DE PARPADEAR");}voidencender_verde_cruce_2(){if(DEBUG)Serial.println("Cruce peatonal 2: VERDE");digitalWrite(cruce2[0],HIGH);}voidapagar_verde_cruce_2(){digitalWrite(cruce2[0],LOW);}voidencender_rojo_cruce_2(){if(DEBUG)Serial.println("Cruce peatonal 2: ROJO");digitalWrite(cruce2[1],HIGH);}voidapagar_rojo_cruce_2(){digitalWrite(cruce2[1],LOW);}voidsetup(){if(DEBUG)Serial.begin(9600);for(int x =0; x <3; x++){pinMode(semaforo1[x],OUTPUT);pinMode(semaforo2[x],OUTPUT);}for(int x =0; x <2; x++){pinMode(cruce1[x],OUTPUT);pinMode(cruce2[x],OUTPUT);}}voidloop(){if(DEBUG)Serial.println("\n");encender_verde_semaforo_1();encender_rojo_semaforo_2();encender_rojo_cruce_1();encender_verde_cruce_2();esperar_duracion_verde_o_rojo();parpadear_verde_semaforo_1();apagar_verde_semaforo_1();encender_amarillo_semaforo_1();parpadear_verde_cruce_2();apagar_rojo_semaforo_2();apagar_amarillo_semaforo_1();encender_verde_semaforo_2();encender_rojo_semaforo_1();apagar_rojo_cruce_1();encender_verde_cruce_1();apagar_verde_cruce_2();encender_rojo_cruce_2();esperar_duracion_verde_o_rojo();parpadear_verde_semaforo_2();apagar_verde_semaforo_2();encender_amarillo_semaforo_2();parpadear_verde_cruce_1();apagar_rojo_semaforo_1();apagar_amarillo_semaforo_2();apagar_verde_cruce_1();apagar_rojo_cruce_2();}
Si quieres probarlo directamente en tu navegador, haz click aquí.
Estoy aquí para ayudarte
Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto
No te pierdas ninguno de mis posts
Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
2 comentarios en “Semáforo doble con cruces peatonales en Arduino”
orlando
tengo dos preguntas acerca de: Circuito de semáforo doble con cruces peatonales
1. como se haría el código iniciando 5 veces intermitente el rojo del vehicular que no lleva la vía, el amarillo del vehicular que lleva la vía, el rojo de los peatones?
2. como se haría el código utilizando tiempo real, por ejemplo: que de las 6pm a las 8 pm el semáforo quede intermitente como en la primera pregunta?
tengo dos preguntas acerca de: Circuito de semáforo doble con cruces peatonales
1. como se haría el código iniciando 5 veces intermitente el rojo del vehicular que no lleva la vía, el amarillo del vehicular que lleva la vía, el rojo de los peatones?
2. como se haría el código utilizando tiempo real, por ejemplo: que de las 6pm a las 8 pm el semáforo quede intermitente como en la primera pregunta?
gracias por su aporte, estoy atento
Hola. Gracias por su comentario. Para consultas personalizadas puede contactarme en: https://parzibyte.me#contacto
Saludos