Está en la página 1de 9

Universidad Politécnica Salesiana

Ingeniería Automotriz

Sede Quito – Campus Sur

P 53

Nombres: Wilmer Quinga, Nicolás Acevedo

Grupo: 2º

Nivel: 3

1. INFORME DE PROYECTO

a. Tema

Semáforo con Arduino

b. Objetivo general

Nuestro objetivo es instalar semáforos de tres colores en cada extremo del carril único del puente.
Las luces permiten que el tráfico fluya sólo en una dirección a la vez. Cuando los sensores situados
en cualquier extremo del puente detectan un coche hará que espere mediante una luz roja. Las
luces cambiarán y permitirán que el tráfico fluya en la dirección opuesta.

EL ALGORITMO

Usaremos dos botones para simular los sensores del vehículo en cada extremo del puente. Cada
juego de luces tendrá LEDs rojos, amarillos y verdes. Inicialmente, el sistema permitirá que el
tráfico fluya de oeste a este, por lo que las luces orientadas a la oeste se pondrán a verde y las
luces de la del este se pondrán en rojo. Cuando un vehículo se acerca al puente y que acabará
pulsando el botón la luz es roja, entonces el sistema encenderá la luz en el lado opuesto de verde
a amarillo y a rojo, y luego tendrá que un período de tiempo establecido para permitir que
cualquier vehículo que se encuentre ya en el puente pueda terminar el cruce. A continuación, la
luz amarilla encendida en ell lado del vehículo en espera parpadeará como un aviso de
“prepararse” para el conductor y finalmente la luz cambiará a verde. La luz permanecerá verde
hasta que el coche se acerque al otro lado, momento en el que se repite el proceso.

LISTA DE COMPONENTES

 Dos LEDs rojos (LED1 y LED2)


 Dos LEDs amarillos (LED3 y LED4)
 Dos LEDs verdes (LED5 y LED6)
 Seis resistencias de 560 Ω (de R1 a R6)
 Dos resistencias de 10 kΩ (R7 y R8)
 Dos condensadores de 100 nF (C1 y C2)
 Dos pulsadores (S1 y S2)
 Una placa de medición de tamaño mediano
 Un Arduino y un cable USB
 Varios cables de conexión

EL ESQUEMA

Debido a que estamos controlando sólo seis LEDs y recibiendo la entrada de dos botones, el
diseño no será demasiado difícil. La siguiente figura nos muestra el esquema de nuestro proyecto.

Nuestro código comienza usando #define en para asociar los números de pin digital con etiquetas
para todos los LED utilizados, así como los dos botones. Tenemos LEDs rojos, amarillos y verdes
y un botón cada uno para cada lado del puente. La variable booleana trafficWest se utiliza para
hacer un seguimiento y comprobar que la forma en que el tráfico es en realizad de oeste a este, y
falso si es de este a oeste. La variable entera flowTime es el período mínimo de tiempo que los
vehículos tienen para cruzar el puente. Cuando un vehículo hace que se encienda una luz roja, el
sistema retrasa este período para dar el tiempo necesario a los del otro lado para cruzar el puente.
La variable entera variableDelay es el período de tiempo entre que hay para que los semáforos
cambien de verde a amarillo y a rojo. Antes de que el código entre en la sección void loop (), se
establece para el tráfico del flujo de oeste a este en la configuración de void setup() Una vez que
se está ejecutando, el programa no hace nada hasta que uno de los botones esté presionado.
Cuando se presiona el botón del lado este, la línea if (trafficWest == true) asegura que las luces
cambian sólo si el tráfico se dirige en la dirección opuesta. El resto de la sección de código se
compone de una simple secuencia de espera y luego encender y apagar varios LED para simular
el tráfico.
CÓDIGO DE SEMÁFORO

void setup() {

// put your setup code here, to run once:

// Semáforo Arduino

// define the pins that the buttons and lights are connected to:

#define westButton 3

#define eastButton 13

#define westRed 2

#define westYellow 1

#define westGreen 0

#define eastRed 12

#define eastYellow 11

#define eastGreen 10

#define yellowBlinkTime 500 // 0.5 seconds for yellow light blink

boolean trafficWest = true; // west = true, east = false

int flowTime = 10000; // amount of time to let traffic flow int changeDelay = 2000; // amount of
time between color changes

void setup() {

// setup digital I/O pins

pinMode(westButton, INPUT);

pinMode(eastButton, INPUT);

pinMode(westRed, OUTPUT);

pinMode(westYellow, OUTPUT);

pinMode(westGreen, OUTPUT);

pinMode(eastRed, OUTPUT);

pinMode(eastYellow, OUTPUT);
pinMode(eastGreen, OUTPUT);

// set initial state for lights - west side is green first

digitalWrite(westRed, LOW);

digitalWrite(westYellow, LOW);

digitalWrite(westGreen, HIGH);

digitalWrite(eastRed, HIGH);

digitalWrite(eastYellow, LOW);

digitalWrite(eastGreen, LOW);

void loop()

if ( digitalRead(westButton) == HIGH ) // request west>east traffic flow

if ( trafficWest != true )

// only continue if traffic flowing in the opposite (east) direction

trafficWest = true; // change traffic flow flag to west>east

delay(flowTime); // give time for traffic to flow

digitalWrite(eastGreen, LOW); // change east-facing lights from green

// to yellow to red

digitalWrite(eastYellow, HIGH);

delay(changeDelay);

digitalWrite(eastYellow, LOW);

digitalWrite(eastRed, HIGH);

delay(changeDelay);

for ( int a = 0; a < 5; a++ ) // blink yellow light { digitalWrite(westYellow, LOW);


delay(yellowBlinkTime);
digitalWrite(westYellow, HIGH); delay(yellowBlinkTime); } digitalWrite(westYellow, LOW);
digitalWrite(westRed, LOW); // change

west-facing lights from red to green digitalWrite(westGreen, HIGH); } } if (


digitalRead(eastButton) == HIGH ) // request east>west

