Nivel 1 - Outputs

P1: SEMAFORO

Un semaforo de verdad con 3 LEDs. Tu hijo construye el poste con LEGO, tu programas la secuencia. Primer proyecto donde controlamos multiples salidas.

30
Minutos
7
Componentes
68
Lineas de codigo
01

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:

  • 1 Controlar multiples LEDs con diferentes pines
  • 2 Crear secuencias de estados (maquina de estados)
  • 3 Usar constantes para tiempos configurables
  • 4 Crear funciones propias (apagarTodos)
02

Hardware necesario

Necesitamos 3 LEDs de diferentes colores. Cada uno con su resistencia protectora.

Arduino UNO
El cerebro del semaforo
LED Rojo
Pin 10 - ALTO
LED Amarillo
Pin 9 - PRECAUCION
LED Verde
Pin 8 - PASA
3x Resistencia 220ohm
Una por cada LED
Cables
Minimo 8 cables

Diagrama de conexion

ARDUINO UNO 10 9 8 GND 220ohm 220ohm 220ohm SEMAFORO R A V GND Rojo: Pin 10 Amarillo: Pin 9 Verde: Pin 8 Todos a GND

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:

Poste

Torre vertical con hueco para LEDs

Cruce

Calles con pasos de peatones

Ciudad

Mini ciudad con coches esperando

Base

Plataforma para el Arduino

03

El codigo explicado

Este programa introduce constantes para tiempos, multiples pines, y tu primera funcion propia.

p1_semaforo.ino
// 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:

1

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.

2

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.

3

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.

4

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.

5

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.

6

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).

04

Simulador interactivo

Prueba el semaforo sin hardware. Puedes ver los 3 LEDs cambiando de color.

Wokwi Simulator

Abrir en Wokwi

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

05

Paso a paso

Monta el semaforo en 8 pasos sencillos.

1

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.

2

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.

Tip: Las resistencias no tienen polaridad. Da igual que lado va donde.
3

Conecta el LED rojo

Pin 10 - resistencia - LED rojo (pata larga) - pata corta a linea GND.

4

Conecta el LED amarillo

Pin 9 - resistencia - LED amarillo (pata larga) - pata corta a linea GND.

5

Conecta el LED verde

Pin 8 - resistencia - LED verde (pata larga) - pata corta a linea GND.

6

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.

7

Sube el codigo

Conecta Arduino al ordenador, abre Arduino IDE, pega el codigo, selecciona placa y puerto, y pulsa el boton de subir (flecha).

8

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.

06

Experimentos

Modifica el codigo para crear variaciones del semaforo.

Facil

Cambia los tiempos

Modifica TIEMPO_VERDE a 5000 y TIEMPO_ROJO a 4000. Observa como cambia el ritmo del semaforo.

Facil

Semaforo rapido

Pon todos los tiempos a 500 (medio segundo). Un semaforo loco que cambia muy rapido!

Medio

Modo noche

Crea un modo donde solo el amarillo parpadee: digitalWrite(LED_AMARILLO, HIGH); delay(500); LOW; delay(500);

Medio

Amarillo parpadeante

Antes de cambiar a rojo, haz que el amarillo parpadee 3 veces. Usa un bucle for.

Desafio

Segundo semaforo

Anade 3 LEDs mas para un cruce. Cuando uno esta en verde, el otro debe estar en rojo. Simula una interseccion real!

Desafio

Semaforo peatonal

Anade 2 LEDs (rojo/verde) para peatones. Cuando los coches tienen rojo, los peatones tienen verde.