En este tutorial realizaremos la simulación de la secuencia de luces de un semáforo con Arduino, lo que nos servirá para practicar con las sentencias de salidas digitales y retardos.
Este proyecto es clásico durante la iniciación en Arduino y los microcontroladores en general, por lo que no puede faltar en nuestra colección de tutoriales relacionados con Arduino.
¿Cómo hacer un semáforo con Arduino?
Armaremos el circuito mostrado más abajo en esta página y utilizaremos 3 pines digitales de la tarjeta Arduino para general la siguiente secuencia de luces:
- LED verde enciende por 5 segundos
- Verde parpadea 3 veces y se apaga
- LED Amarillo enciende 2 segundos y luego se apaga
- LED rojo enciende por 5 segundos y luego se apaga
- Una vez terminada esta secuencia todo debe volver a repetirse
Basados en este enunciado realizaremos la programación correspondiente desde el Arduino IDE.
Materiales requeridos
- Arduino Uno R3 (o tarjeta compatible con Arduino Uno R3)
- Protoboard de 400 puntos
- 3 resistencias de 330 ohms 1/4 W
- LED difuso 5 mm o LED ultra brillante 5mm.
- Verde
- Amarillo
- Rojo
- Cables dupont
- Cable USB para arduino tipo A – B
De manera alternativa podemos utilizar el módulo de semáforo con LEDs que facilita la conexión del circuito al incluir las resistencias necesarias dentro del circuito impreso.
Y opcional Fuente de alimentación eliminador adaptador AC-DC 1A (5V – 9V), para alimentar nuestra placa Arduino sin conexión USB a la computadora.
Circuito para semáforo con Arduino
Podemos utilizar el siguiente diagrama para realizar el armado de el circuito para semáforo con Arduino en un protoboard.

También podemos colocar el módulo de semáforo miniatura con LEDs directamente en los pines GND, D13, D12 y D11 tal como se muestra en la siguiente imagen:
Las resistencias en este caso están incluidas dentro del módulo de semáforo.
Programando el código para semáforo con Arduino
Utilizando el planteamiento que realizamos más arriba en esta página traduciremos la secuencia al código que se muestra a continuación.
Hemos comentado el código bastante para que sea fácil de entender.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | /** --> CURSO BASICO DE ARDUINO CON GROVE BEGINNER KIT <-- --> MATERIAL DE APOYO <-- Potenciado por: Geek Factory - "Dale vuelo a tus proyectos" www.geekfactory.mx CONSULTA EL ARCHIVO LICENCIA.TXT PARA CONOCER MÁS SOBRE LOS DERECHOS DE DISTRIBUCIÓN DE ESTE MATERIAL. PUBLICADO BAJO LICENCIA ATTRIBUTION-NONCOMMERCIAL-SHAREALIKE 4.0 INTERNATIONAL (CC BY-NC-SA 4.0). PRACTICA 2: Semaforo Simulación de un semáforo. Se encienden 3 leds en secuencia tal cual ocurre en un semáforo en la calle. Se utilizan las instrucciones básicas de configuración de puertos y control de salidas así como las instrucciones de retardos (delay). */ // declaramos una variable para guardar el numero de pin en donde tenemos conectado cada LED const int ledverde = 11; const int ledamarillo = 12; const int ledrojo = 13; /** Función setup: se ejecuta una vez cuando encendemos el arduino */ void setup() { // configurar pines donde se conectan los LED como salidas pinMode(ledverde, OUTPUT); pinMode(ledamarillo, OUTPUT); pinMode(ledrojo, OUTPUT); // deseamos que al iniciar el programa esten apagados todos los LED digitalWrite(ledverde, LOW); digitalWrite(ledamarillo, LOW); digitalWrite(ledrojo, LOW); } /** Función loop: se ejecuta continuamente mientras el arduino permanece encendido */ void loop() { // Encender LED verde 5 segundos digitalWrite(ledverde, HIGH); delay(5000); // Parpadea 3 veces el LED verde digitalWrite(ledverde, LOW); delay(500); digitalWrite(ledverde, HIGH); delay(500); digitalWrite(ledverde, LOW); delay(500); digitalWrite(ledverde, HIGH); delay(500); digitalWrite(ledverde, LOW); delay(500); digitalWrite(ledverde, HIGH); delay(500); digitalWrite(ledverde, LOW); // Encender LED amarillo 2 segundos y luego apagarlo digitalWrite(ledamarillo, HIGH); delay(2000); digitalWrite(ledamarillo, LOW); // Encender LED rojo 5 segundos y luego apagarlo digitalWrite(ledrojo, HIGH); delay(5000); digitalWrite(ledrojo, LOW); } |
Video tutorial
Puedes ver nuestro video tutorial en nuestras redes sociales y canal de youtube.
Información relacionada
Conclusión
Esta sencilla práctica nos permite ejercitar nuestras habilidades para manipular salidas digitales mediante las funciones pinMode() y digitalWrite(). También sirve como ejercicio para trabajar con retardos en la ejecución del programa usando la función delay().
Reforzamos nuestro conocimiento de las funciones setup() y loop(). Observamos que el código en la primera solamente se ejecuta una vez al encender el Arduino o reiniciarlo; Mientras que loop() se ejecuta una y otra vez mientras el Arduino permanece encendido.
Basados en este código podemos crear secuencias de luces a nuestro gusto modificando los tiempos y combinaciones de pines a nuestro gusto.