Que vamos a conseguir?
Un semaforo funcional que cicla por verde, amarillo y rojo como uno de verdad. El mejor: tu hijo puede construir el poste o la calle con LEGO.
Secuencia: Verde (3s) - Amarillo (1s) - Rojo (3s)
Lo que aprenderas:
- Controlar multiples LEDs con diferentes pines
- Crear secuencias de estados (maquina de estados)
- Usar constantes para tiempos configurables
- Crear funciones propias (apagarTodos)
Hardware necesario
Necesitamos 3 LEDs de diferentes colores. Cada uno con su resistencia protectora.
Diagrama de conexion
3 Por que usamos los pines 8, 9, 10?
Arduino tiene pines del 0 al 13 para senales digitales. Los pines 0 y 1 estan reservados para comunicacion serial (hablar con el ordenador), asi que es mejor no usarlos. Elegimos 8, 9, 10 porque estan juntos y son faciles de recordar: 8=Verde (pasa), 9=Amarillo (atencion), 10=Rojo (alto). Ademas, 9 y 10 son pines PWM (marcados con ~) por si mas adelante queremos hacer efectos de intensidad.
3 Por que 3 resistencias?
Cada LED necesita su propia resistencia de 220ohm. Si compartiesen una sola resistencia, cuando encendieras un LED los otros recibirian menos corriente y brillarian menos. Ademas, si se quema un LED, afectaria a los otros. Con resistencias individuales, cada LED es independiente.
Ideas para construir con LEGO
El nino construye la estructura mientras tu preparas el circuito:
Torre vertical con hueco para LEDs
Calles con pasos de peatones
Mini ciudad con coches esperando
Plataforma para el Arduino
El codigo explicado
Este programa introduce constantes para tiempos, multiples pines, y tu primera funcion propia.
// P1: Semaforo LEGO - EigenRobotics
const int LED_ROJO = 10;
const int LED_AMARILLO = 9;
const int LED_VERDE = 8;
// Tiempos en milisegundos
const int TIEMPO_VERDE = 3000; // 3 segundos
const int TIEMPO_AMARILLO = 1000; // 1 segundo
const int TIEMPO_ROJO = 3000; // 3 segundos
void setup() {
pinMode(LED_ROJO, OUTPUT);
pinMode(LED_AMARILLO, OUTPUT);
pinMode(LED_VERDE, OUTPUT);
// Apagar todos al inicio
apagarTodos();
}
void loop() {
// Verde
digitalWrite(LED_VERDE, HIGH);
delay(TIEMPO_VERDE);
digitalWrite(LED_VERDE, LOW);
// Amarillo
digitalWrite(LED_AMARILLO, HIGH);
delay(TIEMPO_AMARILLO);
digitalWrite(LED_AMARILLO, LOW);
// Rojo
digitalWrite(LED_ROJO, HIGH);
delay(TIEMPO_ROJO);
digitalWrite(LED_ROJO, LOW);
}
void apagarTodos() {
digitalWrite(LED_ROJO, LOW);
digitalWrite(LED_AMARILLO, LOW);
digitalWrite(LED_VERDE, LOW);
}
Explicacion linea por linea:
const int LED_ROJO = 10;
Definimos tres constantes para los pines. Usar nombres descriptivos como
LED_ROJO hace el codigo mucho mas facil de leer que escribir "10" por todas partes.
Si luego cambias el pin, solo modificas esta linea.
const int TIEMPO_VERDE = 3000;
Tambien definimos los tiempos como constantes. 3000 milisegundos = 3 segundos.
Si quieres cambiar la duracion del verde, solo cambias este numero.
Es como tener "perillas de ajuste" para tu programa.
pinMode(LED_ROJO, OUTPUT); (x3)
Configuramos los tres pines como salidas. Igual que en P0, pero ahora lo hacemos tres veces. Cada LED necesita su propia configuracion.
apagarTodos();
Llamamos a nuestra propia funcion. Esto asegura que al encender Arduino, todos los LEDs empiecen apagados. Es una buena practica: empezar desde un estado conocido.
La secuencia en loop()
El patron es siempre igual: encender - esperar - apagar. Primero verde (3s), luego amarillo (1s), luego rojo (3s). Cuando termina el rojo, el loop vuelve a empezar con el verde.
void apagarTodos() { ... }
Tu primera funcion propia. Agrupa tres instrucciones en una sola palabra.
Cuando escribes apagarTodos();, Arduino ejecuta las tres lineas de dentro.
Esto hace el codigo mas limpio y evita repetir lo mismo.
Conceptos clave:
Constantes con const
const int NOMBRE = valor; crea un valor que no cambia.
Es mejor que "numeros magicos" sueltos porque sabes que significa cada uno.
Multiples outputs
Puedes controlar tantos pines como quieras (Arduino UNO tiene 14 digitales).
Cada pinMode() y digitalWrite() es independiente.
Funciones propias
void nombreFuncion() { } agrupa instrucciones.
Puedes llamarla desde cualquier parte del codigo con nombreFuncion();
Secuencias de estados
El semaforo es una maquina de estados: Verde - Amarillo - Rojo - Verde... Cada estado tiene una accion (LED) y una duracion (delay).
Simulador interactivo
Prueba el semaforo sin hardware. Puedes ver los 3 LEDs cambiando de color.
Wokwi Simulator
Abrir en WokwiConfigurar el simulador
1. Copia el codigo del proyecto.
2. En Wokwi, haz clic en el boton + para anadir componentes.
3. Anade 3 LEDs (rojo, amarillo, verde) y 3 resistencias.
4. Conecta segun el diagrama: Pin 10-Rojo, Pin 9-Amarillo, Pin 8-Verde.
5. Dale a Play y observa la secuencia!
Paso a paso
Monta el semaforo en 8 pasos sencillos.
Prepara los LEDs
Identifica los 3 LEDs por su color. Recuerda: la pata larga es el positivo (+) y va hacia el pin de Arduino. La pata corta es el negativo (-) y va hacia GND.
Coloca las resistencias
Pon 3 resistencias de 220ohm en la breadboard. Cada una conectara un pin de Arduino con la pata larga de un LED.
Conecta el LED rojo
Pin 10 - resistencia - LED rojo (pata larga) - pata corta a linea GND.
Conecta el LED amarillo
Pin 9 - resistencia - LED amarillo (pata larga) - pata corta a linea GND.
Conecta el LED verde
Pin 8 - resistencia - LED verde (pata larga) - pata corta a linea GND.
Conecta GND
Un cable desde cualquier pin GND de Arduino a la linea de tierra (azul/negra) de la breadboard. Todos los LEDs comparten este GND comun.
Sube el codigo
Conecta Arduino al ordenador, abre Arduino IDE, pega el codigo, selecciona placa y puerto, y pulsa el boton de subir (flecha).
Observa el semaforo!
Deberia encenderse primero el verde (3s), luego amarillo (1s), luego rojo (3s), y repetir. Si no funciona, revisa las conexiones y la polaridad de los LEDs.
Experimentos
Modifica el codigo para crear variaciones del semaforo.
Cambia los tiempos
Modifica TIEMPO_VERDE a 5000 y TIEMPO_ROJO a 4000.
Observa como cambia el ritmo del semaforo.
Semaforo rapido
Pon todos los tiempos a 500 (medio segundo). Un semaforo loco que cambia muy rapido!
Modo noche
Crea un modo donde solo el amarillo parpadee:
digitalWrite(LED_AMARILLO, HIGH); delay(500); LOW; delay(500);
Amarillo parpadeante
Antes de cambiar a rojo, haz que el amarillo parpadee 3 veces.
Usa un bucle for.
Segundo semaforo
Anade 3 LEDs mas para un cruce. Cuando uno esta en verde, el otro debe estar en rojo. Simula una interseccion real!
Semaforo peatonal
Anade 2 LEDs (rojo/verde) para peatones. Cuando los coches tienen rojo, los peatones tienen verde.