traffic flow

if ( trafficWest == true )

// only continue if traffic flow is in the opposite (west) direction

trafficWest = false;// change traffic flow flag to east>west

delay(flowTime); // give time for traffic to flow

digitalWrite(westGreen, LOW);

// change west lights from green to yellow to red

digitalWrite(westYellow, HIGH);

delay(changeDelay);

digitalWrite(westYellow, LOW);

digitalWrite(westRed, HIGH);

delay(changeDelay);

for ( int a = 0 ; a < 5 ; a++ ) // blink yellow light

digitalWrite(eastYellow, LOW);

delay(yellowBlinkTime);

digitalWrite(eastYellow, HIGH);

delay(yellowBlinkTime);

digitalWrite(eastYellow, LOW);

digitalWrite(eastRed, LOW); // change east-facing lights from red to green

digitalWrite(eastGree void setup() {

// put your setup code here, to run once:


// Semáforo Arduino

// define the pins that the buttons and lights are connected to:

#define westButton 3

#define eastButton 13

#define westRed 2

#define westYellow 1

#define westGreen 0

#define eastRed 12

#define eastYellow 11

#define eastGreen 10

#define yellowBlinkTime 500 // 0.5 seconds for yellow light blink

boolean trafficWest = true; // west = true, east = false

int flowTime = 10000; // amount of time to let traffic flow int changeDelay = 2000; // amount of
time between color changes

void setup() {

// setup digital I/O pins

pinMode(westButton, INPUT);

pinMode(eastButton, INPUT);

pinMode(westRed, OUTPUT);

pinMode(westYellow, OUTPUT);

pinMode(westGreen, OUTPUT);

pinMode(eastRed, OUTPUT);

pinMode(eastYellow, OUTPUT);

pinMode(eastGreen, OUTPUT);

// set initial state for lights - west side is green first


digitalWrite(westRed, LOW);

digitalWrite(westYellow, LOW);

digitalWrite(westGreen, HIGH);

digitalWrite(eastRed, HIGH);

digitalWrite(eastYellow, LOW);

digitalWrite(eastGreen, LOW);

void loop()

if ( digitalRead(westButton) == HIGH ) // request west>east traffic flow

if ( trafficWest != true )

// only continue if traffic flowing in the opposite (east) direction

trafficWest = true; // change traffic flow flag to west>east

delay(flowTime); // give time for traffic to flow

digitalWrite(eastGreen, LOW); // change east-facing lights from green

// to yellow to red

digitalWrite(eastYellow, HIGH);

delay(changeDelay);

digitalWrite(eastYellow, LOW);

digitalWrite(eastRed, HIGH);

delay(changeDelay);

for ( int a = 0; a < 5; a++ ) // blink yellow light { digitalWrite(westYellow, LOW);


delay(yellowBlinkTime);

digitalWrite(westYellow, HIGH); delay(yellowBlinkTime); } digitalWrite(westYellow, LOW);


digitalWrite(westRed, LOW); // change

west-facing lights from red to green digitalWrite(westGreen, HIGH); } } if (


digitalRead(eastButton) == HIGH ) // request east>west

traffic flow
{

if ( trafficWest == true )

// only continue if traffic flow is in the opposite (west) direction

trafficWest = false;// change traffic flow flag to east>west

delay(flowTime); // give time for traffic to flow

digitalWrite(westGreen, LOW);

// change west lights from green to yellow to red

digitalWrite(westYellow, HIGH);

delay(changeDelay);

digitalWrite(westYellow, LOW);

digitalWrite(westRed, HIGH);

delay(changeDelay);

for ( int a = 0 ; a < 5 ; a++ ) // blink yellow light

digitalWrite(eastYellow, LOW);

delay(yellowBlinkTime);

digitalWrite(eastYellow, HIGH);

delay(yellowBlinkTime);

digitalWrite(eastYellow, LOW);

digitalWrite(eastRed, LOW); // change east-facing lights from red to green

digitalWrite(eastGreen, HIGH);

}
FOTOS

También podría gustarte