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

Pulsadores para Arduino
Las entradas digitales en Arduino. Los pulsadores.

Las entradas digitales en Arduino. Los pulsadores.

| Actualizado:
Comentarios: 0

En muchos de los proyectos con Arduino nos encontraremos un pulsador o botón. Aquí veremos cómo hacer para utilizar correctamente sus señales. Primero, explicaremos qué son las resistencias pull-up y pull-down, montaremos un circuito eléctrico con un pulsador y una…

¿Cómo medir el valor de una resistencia con Arduino?
Medir el valor de una resistencia con Arduino

¿Cómo medir el valor de una resistencia con Arduino?

| Actualizado:
Comentarios: 0

¿Cuántas veces se nos han mezclado las resistencias y no sabemos su valor? Para eso vamos a construir un sencillo óhmetro para medir la resistencia.

Medir la inclinación con Arduino
Medir la inclinación con Arduino y el sensor SW-520D

Medir la inclinación con Arduino y el sensor SW-520D

| Actualizado:
Comentarios: 0

Realizamos un ejemplo básico, donde se puede apreciar que la lectura hecha por el sensor se recibe en un pin de entrada digital de la placa (hemos usado el nº 7). Material necesario: Arduino Uno o similar. Protoboard. Cables Sensor…

Robot Arduino controlado por un mando a distancia de infrarrojos
Robot Arduino dirigido con un mando infrarrojo

Robot Arduino controlado por un mando a distancia de infrarrojos

| Actualizado:
Comentarios: 0

El objetivo de este proyecto es controlar el movimiento de un robot Arduino con un mando a distancia, a través de una señal de infrarrojo.

Comentarios - 0

Deja un comentario

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