Vamos a simular un semáforo en Arduino usando 3 leds de color rojo, amarillo y verde. También vamos a usar resistencias para evitar desgastar a los mismos, y obviamente código Arduino para encenderlos y apagarlos.

Lo que repasaremos con esta práctica es:

pinMode - Para establecer si un pin será de salida o entrada

digitalWrite - Apagar o encender un LED con Arduino

Semáforo simple con Arduino

El circuito

Primero que nada, veamos el circuito. No lo hice con Fritzing, sino con Tinkercad; pues esta última herramienta me ayuda a simular además de diseñar.

1.1 Semáforo simple

Utilizamos 3 resistencias de 220 ohms (puedes poner una de hasta 47 pero se disminuiría el tiempo de vida de los leds) y también una resistencia mayor.

Cada led está conectado a una resistencia y cada resistencia a su vez está conectada a una salida del Arduino (7, 8 y 9). El cátodo de los 3 leds va a tierra.

Código de semáforo

Para encender un led usamos digitalWrite(numeroDePin, HIGH) y para apagarlo usamos digitalWrite(numeroDePin, LOW).

He puesto este comportamiento dentro de la función cambiarA, que apaga el anterior y enciende el nuevo.

/*
  Prueba 1: Semáforo simple
  INSTRUCCIONES: Realizar un sketch en Arduino que permita
  encender tres LED’s con la lógica de funcionamiento de un
  semáforo simple. El proceso inicia con el encendido del VERDE.
  
  @author parzibyte
  Visita: https://parzibyte.me/blog/
*/

int ledRojo = 7,
    ledAmarillo = 8,
    ledVerde = 9,
    SEGUNDOS_DE_ESPERA_VERDE_Y_ROJO = 5 * 1000, // En mi caso puse que el verde y rojo duren 10 segundos (10,000 milisegundos)
    SEGUNDOS_DE_ESPERA_AMARILLO = 2 * 1000,      // En mi caso puse que el amarillo dure 2 segundos (2,000 milisegundos)
    LED_ACTUAL = 0; // Por defecto no hay led encendido

void setup() {
  /*
    Establecemos como salida los tres leds
  */
  pinMode(ledRojo, OUTPUT);
  pinMode(ledAmarillo, OUTPUT);
  pinMode(ledVerde, OUTPUT);
}

void loop() {
  cambiaA(ledVerde);
  delay(SEGUNDOS_DE_ESPERA_VERDE_Y_ROJO);
  cambiaA(ledAmarillo);
  delay(SEGUNDOS_DE_ESPERA_AMARILLO);
  cambiaA(ledRojo);
  delay(SEGUNDOS_DE_ESPERA_VERDE_Y_ROJO);
}

void cambiaA(int nuevoLed) {
  /*
    Función ayudante que apaga el led y enciende el nuevo,
    además de asignar a LED_ACTUAL el valor del (valga la redundancia)
    led actual
  */
  if(LED_ACTUAL != 0) digitalWrite(LED_ACTUAL, LOW);
  LED_ACTUAL = nuevoLed;
  digitalWrite(LED_ACTUAL, HIGH);
}

Para simular el semáforo el algoritmo es sencillo y va dentro del loop. Primero encendemos el led verde, esperamos 5 segundos, cambiamos a amarillo, esperamos 2 segundos, cambiamos a rojo, esperamos 5 segundos y el ciclo se repite.

Si quieres puedes simular el circuito haciendo click aquí.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto