Semáforo con Arduino.

Este proyecto es uno de los clásicos cuando te estás introduciendo al desarrollo de proyectos, automatización y otras áreas. Aquí te mostramos una guía rápida y fácil de montar 4 semáforos para un cruce de 2 avenidas. Encontrarás el diagrama electrónico y código de funcionamiento del semáforo.

1.- Introducción.

Una de las aplicaciones más sencillas que se pueden hacer con Arduino son los semáforos, esta aplicación consiste en crear una secuencia de LEDs de colores rojo amarillo y verde, simulando el funcionamiento de cuatro semáforos y controlar un cruce como el de la siguiente imagen.

Los semáforos serán armados en pequeñas tarjetas con su conector para enviar las señales desde nuestro Arduino.

 

2.- Materiales.

Arduino UNO
4x LEDs Rojo
4x LEDs Amarillo
4x LEDs Verde
Pack de 4 resistores de 300 Ohms
2x Placa fenólica perforada
Tira de pines macho
Pack de Jumpers H-H (10 pzas)
Pack de Jumpers H-M (40 pzas)
Soldadura

3.- Armado.

Utilizando la placa perforada debemos armar el siguiente circuito para cada semáforo:


Utiliza el menor espacio posible, nosotros te mostramos algunas fotos de nuestro resultado:






Debes repetir ese circuito para cada semáforo, en este caso queda así con los 4 semáforos:



Debido a que la tarjeta de Arduino no tiene suficientes conexiones de tierra hay que hacer una tarjeta extra que simplemente nos sirva para unir todas las conexiones de tierra y conectar sólo una al Arduino.

 

4.- Conexión.

Es momento de conectar los 4 semáforos al Arduino, hazlo de acuerdo al siguiente diagrama o dibujo:

 

5.- Código.

El código es bastante sencillo, hace la secuencia correspondiente a cada semáforo, en la sección de constantes puedes cambiar el tiempo de duración de cada luz, están en milisegundos.

[code language=»java»]
// Constantes
const int RETARDO_VERDE = 4000;
const int RETARDO_PARPADEO_VERDE = 500;
const int RETARDO_AMARILLO = 2000;
// Conexiones
int verde_semaforo1 = 2;
int amarillo_semaforo1 = 3;
int rojo_semaforo1 = 4;
int verde_semaforo2 = 5;
int amarillo_semaforo2 = 6;
int rojo_semaforo2 = 7;
int verde_semaforo3 = 8;
int amarillo_semaforo3 = 9;
int rojo_semaforo3 = 10;
int verde_semaforo4 = 11;
int amarillo_semaforo4 = 12;
int rojo_semaforo4 = 13;
void setup() {
// Inicialización
digitalWrite(verde_semaforo1,LOW);
digitalWrite(rojo_semaforo1,HIGH);
digitalWrite(amarillo_semaforo1,LOW);
digitalWrite(verde_semaforo2,LOW);
digitalWrite(rojo_semaforo2,HIGH);
digitalWrite(amarillo_semaforo2,LOW);
digitalWrite(verde_semaforo3,LOW);
digitalWrite(rojo_semaforo3,HIGH);
digitalWrite(amarillo_semaforo3,LOW);
digitalWrite(verde_semaforo4,LOW);
digitalWrite(rojo_semaforo4,HIGH);
digitalWrite(amarillo_semaforo4,LOW);
pinMode(verde_semaforo1,OUTPUT);
pinMode(amarillo_semaforo1,OUTPUT);
pinMode(rojo_semaforo1,OUTPUT);
pinMode(verde_semaforo2,OUTPUT);
pinMode(amarillo_semaforo2,OUTPUT);
pinMode(rojo_semaforo2,OUTPUT);
pinMode(verde_semaforo3,OUTPUT);
pinMode(amarillo_semaforo3,OUTPUT);
pinMode(rojo_semaforo3,OUTPUT);
pinMode(verde_semaforo4,OUTPUT);
pinMode(amarillo_semaforo4,OUTPUT);
pinMode(rojo_semaforo4,OUTPUT);
}
void loop() {
// Secuencia para semaforo 1
digitalWrite(verde_semaforo1,HIGH);
digitalWrite(amarillo_semaforo1,LOW);
digitalWrite(rojo_semaforo1,LOW);
delay(RETARDO_VERDE);
digitalWrite(verde_semaforo1,LOW);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo1,HIGH);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo1,LOW);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo1,HIGH);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo1,LOW);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo1,HIGH);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo1,LOW);
digitalWrite(amarillo_semaforo1,HIGH);
delay(RETARDO_AMARILLO);
digitalWrite(amarillo_semaforo1,LOW);
digitalWrite(rojo_semaforo1,HIGH);
// Secuencia semaforo 2
digitalWrite(verde_semaforo2,HIGH);
digitalWrite(amarillo_semaforo2,LOW);
digitalWrite(rojo_semaforo2,LOW);
delay(RETARDO_VERDE);
digitalWrite(verde_semaforo2,LOW);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo2,HIGH);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo2,LOW);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo2,HIGH);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo2,LOW);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo2,HIGH);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo2,LOW);
digitalWrite(amarillo_semaforo2,HIGH);
delay(RETARDO_AMARILLO);
digitalWrite(amarillo_semaforo2,LOW);
digitalWrite(rojo_semaforo2,HIGH);
// Secuencia semaforo 3
digitalWrite(verde_semaforo3,HIGH);
digitalWrite(amarillo_semaforo3,LOW);
digitalWrite(rojo_semaforo3,LOW);
delay(RETARDO_VERDE);
digitalWrite(verde_semaforo3,LOW);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo3,HIGH);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo3,LOW);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo3,HIGH);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo3,LOW);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo3,HIGH);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo3,LOW);
digitalWrite(amarillo_semaforo3,HIGH);
delay(RETARDO_AMARILLO);
digitalWrite(amarillo_semaforo3,LOW);
digitalWrite(rojo_semaforo3,HIGH);
// Secuencia semaforo 4
digitalWrite(verde_semaforo4,HIGH);
digitalWrite(amarillo_semaforo4,LOW);
digitalWrite(rojo_semaforo4,LOW);
delay(RETARDO_VERDE);
digitalWrite(verde_semaforo4,LOW);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo4,HIGH);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo4,LOW);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo4,HIGH);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo4,LOW);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo4,HIGH);
delay(RETARDO_PARPADEO_VERDE);
digitalWrite(verde_semaforo4,LOW);
digitalWrite(amarillo_semaforo4,HIGH);
delay(RETARDO_AMARILLO);
digitalWrite(amarillo_semaforo4,LOW);
digitalWrite(rojo_semaforo4,HIGH);
}
[/code]

 

 

 

 

6.- Video.

En el siguiente video puedes ver una visualización rápida de la secuencia programada para nuestro Semáforo con Arduino:

 

 

Compartir ahora:

Entradas relacionadas

4 comentarios

  • Hola, estoy empezando con la programación y tengo una duda.
    Para el arduino nano es exactamente lo mismo para conectar?

    • Hola Lady Velazquez.
      Gracias por tu comentario.
      Sí es correcto, aplica las mismas entradas y salidas para tu Arduino Nano.

      Un saludo!

  • Hola..exelente trabajo….consulta..necesito conectar un buzzer para invidentes cada vez que de luz verde….me puedes orientar como…gracias

    • William gracias por leernos.
      Con todo gusto te compartimos este tip. 1. Identifica el polo positivo de tu buzzer (normalmente viene indicado con el signo +). 2. Conecta el polo positivo de tu buzzer a la patita positiva del led Verde. 3. El negativo de tu buzzer al cualquier negativo de tu circuito. Prueba y listo.
      Cualquier duda o comentario será un gusto para nosotros ayudarte.
      Te enviamos un saludo William. Y Felicidades por tu iniciativa 😉