En el ejercicio anterior aprendimos a controlar un solo pin GPIO para encender y apagar un LED. Ese ejercicio introdujo el principio fundamental de los sistemas embebidos: el software puede controlar directamente el hardware.
En este segundo ejercicio avanzamos un paso más en complejidad: construiremos un sistema de señalización vehicular utilizando tres LEDs que simulan un semáforo real.
Aunque el ejemplo parece simple, introduce un concepto extremadamente importante en ingeniería de sistemas embebidos:
los sistemas basados en estados.
Muchos sistemas electrónicos funcionan precisamente de esta manera:
- sistemas de tráfico
- electrodomésticos
- robots
- sistemas industriales
- interfaces hombre-máquina
En todos ellos el sistema se encuentra siempre en un estado específico, y después de cierto evento o tiempo transiciona a otro estado.
Este ejercicio es una introducción práctica a esa forma de diseñar sistemas.
Objetivo del ejercicio
El objetivo del programa es implementar un semáforo vehicular simple utilizando tres pines GPIO de la Raspberry Pi.
Durante este ejercicio aprenderemos:
- Cómo controlar múltiples salidas digitales desde Python.
- Cómo organizar un sistema embebido en estados de funcionamiento.
- Cómo utilizar retardos de tiempo para generar secuencias.
- Cómo estructurar programas de control de hardware en Raspberry Pi.
Este tipo de lógica es la base de muchos sistemas reales, desde controladores industriales hasta robots autónomos.
Secuencia de funcionamiento del sistema
El semáforo sigue el comportamiento clásico de señalización vehicular.
La secuencia de estados es:
VERDE → AMARILLO → ROJO → VERDE
Cada estado representa una condición diferente del sistema.
Los tiempos utilizados son:
| Estado | Tiempo |
|---|---|
| Verde | 5 segundos |
| Amarillo | 2 segundos |
| Rojo | 5 segundos |
Cuando finaliza el estado rojo, el sistema vuelve nuevamente al estado verde, generando un ciclo continuo.
Arquitectura del programa
El programa está estructurado de manera similar al ejercicio anterior, pero ahora controlando tres pines GPIO simultáneamente.
1. Importación de librerías
El programa utiliza dos librerías principales.
RPi.GPIO
Permite controlar los pines GPIO de la Raspberry Pi.
time
Permite generar retardos que determinan la duración de cada estado del semáforo.
2. Definición de pines
Cada LED del semáforo está conectado a un pin diferente del procesador.
GPIO17 → LED ROJO
GPIO27 → LED AMARILLO
GPIO22 → LED VERDE
Definir los pines como variables mejora la legibilidad del código y facilita futuras modificaciones del hardware.
3. Definición de tiempos
El programa define las duraciones de cada estado mediante variables.
Esto es una práctica recomendable en ingeniería porque permite modificar el comportamiento del sistema sin cambiar la lógica del programa.
Por ejemplo, en sistemas reales los tiempos de los semáforos dependen de:
- flujo vehicular
- horas del día
- sensores de tráfico
- sistemas de control urbano
4. Configuración del sistema GPIO
Al igual que en el ejercicio anterior se utiliza la numeración:
BCM (Broadcom)
Esto significa que el programa utiliza la numeración interna del procesador.
Posteriormente los tres pines se configuran como salidas digitales.
5. Implementación del sistema basado en estados
El corazón del programa es el bucle infinito:
while True:
Dentro de este bucle el sistema pasa por tres estados:
Estado 1 — Verde
El LED verde se activa y los demás permanecen apagados.
Esto indica que los vehículos pueden avanzar.
Estado 2 — Amarillo
El LED amarillo se activa durante un tiempo corto.
Este estado representa una transición de seguridad entre avanzar y detenerse.
Estado 3 — Rojo
El LED rojo se activa indicando que los vehículos deben detenerse.
Una vez finalizado este estado, el sistema regresa nuevamente al estado verde, completando el ciclo.
Diagrama conceptual del sistema
El hardware necesario para este ejercicio es sencillo.
Componentes
- Raspberry Pi
- 3 LEDs (rojo, amarillo y verde)
- 3 resistencias de 220 Ω o 330 Ω
- protoboard
- cables jumper
Conexión
GPIO17 ── Resistencia ── LED ROJO ── GND
GPIO27 ── Resistencia ── LED AMARILLO ── GND
GPIO22 ── Resistencia ── LED VERDE ── GND
Este circuito representa un módulo de semáforo básico, muy utilizado en cursos de sistemas embebidos y robótica educativa.
Manejo de interrupción y limpieza del sistema
El programa implementa una estructura muy importante en aplicaciones de hardware:
try / except / finally
Esto permite:
- Ejecutar el programa normalmente.
- Detectar cuando el usuario presiona CTRL + C.
- Liberar correctamente los pines GPIO.
La instrucción final:
GPIO.cleanup()
garantiza que los pines vuelvan a su estado inicial.
Esta práctica evita errores cuando se ejecutan múltiples programas consecutivos.
Repositorio del proyecto
Puedes acceder al código completo en el repositorio:
Repositorio GitHub
En el repositorio encontrarás:
- Código fuente en Python
- Esquema de conexión
- Instrucciones de ejecución
- Recursos para continuar el aprendizaje
Prompt recomendado para generar el código con IA
Una estrategia interesante para aprender programación de sistemas embebidos consiste en utilizar inteligencia artificial como asistente de programación y analizar el código generado.
Puedes utilizar el siguiente prompt:
Actúa como un ingeniero experto en sistemas embebidos con Raspberry Pi.
Escribe un programa en Python para una Raspberry Pi 5 que implemente
un semáforo vehicular utilizando tres LEDs conectados a los GPIO:
GPIO17 → rojo
GPIO27 → amarillo
GPIO22 → verde
El programa debe:
1. Usar la librería RPi.GPIO.
2. Utilizar numeración BCM.
3. Encender el LED verde durante 5 segundos.
4. Luego encender el LED amarillo durante 2 segundos.
5. Luego encender el LED rojo durante 5 segundos.
6. Repetir la secuencia indefinidamente.
7. Incluir manejo de interrupción con CTRL+C.
8. Liberar los GPIO usando GPIO.cleanup().
El código debe estar muy bien comentado para ser utilizado en
un curso educativo de sistemas embebidos.
Lo que aprenderás en el siguiente ejercicio
En el Ejercicio 3 comenzaremos a introducir interacción con el usuario.
El sistema de semáforo incorporará:
- un botón físico
- lectura de entradas digitales
- modificación del comportamiento del sistema en tiempo real
Esto nos acercará a la construcción de sistemas embebidos interactivos, donde el hardware responde a eventos externos.
Si quieres, en el siguiente paso puedo también ayudarte a crear algo muy potente para tu web:
- una serie pedagógica completa de los 9 ejercicios
- un hilo narrativo entre todos los artículos (tipo mini-curso)
- una estructura optimizada para que Google identifique tu sitio como referencia en Raspberry Pi y sistemas embebidos.
