1. El Octavo Bit
  2. / Arduino
  3. / Proyectos para Arduino
  4. / ¿Cómo hacer un semáforo con Arduino?

¿Cómo hacer un semáforo con Arduino?

| Actualizado:
Comentarios: 0

¿Cómo hacer un semáforo con Arduino?
¿Cómo hacer un semáforo con Arduino?

Simular un semáforo es uno de los clásicos en la iniciación de los proyectos de Arduino. Aquí vamos a mostrar como puedes montar un semáforo sencillo, un semáforo para coches y peatones automatizado y por último, el semáforo para coches y peatones con pulsador.

Contenido

Semáforo sencillo

Material necesario:

  • Arduino Uno o similar.
  • Protoboard.
  • Cables.
  • Un led rojo, un led amarillo y uno verde.
  • 3 resistencias de 220 Ω

Para el montaje del esquema colocamos los leds rojo, amarillo y verde en la protoboard, teniendo en cuenta que los vamos a conectar a los pines digitales 10, 9 y 8 de la placa de Arduino UNO. Comprobaremos que la patilla larga del LED está conectada al voltaje positivo, mientras que la pata corta está conectada a la resistencia.

Esquema para el montaje de un semáforo sencillo para Arduino

Programando con el IDE de Arduino.

El código es sencillo: se crea una variable donde almacenar el tiempo de espera. En la función setup() indicamos que los pines 10, 9 y 8 funcionarán como salida.

Lo siguiente será encender el led correspondiente, con un valor HIGHT, y apagarlo cuando queramos, cambiando el valor a LOW. Primero, el rojo estará encendido; cuando el semáforo se ponga verde, el rojo se apagará; y antes de volver a rojo, se encenderá el amarillo y se apagará el verde.

// Semáforo sencillo en Arduino
int tiempoEspera = 5000;
 
void setup(){
  pinMode(10, OUTPUT);    // Rojo
  pinMode(9, OUTPUT);     // Amarillo
  pinMode(8, OUTPUT);     // Verde
}

void loop() {
  digitalWrite(10, HIGH);     // rojo encendido
  delay(tiempoEspera);

  digitalWrite(8, HIGH);      // verde encendido
  digitalWrite(10, LOW);      // rojo apagado
  delay(tiempoEspera);

  digitalWrite(9, HIGH);      // amarillo encendido
  digitalWrite(8, LOW);       // verde apagado
  delay(1000);

  digitalWrite(9, LOW);       // amarillo apagado
}

En la función setup() indicamos los pines que corresponden a cada LED, mientras que en la función loop() tenemos un bucle que va enciendiendo y apagando los LED, segun corresponda.

Programando con bloques

Semaforo arduino programación por bloques

Como observamos en la imagen tenemos un bucle con tres bloques: el primer bloque enciende el LED rojo, espera 5 segundos, el segundo bloque enciende el LED verde, espera 5 segundos y el tercer bloque, enciende el LED naranja, espera un segundo. Y se vuelve a repetir.

Semáforo para coches y peatones sencillo

Material necesario:

  • Arduino Uno o similar.
  • Protoboard.
  • Cables.
  • 2 leds rojos, 1 led amarillo y 2 leds verdes.
  • 5 resistencias de 220 Ω

Para el montaje del esquema la única diferencia es que hemos añadidos 2 nuevos leds.

Esquema para el montaje de un semáforo para coches y peatones con Arduino

El código es igual de fácil que con un solo semáforo, pero fijándonos que tenemos 2 luces nuevas. Hay que tener en cuenta que comenzaremos con el semáforo para coches en rojo, por tanto, el semáforo de peatones estará en verde.

// Semáforo coches y peatones sencillo en Arduino
int tiempoCoches = 5000;
int tiempoPeatones = 3000;
 
void setup(){
  // semaforo coches
  pinMode(10, OUTPUT);    // Rojo
  pinMode(9, OUTPUT);     // Amarillo
  pinMode(8, OUTPUT);     // Verde
  // semaforo peatones
  pinMode(3, OUTPUT);     // Rojo
  pinMode(2, OUTPUT);     // Verde
}

void loop() {
  digitalWrite(10, HIGH); // rojo encendido
  digitalWrite(2, HIGH);  // verde peatones encendido
  digitalWrite(3, LOW);   // rojo peatones apagado
  delay(tiempoCoches);

  digitalWrite(8, HIGH);  // verde encendido
  digitalWrite(10, LOW);  // rojo apagado
  digitalWrite(2, LOW);   // verde peatones apagado
  digitalWrite(3, HIGH);  // rojo peatones encendido
  delay(tiempoPeatones);

  digitalWrite(9, HIGH);  // amarillo encendido
  digitalWrite(8, LOW);   // verde apagado
  delay(1000);

  digitalWrite(9, LOW);   // amarillo apagado
}

Semáforo para coches y peatones con pulsador

Material necesario:

  • Arduino Uno o similar.
  • Protoboard.
  • Cables.
  • 2 leds rojos, 1 led amarillo y 2 leds verdes.
  • 5 resistencias de 220Ω y una de 10 kΩ
  • 1 Pulsador.

