Proyecto 4 – Semáforo

Ya hemos encendido y pagado un LED en el ejercicio anterior, ya aprendimos como controlar el encendido y el apagado de un LED, ahora vamos a aumentar la apuesta a 3 LED, vamos a crear con nuestro Arduino un semáforo o algo parecido a uno.

Componentes

  • Arduino UNO o placa compatible
  • Protoboard o placa de pruebas
  • 3 LED, uno rojo, uno naranja y uno verde
  • 3 resistencias de 220Ω
  • Cables o Jumpers
Diagrama de conexiones para el semáforo con Arduino

Para lograr nuestro semáforo aquí veremos como van a ser las conexiones con el Arduino, en el diagrama podemos vemos como utilizamos los pines digitales 13, 10 y 6 para los ánodos de los LED y los cátodos (pin más corto) van a una resistencia de 220Ω cada uno y a la tierra.

Código

int rojo = 13;
int naranja = 10;
int verde = 6;

void setup()
{
  pinMode(naranja, OUTPUT);
  pinMode(rojo, OUTPUT);
  pinMode(verde, OUTPUT);
}

void loop()
{
  digitalWrite(rojo, HIGH);
  digitalWrite(naranja, LOW);
  digitalWrite(verde, LOW);
  delay(5000);

  digitalWrite(rojo, LOW);
  digitalWrite(naranja, HIGH);
  digitalWrite(verde, LOW);
  delay(1500);
  
  digitalWrite(rojo, LOW);
  digitalWrite(naranja, LOW);
  digitalWrite(verde, HIGH);
  delay(5000);


  digitalWrite(rojo, LOW);
  digitalWrite(naranja, HIGH);
  digitalWrite(verde, LOW);
  delay(1500);
}

Explicación del código

Vamos a revisar el código paso a paso, lo primero que vemos en este código es la declaración de las variables.

int rojo = 13;
int naranja = 10;
int verde = 6;

Se declaran tres variables de tipo entero, una para cada pin de los LED, el 13 para el pin rojo, el 10 para el pin naranja y el 6 para el verde. Esto es con el fin de utilizar el nombre de la variable en vez del numero del pin, esto nos facilita mucho en especial en códigos más complejo cuando cambiemos el uso de un pin, no tengamos que cambiar todo por todo el código el número del pin, sino solo en la variable.

Función setup()

Ahora vamos a ver el contenido de la función setup:

pinMode(naranja, OUTPUT);
pinMode(rojo, OUTPUT);
pinMode(verde, OUTPUT);

Con la función pinMode establecemos si un pin es de salida o entrada, el primer parámetro tiene el nombre de cada variable asociada el pin de un LED, por ejemplo pinMode(naranja, OUTPUT); donde establecemos que el pin 10 (naranja) es de salida, de igual forma el rojo y el verde.

Función loop()

Ahora llegamos a la función loop, donde lo dividiremos en 4 bloques

digitalWrite(rojo, HIGH);
digitalWrite(naranja, LOW);
digitalWrite(verde, LOW);
delay(5000);

Ahora enviamos un alto (HIGH) al LED rojo, lo que hace que se encienda, luego vemos que al LED naranja y al verde les enviamos un bajo (LOW), lo cual mantiene estos dos LED apagados, seguido a esto hay una pausa de 5 segundos delay(5000);, entonces veremos solo al LED rojo encendido por 5 segundos.

digitalWrite(rojo, LOW);
digitalWrite(naranja, HIGH);
digitalWrite(verde, LOW);
delay(1500);

En el bloque anterior vemos que ahora se le envía un alto al LED naranja y bajo a los LED rojo y verde, por un lapso de un segundo y medio delay(1500).

digitalWrite(rojo, LOW);
digitalWrite(naranja, LOW);
digitalWrite(verde, HIGH);
delay(5000);

En este bloque veremos que se envía un alto al led verde y bajo a los LED rojo y naranja, esto por un lapso de 5 segundos.

digitalWrite(rojo, LOW);
digitalWrite(naranja, HIGH);
digitalWrite(verde, LOW);
delay(1500);

Finalmente en este bloque vemos que ahora se le envía un alto al LED naranja y bajo a los LED rojo y verde, por un lapso de un segundo y medio delay(1500).

Resultado

Al encender nuestro Arduino tenemos nuestro primer semáforo, entonces veremos como se prenderá sólo el LED rojo por 5 segundos, luego se apaga y se encenderá el naranja por un segundo y medio, se apagará y se encenderá el verde por 5 segundos y por último se encenderá el LED naranja por un segundo y medio, antes de volver a comenzar todo el ciclo nuevamente.

Código 2

int rojo = 13;
int naranja = 10;
int verde = 6;

void setup()
{
  pinMode(naranja, OUTPUT);
  pinMode(rojo, OUTPUT);
  pinMode(verde, OUTPUT);

}

void loop()
{
  digitalWrite(rojo, HIGH);//// Prende el LED verde
  delay(5000);// espera 5 segundos
  digitalWrite(rojo, LOW); // Apaga el LED verde
  cambio();
  delay(500); //espera 0.5 segundos
  digitalWrite(verde, HIGH);// Prende el LED rojo
  delay(5000);// espera 5 segundos
  digitalWrite(verde, LOW);// Apaga el LED rojo
  cambio();
}

void cambio()
{
  for(int i=0;i<3;i++)// parpadea 3 veces
  {
    delay(500);// espera 0.5 segundos
    digitalWrite(naranja, HIGH);// Prende el LED amarillo
    delay(500);// espera 0.5 segundos
    digitalWrite(naranja, LOW);// apaga el  LED amarillo
  }
}

Explicación del código

Este proyecto se puede escribir de muchas formas y seguramente algunos de ustedes tienen códigos diferentes (si quieren compartirlos en los comentarios pueden hacerlo), vamos a ver otro código en el cual el cambio de pare/siga, es decir la luz naranja la ponemos que sea intermitente tres veces antes de cambiar y la hemos hecho como una función adicional.

La declaración de las variables es igual que el ejemplo anterior, lo mismo para el setup. Pero vamos a saltarnos la función loop por un momento e irnos a analizar la función cambio() que será llamada dentro del loop.

for(int i=0;i<3;i++)
  {
    delay(500);
    digitalWrite(naranja, HIGH);
    delay(500);
    digitalWrite(naranja, LOW);
  }

Comenzamos con un ciclo for que se va a repetir tres veces y dentro de este for vemos que hay una pausa de medio segundo delay(500), luego se prende el led naranja digitalWrite(naranja, HIGH), una pausa de medio segundo delay(500), y se apaga el LED naranja digitalWrite(naranja, LOW).

Función loop()

Ahora vamos a analizar la función loop:

  digitalWrite(rojo, HIGH);
  delay(5000);
  digitalWrite(rojo, LOW); 
  cambio();
  delay(500); 
  digitalWrite(verde, HIGH);
  delay(5000);
  digitalWrite(verde, LOW);
  cambio();

Tengamos en cuenta que el al inicializar en el setup los pines para los LED ellos quedan en estado LOW, por lo que al alimentar nuestro Arduino todos ellos estarán apagado hasta que les enviemos un HIGH. Entonces encendemos nuestro primer LED, el rojo , digitalWrite(rojo, HIGH); y hacemos una pausa de 5 segundos delay(5000); para luego apagarlo digitalWrite(rojo, LOW).
Luego llamamos una función cambio(), la cual como ya vimos hace parpadear el LED naranja tres veces.
Acto seguido se enciende el LED verde digitalWrite(verde, HIGH) por 5 segundos delay(5000) y luego se apaga digitalWrite(verde, LOW).
De nuevo llamamos la función cambio(), que como sabemos hace parpadear tres veces el LED naranja. Y todo estos se volverá a repetir.

Resultado

En este segundo ejemplo de semáforo con nuestro Arduino veremos que el LED rojo se prende por 5 segundos antes de apagarse, luego el LED naranja parpadea 3 veces en un intervalo de 3 segundos, acto seguido se prende el LED verde por 5 segundo antes de apagarse y volver a hacer parpadear el led naranja 3 veces, esto se seguirá repitiendo una y otra vez.

Deja un comentario

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.