En esta práctica aprenderás a construir y programar un semáforo con Arduino UNO utilizando tres LEDs: rojo, amarillo y verde.
Este proyecto es ideal para comenzar a trabajar con las salidas digitales de Arduino, ya que permite comprender de manera visual cómo funcionan instrucciones fundamentales como pinMode(), digitalWrite() y delay().
Al finalizar tendrás un semáforo que realizará automáticamente la siguiente secuencia:
🔴 Rojo → 🟢 Verde → 🟡 Amarillo → 🔴 Rojo
Además de construir el circuito, analizaremos el programa paso a paso para comprender qué está haciendo Arduino en cada momento.
¿Qué aprenderás?
Con esta práctica aprenderás a:
- Utilizar pines digitales como salidas.
- Encender y apagar LEDs mediante programación.
- Utilizar
HIGHyLOW. - Controlar tiempos utilizando
delay(). - Comprender la estructura
setup()yloop(). - Construir un circuito sencillo en protoboard.
- Crear una secuencia automática utilizando Arduino UNO.
Materiales
Para realizar el semáforo necesitarás:
- 1 Arduino UNO
- 1 protoboard
- 1 LED rojo
- 1 LED amarillo
- 1 LED verde
- 3 resistencias de 220 Ω o 330 Ω
- Cables jumper
- Cable USB
- Computadora con Arduino IDE
También puedes realizar primero la simulación utilizando Tinkercad Circuits.
Conexiones del semáforo
Utilizaremos tres salidas digitales del Arduino UNO.
| Componente | Pin de Arduino |
|---|---|
| 🟢 LED verde | 8 |
| 🟡 LED amarillo | 9 |
| 🔴 LED rojo | 10 |
Cada LED debe utilizar su propia resistencia limitadora de corriente.
Conexión de los LEDs
El LED verde se conecta al pin digital 8.
El LED amarillo se conecta al pin digital 9.
El LED rojo se conecta al pin digital 10.
La terminal negativa de cada LED se conecta a GND a través de la línea negativa del protoboard.
Recuerda: la pata larga del LED corresponde normalmente al ánodo (+) y la pata corta al cátodo (−).
Código del semáforo con Arduino
Carga el siguiente programa en tu Arduino UNO:
int ledVerde = 8;
int ledAmarillo = 9;
int ledRojo = 10;
void setup() {
pinMode(ledVerde, OUTPUT);
pinMode(ledAmarillo, OUTPUT);
pinMode(ledRojo, OUTPUT);
}
void loop() {
// Luz roja
digitalWrite(ledRojo, HIGH);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledVerde, LOW);
delay(5000);
// Luz verde
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledVerde, HIGH);
delay(5000);
// Luz amarilla
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, HIGH);
digitalWrite(ledVerde, LOW);
delay(2000);
}
Explicación del código paso a paso
No se trata solamente de copiar el programa. Lo importante es comprender qué le estamos ordenando hacer al Arduino.
1. Declaramos los pines
int ledVerde = 8;
int ledAmarillo = 9;
int ledRojo = 10;
Estas tres líneas crean variables que representan los LEDs.
De esta manera podemos utilizar nombres fáciles de recordar en lugar de escribir continuamente los números de los pines.
Por ejemplo:
digitalWrite(ledVerde, HIGH);
es mucho más fácil de interpretar que:
digitalWrite(8, HIGH);
2. Configuramos las salidas con setup()
La función setup() se ejecuta una sola vez cuando encendemos o reiniciamos el Arduino.
void setup() {
pinMode(ledVerde, OUTPUT);
pinMode(ledAmarillo, OUTPUT);
pinMode(ledRojo, OUTPUT);
}
La instrucción pinMode() permite configurar cómo se utilizará un pin.
En este proyecto necesitamos que los pines 8, 9 y 10 envíen señales hacia los LEDs, por lo que los configuramos como:
OUTPUT
Es decir, como salidas.
3. La función loop()
Después de ejecutar setup(), Arduino entra en:
void loop()
Todo lo que se encuentra dentro de esta función se repite continuamente mientras el Arduino permanezca encendido.
Gracias a esto podemos crear la secuencia automática de nuestro semáforo.
🔴 Primera etapa: luz roja
digitalWrite(ledRojo, HIGH);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledVerde, LOW);
delay(5000);
HIGH significa que enviamos una señal para encender el LED rojo.
Los LEDs amarillo y verde permanecen apagados utilizando LOW.
Después encontramos:
delay(5000);
Arduino utiliza milisegundos para medir el tiempo.
Por lo tanto:
5000 ms = 5 segundos
El LED rojo permanecerá encendido durante 5 segundos.
🟢 Segunda etapa: luz verde
Después Arduino ejecuta:
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledVerde, HIGH);
delay(5000);
Ahora apagamos el rojo y encendemos el verde.
El LED verde permanece encendido durante:
5000 ms = 5 segundos
🟡 Tercera etapa: luz amarilla
Finalmente ejecutamos:
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, HIGH);
digitalWrite(ledVerde, LOW);
delay(2000);
El LED amarillo permanece encendido durante:
2000 ms = 2 segundos
Al terminar esos dos segundos se llega al final de loop().
Arduino vuelve automáticamente al principio y comienza nuevamente con la luz roja.
Por eso obtenemos continuamente:
🔴 Rojo — 5 segundos
🟢 Verde — 5 segundos
🟡 Amarillo — 2 segundos
🔁 La secuencia vuelve a comenzar
¿Qué significan HIGH y LOW?
En este proyecto utilizamos constantemente dos palabras:
HIGH
LOW
De manera sencilla podemos interpretarlas así:
HIGH → encendido
LOW → apagado
Por ejemplo:
digitalWrite(ledRojo, HIGH);
enciende el LED rojo.
Mientras que:
digitalWrite(ledRojo, LOW);
lo apaga.
¿Qué hace delay()?
La función:
delay();
hace que Arduino espere determinado tiempo antes de continuar con la siguiente instrucción.
El tiempo se escribe en milisegundos.
Algunos ejemplos:
delay(1000); // 1 segundo
delay(2000); // 2 segundos
delay(5000); // 5 segundos
Puedes modificar estos valores y observar cómo cambia el funcionamiento de tu semáforo.
Video: Semáforo con Arduino UNO paso a paso
En el siguiente video puedes observar el armado del circuito, las conexiones y la programación del semáforo paso a paso.
Te recomiendo primero observar el funcionamiento completo y después realizar el circuito siguiendo las conexiones y el código de esta práctica.
Simulación en Tinkercad
Antes de construir físicamente el circuito también puedes simularlo en Tinkercad Circuits.
La simulación es muy útil para comprobar:
- La posición correcta de los LEDs.
- Las conexiones del protoboard.
- Los pines 8, 9 y 10.
- La polaridad de los LEDs.
- El funcionamiento del código.
Una vez que la simulación funcione correctamente, puedes construir el circuito físico.

