Ejercicio No. 2 – Semáforo basado en máquinas de estado

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:

  1. Cómo controlar múltiples salidas digitales desde Python.
  2. Cómo organizar un sistema embebido en estados de funcionamiento.
  3. Cómo utilizar retardos de tiempo para generar secuencias.
  4. 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:

EstadoTiempo
Verde5 segundos
Amarillo2 segundos
Rojo5 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:

  1. Ejecutar el programa normalmente.
  2. Detectar cuando el usuario presiona CTRL + C.
  3. 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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio