Arduino Nano ESP32 - Semáforo

En este tutorial, exploraremos cómo utilizar el Arduino Nano ESP32 para controlar un módulo de semáforo. En detalle, aprenderemos:

Hardware Requerido

1×Arduino Nano ESP32
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×Módulo de Semáforo
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para Arduino Nano
1×(Recomendado) Placa de Expansión Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentación para Arduino Nano ESP32

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
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.

Acerca del Módulo de Semáforo

Diagrama de pines

Un módulo de semáforo incluye 4 pines:

  • Pin GND: El pin de tierra; conecta este pin al GND del Arduino Nano ESP32.
  • Pin R: El pin para controlar la luz roja; conecta este pin a una salida digital del Arduino Nano ESP32.
  • Pin Y: El pin para controlar la luz amarilla; conecta este pin a una salida digital del Arduino Nano ESP32.
  • Pin G: El pin para controlar la luz verde; conecta este pin a una salida digital del Arduino Nano ESP32.
Pinout del semáforo

Cómo funciona

Diagrama de Cableado

Diagrama de cableado de semáforo para Arduino Nano ESP32

This image is created using Fritzing. Click to enlarge image

Cómo programar para el módulo de semáforo

  • Configurar los pines de un ESP32 en 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 usando la función digitalWrite():
digitalWrite(PIN_RED, HIGH); // turn on RED digitalWrite(PIN_YELLOW, LOW); // digitalWrite(PIN_GREEN, LOW); delay(RED_TIME); // keep red led on during a period of time

Código de Arduino Nano ESP32

/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-traffic-light */ #define PIN_RED D3 // The Arduino Nano ESP32 pin connected to R pin of traffic light module #define PIN_YELLOW D4 // The Arduino Nano ESP32 pin connected to Y pin of traffic light module #define PIN_GREEN D5 // The Arduino Nano ESP32 pin connected to G pin of traffic light module #define RED_TIME 4000 // RED time in millisecond #define YELLOW_TIME 4000 // YELLOW time in millisecond #define GREEN_TIME 4000 // GREEN time in millisecond void setup() { pinMode(PIN_RED, OUTPUT); pinMode(PIN_YELLOW, OUTPUT); pinMode(PIN_GREEN, OUTPUT); } // The loop function repeats indefinitely void loop() { // red light on digitalWrite(PIN_RED, HIGH); // turn on digitalWrite(PIN_YELLOW, LOW); // turn off digitalWrite(PIN_GREEN, LOW); // turn off delay(RED_TIME); // keep red light on during a period of time // yellow light on digitalWrite(PIN_RED, LOW); // turn off digitalWrite(PIN_YELLOW, HIGH); // turn on digitalWrite(PIN_GREEN, LOW); // turn off delay(YELLOW_TIME); // keep yellow light on during a period of time // green light on digitalWrite(PIN_RED, LOW); // turn off digitalWrite(PIN_YELLOW, LOW); // turn off digitalWrite(PIN_GREEN, HIGH); // turn on delay(GREEN_TIME); // keep green light on during a period of time }

Pasos R\u00e1pidos

Para empezar con Arduino Nano ESP32, siga estos pasos:

  • Si eres nuevo en Arduino Nano ESP32, consulta el tutorial sobre cómo configurar el entorno para Arduino Nano ESP32 en el IDE de Arduino.
  • Conecta los componentes de acuerdo con el diagrama proporcionado.
  • Conecta la placa Arduino Nano ESP32 a tu ordenador mediante un Cable USB.
  • Abre el IDE de Arduino en tu ordenador.
  • Selecciona la placa Arduino Nano ESP32 y su puerto COM correspondiente.
  • Copia el código anterior y ábrelo con el IDE de Arduino.
  • Haz clic en el botón Subir en el IDE de Arduino para cargar el código en Arduino Nano ESP32.
  • Consulta el módulo de semáforo.

Es importante señalar que el funcionamiento exacto de un semáforo puede variar dependiendo del diseño específico y de la tecnología utilizada en diferentes regiones e intersecciones. Los principios descritos arriba 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 la luz. Ahora, vamos a mejorar el código para una mejor optimización.

