Sie sind auf Seite 1von 6

UNIVERSIDAD AUTÓNOMA DE

NUEVO LEÓN
Proyecto.
Cruce de dos semáforos con Arduino.
Explicación:
Usare dos botones para simular los sensores de un cruce estos tendrían la función de
cuando un vehículo ocupe cruzar este hará detener el otro semáforo y procederá a dar luz
verde al vehículo, cada juego de luces tendrá LEDs rojos, amarillos y verdes como
normalmente tendría un semáforo. Inicialmente, el sistema permitirá que el tráfico fluya en
una dirección por lo que las luces orientadas a este se pondrán verde y las luces del lado
contrario se pondrán en rojo.
Funcionamiento:
Este es simple, cuando ocupemos dejar fluir el tráfico en la dirección contraria apretamos
el botón, al cabo de aproximadamente 10 segundos estos cambiaran de verde a amarillo
para luego pasar al rojo del semáforo 1, después el semáforo 2 procederá a ponerse verde
para así dejar fluir el tráfico y así sucesivamente se podrá hacer con el semáforo contrario.
Materiales:

 Un par de LEDs rojos, amarillos y verdes.


 Seis resistencias de 560 ohms.
 Dos resistencias de 10 Kilo-ohms.
 Dos condensadores de 100 nano-faradios.
 Dos botones.
 Una protoboard.
 Arduino Uno y cable USB.
 Cables de conexión.
 PC con software Arduino.
Circuito:

Código:
El siguiente código sin más problemas lo introduciremos en el software de Arduino para
que lo pueda compilar y después correr, sin más antes asegurarnos que nuestro Arduino
tenga buena conexión a nuestro pc.
// 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);
Explicación del código,

Usamos #define para asociar los números de pin digital con etiquetas para todos los LEDs
utilizados, así como los dos botones.
Tenemos LEDs rojos, amarillos y verdes y un botón para cada uno de los semáforos. La
variable booleana trafficWest se utiliza para hacer un seguimiento y comprobar que la
forma en que el tráfico es en realidad de oeste a este y falso si es de este a oeste.

La variable flowTime es el periodo mínimo de tiempo que los vehículos tienen para cruzar.
Cuando un vehículo hace que se encienda una luz roja, el sistema retrasa este para dar
tiempo necesario a los del otro semáforo para cruzar la intersección.

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.

Imagen del circuito:


UNIVERSIDAD AUTÓNOMA DE
NUEVO LEÓN

FACULTAD DE INGENIERÁ
A MECÁNICA Y ELECTRICA
Proyecto.

Contador con display de 7 segmentos con Arduino.

Explicación:

Un display de 7 segmentos no es mas que un conjunto de LEDs como los que ya conocemos
y hemos estado utilizando en las materias relacionadas, solo que estos están conectados en
un circuito.
En este caso se usara el modelo DC05, el cual es de catodo común, es decir, internamente
todos los LEDs comparten la misma tierra (GND).

Das könnte Ihnen auch gefallen