Ahora se complica un poco el montaje porque vamos a añadir un pulsador que activará el cambio de color del semáforo para permitir el paso de los peatones. Para el pulsador utilizamos una resistencia pull-up, que esta conectado al pin 6 y lo registramos como entrada. Si el pulsador esta presionado nos dara un valor de cero.

Esquema para semáforo de coches y peatones con pulsador

Programando con el IDE de Arduino

Partimos de la situación en la que el semáforo para coches está en verde y el de peatones, esta en rojo. Hemos creado una función «cambioLuz» a la cual se hará una llamada si el estado del pulsador cambia.

int tiempoCruce = 5000;
unsigned long tiempoCambio = 0;
 
void setup(){
  // semaforo coches
  pinMode(10, OUTPUT);  // rojo
  pinMode(9, OUTPUT);   // amarillo
  pinMode(8, OUTPUT);   // verde
  // semáforo peatones
  pinMode(3, OUTPUT);   // rojo
  pinMode(2, OUTPUT);   // verde
  pinMode(6, INPUT);    // pulsador, cambio de color
  digitalWrite(8, HIGH);    // iniciamos con el verde encendido, coche
  digitalWrite(3, HIGH);    // iniciamos con el rojo encendido, peatón
}

void loop() {
 int estado = digitalRead(6);
 if (estado == LOW && (millis() - tiempoCambio) > 5000 ){
  cambioLuz();
 }
}

void cambioLuz() {
  digitalWrite(8,LOW);    // verde apagado, coche
  digitalWrite(9, HIGH);  // amarillo encendido, coche
  delay(2000);
  
  digitalWrite(9, LOW);   // amarillo apagado, coche
  digitalWrite(10, HIGH); // rojo encendido, coche
  delay(1000);
  
  digitalWrite(3, LOW);   // rojo apagado, peatón
  digitalWrite(2, HIGH);  // verde encendido, peatón
  delay(tiempoCruce);
  // parpadeo de la luz verde del peatón
  for (int x=0; x < 10; x++) {
    digitalWrite(2, HIGH);
    delay(250);
    digitalWrite(2, LOW);
    delay(250);
  }
  
  digitalWrite(3, HIGH);    // rojo encendido, peatón
  delay(500);
  
  digitalWrite(10, LOW);    // rojo apagado, coche
  digitalWrite(8, HIGH);    // verde encendido, coche
  tiempoCambio = millis();
}

Como se puede comprobar esta continuamente comprobando el estado del pulsador, en el momento que este se pulse (LOW) realiza la llamada a la función cambioLuz().

Programando con bloques

Programación de un semáforo con pulsador utilizando bloques

Para la programación por bloques se comprueba si no esta presionado el pulsador (pin digital 6 = 1) o si esta pulsado (pin digital = 0).

Si el valor es 1, el semáforo para los vehículos estará en verde y el de los peatones en rojo. Si el valor es 0, el semáforo para vehículos estará en rojo y el de los peatones en verde. Para el parpadeo de la luz ambar se ha colocado un bloque de repetir.

Artículos que te pueden interesar

Joystick analógico y Arduino
¿Cómo utilizar un joystick analógico con Arduino?

¿Cómo utilizar un joystick analógico con Arduino?

| Actualizado:
Comentarios: 0

En este post veremos la conexión de un joystick a la placa Arduino. Primero se comprobara hacia donde se mueve sacando los datos por el serial monitor y en un segundo proyecto, según el movimiento del joystick encenderá un led.…

Robot Arduino 4 ruedas
Robot Arduino controlado por bluetooth, con 4 ruedas

Robot Arduino controlado por bluetooth, con 4 ruedas

| Actualizado:
Comentarios: 0

En un artículo anterior construimos un robot arduino controlado por bluetooth con dos ruedas y el módulo controlador L298N, en este caso utilizaremos el controlador de motor L293D que permite la conexión de 4 motores reductores. Es interesante que antes…

Módulo bluetooth HC-06 con Arduino
Tutorial básico de uso del módulo bluetooth HC-06 en Arduino

Tutorial básico de uso del módulo bluetooth HC-06 en Arduino

| Actualizado:
Comentarios: 0

El objetivo de este tutorial es poder añadir un módulo bluetooth a nuestra placa de Arduino y poder comunicarnos con un teléfono móvil Android a través de una aplicación. Primero veremos cómo conectarlo al móvil y después, cómo configurar el…

¿Cómo medir la temperatura y la humedad con el módulo DHT11 y Arduino?
Medir la temperatura y humedad con Arduino

Módulo DHT11, medir la temperatura y la humedad con Arduino.

| Actualizado:
Comentarios: 1

En este artículo veremos el funcionamiento del módulo DHT11 para medir la temperatura y la humedad, realizaremos la conexión con la placa Arduino y mostraremos las medidas obtenidas a través de una pantalla LCD. Contenido 1 Conectando el sensor DHT11…

Comentarios - 0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *