Arduino - Semáforo
En este tutorial, vamos a aprender cómo usar Arduino para controlar el módulo de semáforo. En detalle, aprenderemos:
Cómo conectar el módulo de semáforo al Arduino
Cómo programar Arduino para controlar el módulo de semáforo RGB
Cómo programar Arduino para controlar el módulo de semáforo RGB sin usar la función delay()
Or you can buy the following kits:
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.
Un módulo de semáforo incluye 4 pines:
Pin GND: El pin de tierra, conecta este pin al GND del Arduino.
Pin R: El pin para controlar la luz roja, conecta este pin a una salida digital del Arduino.
Pin Y: El pin para controlar la luz amarilla, conecta este pin a una salida digital del Arduino.
Pin G: El pin para controlar la luz verde, conecta este pin a una salida digital del Arduino.

This image is created using Fritzing. Click to enlarge image
Configurar los pines de un Arduino en el modo de salida digital utilizando la función
pinMode()
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_YELLOW, OUTPUT);
pinMode(PIN_GREEN, OUTPUT);
Programa para encender la luz roja utilizando la función
digitalWrite():
digitalWrite(PIN_RED, HIGH);
digitalWrite(PIN_YELLOW, LOW);
digitalWrite(PIN_GREEN, LOW);
delay(RED_TIME);
#define PIN_RED 2
#define PIN_YELLOW 3
#define PIN_GREEN 4
#define RED_TIME 4000
#define YELLOW_TIME 4000
#define GREEN_TIME 4000
void setup() {
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_YELLOW, OUTPUT);
pinMode(PIN_GREEN, OUTPUT);
}
void loop() {
digitalWrite(PIN_RED, HIGH);
digitalWrite(PIN_YELLOW, LOW);
digitalWrite(PIN_GREEN, LOW);
delay(RED_TIME);
digitalWrite(PIN_RED, LOW);
digitalWrite(PIN_YELLOW, HIGH);
digitalWrite(PIN_GREEN, LOW);
delay(YELLOW_TIME);
digitalWrite(PIN_RED, LOW);
digitalWrite(PIN_YELLOW, LOW);
digitalWrite(PIN_GREEN, HIGH);
delay(GREEN_TIME);
}
Copia el código anterior y ábrelo con Arduino IDE
Haz clic en el botón Subir de Arduino IDE para cargar el código en Arduino
Revisa el módulo de semáforo
image source: diyables.io
Es importante señalar que el funcionamiento exacto de un semáforo puede variar dependiendo del diseño y la tecnología específicos utilizados en diferentes regiones e intersecciones. Los principios descritos anteriormente proporcionan una comprensión general de cómo funcionan los semáforos para gestionar el tráfico y mejorar la seguridad en las carreteras.
El código anterior demuestra el control individual de las luces. Ahora, vamos a mejorar el código para lograr una mayor optimización.
#define PIN_RED 2
#define PIN_YELLOW 3
#define PIN_GREEN 4
#define RED_TIME 2000
#define YELLOW_TIME 1000
#define GREEN_TIME 2000
#define RED 0
#define YELLOW 1
#define GREEN 2
const int pins[] = { PIN_RED, PIN_YELLOW, PIN_GREEN };
const int times[] = { RED_TIME, YELLOW_TIME, GREEN_TIME };
void setup() {
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_YELLOW, OUTPUT);
pinMode(PIN_GREEN, OUTPUT);
}
void loop() {
trafic_light_on(RED);
delay(times[RED]);
trafic_light_on(YELLOW);
delay(times[YELLOW]);
trafic_light_on(GREEN);
delay(times[GREEN]);
}
void trafic_light_on(int light) {
for (int i = RED; i <= GREEN; i++) {
if (i == light)
digitalWrite(pins[i], HIGH);
else
digitalWrite(pins[i], LOW);
}
}
#define PIN_RED 2
#define PIN_YELLOW 3
#define PIN_GREEN 4
#define RED_TIME 2000
#define YELLOW_TIME 1000
#define GREEN_TIME 2000
#define RED 0
#define YELLOW 1
#define GREEN 2
const int pins[] = {PIN_RED, PIN_YELLOW, PIN_GREEN};
const int times[] = {RED_TIME, YELLOW_TIME, GREEN_TIME};
void setup() {
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_YELLOW, OUTPUT);
pinMode(PIN_GREEN, OUTPUT);
}
void loop() {
for (int light = RED; light <= GREEN; light ++) {
trafic_light_on(light);
delay(times[light]);
}
}
void trafic_light_on(int light) {
for (int i = RED; i <= GREEN; i ++) {
if (i == light)
digitalWrite(pins[i], HIGH);
else
digitalWrite(pins[i], LOW);
}
}
#define PIN_RED 2
#define PIN_YELLOW 3
#define PIN_GREEN 4
#define RED_TIME 2000
#define YELLOW_TIME 1000
#define GREEN_TIME 2000
#define RED 0
#define YELLOW 1
#define GREEN 2
const int pins[] = { PIN_RED, PIN_YELLOW, PIN_GREEN };
const int times[] = { RED_TIME, YELLOW_TIME, GREEN_TIME };
unsigned long last_time = 0;
int light = RED;
void setup() {
pinMode(PIN_RED, OUTPUT);
pinMode(PIN_YELLOW, OUTPUT);
pinMode(PIN_GREEN, OUTPUT);
trafic_light_on(light);
last_time = millis();
}
void loop() {
if ((millis() - last_time) > times[light]) {
light++;
if (light >= 3)
light = RED;
trafic_light_on(light);
last_time = millis();
}
}
void trafic_light_on(int light) {
for (int i = RED; i <= GREEN; i++) {
if (i == light)
digitalWrite(pins[i], HIGH);
else
digitalWrite(pins[i], LOW);
}
}
Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.
※ NUESTROS MENSAJES
No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!