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.
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: 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í.