Errores comunes
Si el semáforo no funciona, revisa lo siguiente.
El LED no enciende
Comprueba la polaridad del LED. Si está conectado al revés, no encenderá.
Los colores encienden en un orden diferente
Comprueba que las conexiones coincidan con el programa:
- Verde → pin 8
- Amarillo → pin 9
- Rojo → pin 10
Todos los LEDs permanecen apagados
Revisa la conexión a GND y verifica que hayas seleccionado correctamente la placa y el puerto en Arduino IDE.
Un LED permanece encendido cuando debería apagarse
Comprueba las instrucciones HIGH y LOW correspondientes a esa etapa del programa.
🚦 Reto: haz parpadear el LED amarillo
Cuando tu semáforo básico funcione correctamente, intenta modificar el programa.
El reto consiste en hacer que el LED amarillo parpadee antes de regresar al rojo.
Por ejemplo:
🟢 Verde → 🟡 amarillo parpadeando → 🔴 rojo
Para conseguirlo tendrás que encender y apagar varias veces el LED amarillo utilizando digitalWrite() y delay().
Si ya conoces los ciclos de programación, también puedes investigar cómo hacerlo utilizando un ciclo for.
Preguntas de repaso
- ¿Qué función cumple
pinMode()? - ¿Qué significa configurar un pin como
OUTPUT? - ¿Qué diferencia existe entre
HIGHyLOW? - ¿Para qué utilizamos
digitalWrite()? - ¿En qué unidad trabaja la función
delay()? - ¿Cuántos milisegundos equivalen a 5 segundos?
- ¿Qué LED está conectado al pin 8?
- ¿Qué LED está conectado al pin 9?
- ¿Qué LED está conectado al pin 10?
- ¿Por qué la secuencia del semáforo se repite continuamente?
Conclusión
El semáforo con Arduino UNO es una práctica sencilla, pero permite aprender varios de los conceptos fundamentales de programación y electrónica que utilizaremos en proyectos posteriores.
Con solamente tres LEDs aprendimos a utilizar:
pinMode()OUTPUTdigitalWrite()HIGHLOWdelay()setup()loop()
Dominar estas instrucciones será importante para avanzar hacia proyectos con pulsadores, sensores, motores y sistemas de automatización.
Lo más importante es experimentar: cambia los tiempos, modifica la secuencia y observa cómo responde Arduino.
Profe Juan de Dios
Arduino · Electrónica · Robótica
profejuandedios.com
