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

Reloj con Arduino
Montar un reloj con Arduino, el módulo RTC DS3231 y mostrarlo en una pantalla LCD

Montar un reloj con Arduino, el módulo RTC DS3231 y mostrarlo en una pantalla LCD

| Actualizado:
Comentarios: 0

Con este proyecto podremos regular la fecha y la hora actual. El módulo RTC DS3231 cuenta con una pila que en el caso de que se corte la fuente de alimentación, permitirá al reloj seguir guardando internamente la fecha y…

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…

Medir el voltaje de una pila con Arduino

Medir el voltaje de una pila con Arduino

| Actualizado:
Comentarios: 1

Es habitual que tengamos por casa un montón de pilas que, en ocasiones, no sabemos si están cargadas o se han gastado. Vamos a realizar un medidor de carga utilizando la placa de Arduino. El máximo que podemos medir es…

Control Remoto en Arduino
Control Remoto en Arduino con la librería IRremote

Control Remoto en Arduino con la librería IRremote

| Actualizado:
Comentarios: 0

¿Qué te parece utilizar un mando para apagar o encender la luz? En este post vamos a utilizar un mando a distancia y un sensor infrarrojo con el que encender o apagar un led. Son elementos que podrás aplicar en…

Comentarios - 0

Deja un comentario

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