Optimización de código para Arduino Nano ESP32

  • Mejoremos el código implementando una función para el control de luces.
/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-traffic-light */ #define PIN_RED D3 // The Arduino Nano ESP32 pin connected to R pin of traffic light module #define PIN_YELLOW D4 // The Arduino Nano ESP32 pin connected to Y pin of traffic light module #define PIN_GREEN D5 // The Arduino Nano ESP32 pin connected to G pin of traffic light module #define RED_TIME 2000 // RED time in millisecond #define YELLOW_TIME 1000 // YELLOW time in millisecond #define GREEN_TIME 2000 // GREEN time in millisecond #define RED 0 // Index in array #define YELLOW 1 // Index in array #define GREEN 2 // Index in array 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); } // The loop function repeats indefinitely void loop() { // red light on trafic_light_on(RED); delay(times[RED]); // keep red light on during a period of time // yellow light on trafic_light_on(YELLOW); delay(times[YELLOW]); // keep yellow light on during a period of time // green light on trafic_light_on(GREEN); delay(times[GREEN]); // keep green light on during a period of time } void trafic_light_on(int light) { for (int i = RED; i <= GREEN; i++) { if (i == light) digitalWrite(pins[i], HIGH); // turn on else digitalWrite(pins[i], LOW); // turn off } }
  • Vamos a mejorar el código utilizando un bucle for.
/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-traffic-light */ #define PIN_RED D3 // The Arduino Nano ESP32 pin connected to R pin of traffic light module #define PIN_YELLOW D4 // The Arduino Nano ESP32 pin connected to Y pin of traffic light module #define PIN_GREEN D5 // The Arduino Nano ESP32 pin connected to G pin of traffic light module #define RED_TIME 2000 // RED time in millisecond #define YELLOW_TIME 1000 // YELLOW time in millisecond #define GREEN_TIME 2000 // GREEN time in millisecond #define RED 0 // Index in array #define YELLOW 1 // Index in array #define GREEN 2 // Index in array 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); } // The loop function repeats indefinitely void loop() { for (int light = RED; light <= GREEN; light ++) { trafic_light_on(light); delay(times[light]); // keep light on during a period of time } } void trafic_light_on(int light) { for (int i = RED; i <= GREEN; i ++) { if (i == light) digitalWrite(pins[i], HIGH); // turn on else digitalWrite(pins[i], LOW); // turn off } }
  • Vamos a mejorar el código usando la función millis() en lugar de delay().
/* * Este código de Arduino Nano ESP32 fue desarrollado por es.newbiely.com * Este código de Arduino Nano ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano-esp32/arduino-nano-esp32-traffic-light */ #define PIN_RED D3 // The Arduino Nano ESP32 pin connected to R pin of traffic light module #define PIN_YELLOW D4 // The Arduino Nano ESP32 pin connected to Y pin of traffic light module #define PIN_GREEN D5 // The Arduino Nano ESP32 pin connected to G pin of traffic light module #define RED_TIME 2000 // RED time in millisecond #define YELLOW_TIME 1000 // YELLOW time in millisecond #define GREEN_TIME 2000 // GREEN time in millisecond #define RED 0 // Index in array #define YELLOW 1 // Index in array #define GREEN 2 // Index in array 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; // start with RED light void setup() { pinMode(PIN_RED, OUTPUT); pinMode(PIN_YELLOW, OUTPUT); pinMode(PIN_GREEN, OUTPUT); trafic_light_on(light); last_time = millis(); } // The loop function repeats indefinitely void loop() { if ((millis() - last_time) > times[light]) { light++; if (light >= 3) light = RED; // new circle trafic_light_on(light); last_time = millis(); } // TO DO: your other code } void trafic_light_on(int light) { for (int i = RED; i <= GREEN; i++) { if (i == light) digitalWrite(pins[i], HIGH); // turn on else digitalWrite(pins[i], LOW); // turn off } }

Video Tutorial

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.

Referencias de funciones

※ 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!