Cruce de semáforos con pulsador paso de peatones y detector de vehículos.
Maqueta
Códigos y funcionamiento
Conexiones
Código cruce básico
#define Verde1 12
#define Amarillo1 13
#define Rojo1 A2
#define Verde2 3
#define Amarillo2 4
#define Rojo2 5
#define Verde3 6
#define Amarillo3 7
#define Rojo3 8
#define Verde4 9
#define Amarillo4 10
#define Rojo4 11
void setup() {
pinMode(Verde1 ,OUTPUT); // declaramos todos los pines que vamos ha utilizar de salida
pinMode(Amarillo1 ,OUTPUT);
pinMode(Rojo1 ,OUTPUT);
pinMode(Verde2 ,OUTPUT);
pinMode(Amarillo2 ,OUTPUT);
pinMode(Rojo2 ,OUTPUT);
pinMode(Verde3 ,OUTPUT);
pinMode(Amarillo3 ,OUTPUT);
pinMode(Rojo3 ,OUTPUT);
pinMode(Verde4 ,OUTPUT);
pinMode(Amarillo4 ,OUTPUT);
pinMode(Rojo4 ,OUTPUT);
//Hacemos que esten en Ambar
digitalWrite(Amarillo1,HIGH);
digitalWrite(Amarillo2,HIGH);
digitalWrite(Amarillo3,HIGH);
digitalWrite(Amarillo4,HIGH);
delay(1000);
digitalWrite(Amarillo1,LOW);
digitalWrite(Amarillo2,LOW);
digitalWrite(Amarillo3,LOW);
digitalWrite(Amarillo4,LOW);
delay(500);
digitalWrite(Amarillo1,HIGH);
digitalWrite(Amarillo2,HIGH);
digitalWrite(Amarillo3,HIGH);
digitalWrite(Amarillo4,HIGH);
delay(1000);
digitalWrite(Amarillo1,LOW);
digitalWrite(Amarillo2,LOW);
digitalWrite(Amarillo3,LOW);
digitalWrite(Amarillo4,LOW);
delay(500);
digitalWrite(Amarillo1,HIGH);
digitalWrite(Amarillo2,HIGH);
digitalWrite(Amarillo3,HIGH);
digitalWrite(Amarillo4,HIGH);
delay(1000);
digitalWrite(Amarillo1,LOW);// apagamos los amarillos
digitalWrite(Amarillo2,LOW);
digitalWrite(Amarillo3,LOW);
digitalWrite(Amarillo4,LOW);
//los ponemos todos en rojo
digitalWrite(Rojo1,HIGH);
digitalWrite(Rojo2,HIGH);
digitalWrite(Rojo3,HIGH);
digitalWrite(Rojo4,HIGH);
delay(2000);
}
void loop() {
digitalWrite(Rojo1,LOW); //apagamos el rojo1
digitalWrite(Verde1,HIGH); // para encender el verde1
delay(5000);
//
digitalWrite(Verde1,LOW); //apagamos el verde1
digitalWrite(Amarillo1,HIGH); // y ponemos ambar el amarillo1
delay (2000);
//
digitalWrite(Amarillo1,LOW); //paramos el ambar
digitalWrite(Rojo1,HIGH);//ponemos el rojo1 encendido
delay (1000);
digitalWrite(Rojo2,LOW); // apagamos el rojo2
digitalWrite(Verde2,HIGH); // para encender el verde2
delay(5000);
//
//
digitalWrite(Verde2,LOW);
digitalWrite(Amarillo2,HIGH);
delay (2000);
//
digitalWrite(Amarillo2,LOW);
digitalWrite(Rojo2,HIGH);
delay (1000);
digitalWrite(Rojo3,LOW);
digitalWrite(Verde3,HIGH);
delay(5000);
//
//
digitalWrite(Verde3,LOW);
digitalWrite(Amarillo3,HIGH);
delay (2000);
//
digitalWrite(Amarillo3,LOW);
digitalWrite(Rojo3,HIGH);
delay(1000);
digitalWrite(Rojo4,LOW);
digitalWrite(Verde4,HIGH);
delay(5000);
//
//
digitalWrite(Verde4,LOW);
digitalWrite(Amarillo4,HIGH);
delay (2000);
digitalWrite(Amarillo4,LOW);
digitalWrite(Rojo4,HIGH);
//
}
Código cruce con infrarrojo
#define Verde1 12
#define Amarillo1 13
#define Rojo1 A2
#define Verde2 3
#define Amarillo2 4
#define Rojo2 5
#define Verde3 6
#define Amarillo3 7
#define Rojo3 8
void setup() {
Serial.begin(9600); // comunicacion placa/ordenador
pinMode(Verde1 ,OUTPUT); // declaramos todos los pines que vamos ha utilizar de salida
pinMode(Amarillo1 ,OUTPUT);
pinMode(Rojo1 ,OUTPUT);
pinMode(Verde2 ,OUTPUT);
pinMode(Amarillo2 ,OUTPUT);
pinMode(Rojo2 ,OUTPUT);
pinMode(Verde3 ,OUTPUT);
pinMode(Amarillo3 ,OUTPUT);
pinMode(Rojo3 ,OUTPUT);
//
digitalWrite(Rojo1,LOW);
digitalWrite(Amarillo1,LOW);
digitalWrite(Verde1,LOW);
digitalWrite(Rojo2,LOW);
digitalWrite(Amarillo2,LOW);
digitalWrite(Verde2,LOW);
digitalWrite(Rojo3,LOW);
digitalWrite(Amarillo3,LOW);
digitalWrite(Verde3,LOW);
//
digitalWrite(Amarillo1,HIGH);
digitalWrite(Amarillo2,HIGH);
digitalWrite(Amarillo3,HIGH);
delay(1000);
digitalWrite(Amarillo1,LOW);
digitalWrite(Amarillo2,LOW);
digitalWrite(Amarillo3,LOW);
delay(500);
digitalWrite(Amarillo1,HIGH);
digitalWrite(Amarillo2,HIGH);
digitalWrite(Amarillo3,HIGH);
delay(1000);
digitalWrite(Amarillo1,LOW);
digitalWrite(Amarillo2,LOW);
digitalWrite(Amarillo3,LOW);
delay(500);
digitalWrite(Amarillo1,HIGH);
digitalWrite(Amarillo2,HIGH);
digitalWrite(Amarillo3,HIGH);
delay(1000);
digitalWrite(Amarillo1,LOW);// apagamos los amarillos
digitalWrite(Amarillo2,LOW);
digitalWrite(Amarillo3,LOW);
//los ponemos todos en rojo
digitalWrite(Rojo1,HIGH);
digitalWrite(Rojo2,HIGH);
digitalWrite(Rojo3,HIGH);
delay(2000);
}
void loop() {
int Infrarrojo=digitalRead(A3);
if (Infrarrojo==LOW){ // si detecta
digitalWrite(Verde1,LOW);
digitalWrite(Verde3,LOW);
digitalWrite(Amarillo1,LOW);
digitalWrite(Amarillo3,LOW);
delay(2000);
digitalWrite(Rojo2,LOW);
digitalWrite(Rojo1,HIGH);
digitalWrite(Rojo3,HIGH);
digitalWrite(Verde2,HIGH);
delay(4000);
digitalWrite(Verde2,LOW);
digitalWrite(Amarillo2,HIGH);
delay(2000);
digitalWrite(Amarillo2,LOW);
digitalWrite(Rojo2,HIGH);
}
else {
digitalWrite(Rojo1,LOW);
digitalWrite(Verde1,HIGH);
delay(5000);
digitalWrite(Verde1,LOW);
digitalWrite(Amarillo1,HIGH);
delay(2000);
digitalWrite(Amarillo1,LOW);
digitalWrite (Rojo1,HIGH);
digitalWrite(Rojo3,LOW);
digitalWrite(Verde3,HIGH);
delay(5000);
digitalWrite(Verde3,LOW);
digitalWrite(Amarillo3,HIGH);
delay(2000);
digitalWrite(Amarillo3,LOW);
digitalWrite (Rojo3,HIGH);
}
//
//
}
Código cruce con pulsador peatones
#define Verde1 12
#define Amarillo1 13
#define Rojo1 A2
#define Verde3 6
#define Amarillo3 7
#define Rojo3 8
#define Verde4 9
#define Amarillo4 10
#define Rojo4 11
#define RojoP A0
#define VerdeP A1
#define Pulsador 2
const byte ledPin = A5;
const byte interruptPin = 2;
volatile byte state = HIGH;
void setup()
{
pinMode(Verde1 ,OUTPUT); // declaramos todos los pines que vamos ha utilizar de salida
pinMode(Amarillo1 ,OUTPUT);
pinMode(Rojo1 ,OUTPUT);
pinMode(Verde3 ,OUTPUT);
pinMode(Amarillo3 ,OUTPUT);
pinMode(Rojo3 ,OUTPUT);
pinMode(Verde4 ,OUTPUT);
pinMode(Amarillo4 ,OUTPUT);
pinMode(Rojo4 ,OUTPUT);
pinMode(RojoP,OUTPUT);
pinMode(VerdeP,OUTPUT);
pinMode(Pulsador,INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), blink, RISING );
digitalWrite(Amarillo1,HIGH);
digitalWrite(Amarillo3,HIGH);
digitalWrite(Amarillo4,HIGH);
delay(1000);
digitalWrite(Amarillo1,LOW);
digitalWrite(Amarillo3,LOW);
digitalWrite(Amarillo4,LOW);
delay(500);
digitalWrite(Amarillo1,HIGH);
digitalWrite(Amarillo3,HIGH);
digitalWrite(Amarillo4,HIGH);
delay(1000);
digitalWrite(Amarillo1,LOW);
digitalWrite(Amarillo3,LOW);
digitalWrite(Amarillo4,LOW);
delay(500);
digitalWrite(Amarillo1,HIGH);
digitalWrite(Amarillo3,HIGH);
digitalWrite(Amarillo4,HIGH);
delay(1000);
digitalWrite(Amarillo1,LOW);// apagamos los amarillos
digitalWrite(Amarillo3,LOW);
digitalWrite(Amarillo4,LOW);
//los ponemos todos en rojo
digitalWrite(Rojo1,HIGH);
digitalWrite(Rojo3,HIGH);
digitalWrite(Rojo4,HIGH);
digitalWrite(RojoP,HIGH);
delay(2000);
}
void loop() {
if(state==HIGH){
digitalWrite(Verde1,LOW);
digitalWrite(Verde3,LOW);
digitalWrite(Verde4,LOW);
digitalWrite(Amarillo1,LOW);
digitalWrite(Amarillo3,LOW);
digitalWrite(Amarillo4,LOW);
digitalWrite(Rojo1,HIGH);
digitalWrite(Rojo3,HIGH);
digitalWrite(Rojo4,HIGH);
digitalWrite(RojoP, LOW);
delay(500);
digitalWrite(VerdeP,HIGH);
delay(2500);
digitalWrite(VerdeP,LOW);
delay(500);
digitalWrite(VerdeP,HIGH); //
delay(500);
digitalWrite(VerdeP,LOW);
delay(500);
digitalWrite(VerdeP,HIGH);
delay(500);
digitalWrite(VerdeP,LOW);
digitalWrite(ledPin,LOW);
state=!state;
}
digitalWrite (VerdeP,LOW);
digitalWrite (RojoP,HIGH);
digitalWrite(Rojo1,LOW); //apagamos el rojo1
digitalWrite(Verde1,HIGH);
// para encender el verde1
delay(5000);
digitalWrite(Verde1,LOW); //apagamos el verde1
digitalWrite(Amarillo1,HIGH); // y ponemos ambar el amarillo1
delay (2000);
//
digitalWrite(Amarillo1,LOW); //paramos el ambar
digitalWrite(Rojo1,HIGH);//ponemos el rojo1 encendido
delay (1000);
digitalWrite(Rojo3,LOW);
digitalWrite(Verde3,HIGH);
delay(5000);
//
digitalWrite(Verde3,LOW);
digitalWrite(Amarillo3,HIGH);
delay (2000);
digitalWrite(Amarillo3,LOW);
digitalWrite(Rojo3,HIGH);
delay(1000);
digitalWrite(Rojo4,LOW);
digitalWrite(Verde4,HIGH);
delay(5000);
digitalWrite(Verde4,LOW);
digitalWrite(Amarillo4,HIGH);
delay (2000);
digitalWrite(Amarillo4,LOW);
digitalWrite(Rojo4,HIGH);
delay(1000);
digitalWrite(ledPin, state);
}
void blink() {
state = !state;
}
Código cruce completo (cruce básico + cruce con infrarrojo + cruce con pulsador peatones)
#define Verde1 12
#define Amarillo1 13
#define Rojo1 A2
#define Verde2 3
#define Amarillo2 4
#define Rojo2 5
#define Verde3 6
#define Amarillo3 7
#define Rojo3 8
#define Verde4 9
#define Amarillo4 10
#define Rojo4 11
#define RojoP A0
#define VerdeP A1
#define Pulsador 2
const byte ledPin = A5;
const byte interruptPin = 2;
volatile byte state = HIGH;
void setup() {
pinMode(Verde1 ,OUTPUT); // declaramos todos los pines que vamos ha utilizar de salida
pinMode(Amarillo1 ,OUTPUT);
pinMode(Rojo1 ,OUTPUT);
pinMode(Verde2 ,OUTPUT);
pinMode(Amarillo2 ,OUTPUT);
pinMode(Rojo2 ,OUTPUT);
pinMode(Verde3 ,OUTPUT);
pinMode(Amarillo3 ,OUTPUT);
pinMode(Rojo3 ,OUTPUT);
pinMode(Verde4 ,OUTPUT);
pinMode(Amarillo4 ,OUTPUT);
pinMode(Rojo4 ,OUTPUT);
pinMode(RojoP,OUTPUT);
pinMode(VerdeP,OUTPUT);
pinMode(Pulsador,INPUT_PULLUP);
Serial.begin(9600); // comunicacion placa/ordenador
pinMode(ledPin, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), blink, RISING );
//Hacemos que esten en Ambar
digitalWrite(Amarillo1,HIGH);
digitalWrite(Amarillo2,HIGH);
digitalWrite(Amarillo3,HIGH);
digitalWrite(Amarillo4,HIGH);
delay(1000);
digitalWrite(Amarillo1,LOW);
digitalWrite(Amarillo2,LOW);
digitalWrite(Amarillo3,LOW);
digitalWrite(Amarillo4,LOW);
delay(500);
digitalWrite(Amarillo1,HIGH);
digitalWrite(Amarillo2,HIGH);
digitalWrite(Amarillo3,HIGH);
digitalWrite(Amarillo4,HIGH);
delay(1000);
digitalWrite(Amarillo1,LOW);
digitalWrite(Amarillo2,LOW);
digitalWrite(Amarillo3,LOW);
digitalWrite(Amarillo4,LOW);
delay(500);
digitalWrite(Amarillo1,HIGH);
digitalWrite(Amarillo2,HIGH);
digitalWrite(Amarillo3,HIGH);
digitalWrite(Amarillo4,HIGH);
delay(1000);
digitalWrite(Amarillo1,LOW);// apagamos los amarillos
digitalWrite(Amarillo2,LOW);
digitalWrite(Amarillo3,LOW);
digitalWrite(Amarillo4,LOW);
//los ponemos todos en rojo
digitalWrite(Rojo1,HIGH);
digitalWrite(Rojo2,HIGH);
digitalWrite(Rojo3,HIGH);
digitalWrite(Rojo4,HIGH);
digitalWrite(RojoP,HIGH);
delay(2000);
}
void loop() {
digitalWrite(Rojo1,LOW); //apagamos el rojo1
digitalWrite(Verde1,HIGH); // para encender el verde1
delay(5000);
//
digitalWrite(Verde1,LOW); //apagamos el verde1
digitalWrite(Amarillo1,HIGH); // y ponemos ambar el amarillo1
delay (2000);
//
digitalWrite(Amarillo1,LOW); //paramos el ambar
digitalWrite(Rojo1,HIGH);//ponemos el rojo1 encendido
delay (1000);
digitalWrite(Rojo3,LOW);
digitalWrite(Verde3,HIGH);
delay(5000);
//
//
digitalWrite(Verde3,LOW);
digitalWrite(Amarillo3,HIGH);
delay (2000);
//
digitalWrite(Amarillo3,LOW);
digitalWrite(Rojo3,HIGH);
delay(1000);
digitalWrite(Rojo4,LOW);
digitalWrite(Verde4,HIGH);
delay(5000);
//
//
digitalWrite(Verde4,LOW);
digitalWrite(Amarillo4,HIGH);
delay (2000);
digitalWrite(Amarillo4,LOW);
digitalWrite(Rojo4,HIGH);
delay(1000);
//pulsador
if(state==HIGH){
digitalWrite(Verde1,LOW);
digitalWrite(Verde3,LOW);
digitalWrite(Verde4,LOW); // apagamos el led1 ambar
digitalWrite(Amarillo1,LOW);
digitalWrite(Amarillo3,LOW);
digitalWrite(Amarillo4,LOW); // encendemos el led2 ambar semaforo
digitalWrite(Rojo1,HIGH);
digitalWrite(Rojo3,HIGH);
digitalWrite(Rojo4,HIGH); // encendemos el led3 rojo semaforo
digitalWrite(RojoP, LOW); // apagamos el led 5 rojo del peaton
delay(500);// retardo de 0,5 segundos
digitalWrite(VerdeP,HIGH); // encendemos el led 4 verde del peaton
delay(3000); // tiempo de paso de 1 minuto
digitalWrite(VerdeP,LOW); // se apaga el led 4 verde del peatos
delay(500); // retardo
digitalWrite(VerdeP,HIGH); //
delay(500);
digitalWrite(VerdeP,LOW);
delay(500);
digitalWrite(VerdeP,HIGH);
delay(500);
digitalWrite(VerdeP,LOW);
digitalWrite(RojoP,HIGH);
digitalWrite(ledPin,LOW);
state=!state;
delay(1000);
}
//sensor infrarojo
int infrarrojo=digitalRead(A3);
if (infrarrojo==LOW){
digitalWrite(Rojo2,LOW);
digitalWrite(Verde1,LOW);
digitalWrite(Verde3,LOW);
digitalWrite(Verde4,LOW);
digitalWrite(Rojo1,HIGH);
digitalWrite(Rojo3,HIGH);
digitalWrite(Rojo4,HIGH);
digitalWrite(Verde2,HIGH);
delay(4000);
digitalWrite(Verde2,LOW);
digitalWrite(Amarillo2,HIGH);
delay(2000);
digitalWrite(Amarillo2,LOW);
digitalWrite(Rojo2,HIGH);
}
}
void blink() {
state = !state;
}
Comentarios
Publicar un comentario