En los ejercicios anteriores aprendimos a controlar salidas digitales utilizando los pines GPIO de la Raspberry Pi. Construimos un semáforo vehicular y posteriormente incorporamos una interfaz gráfica para visualizar su funcionamiento.
En este quinto ejercicio introducimos un nuevo concepto fundamental en el diseño de sistemas embebidos: la interacción del sistema con el mundo físico a través de entradas digitales.
Para lograrlo incorporaremos un botón de peatón que permitirá solicitar el cambio del semáforo. Este tipo de lógica es muy común en sistemas reales de control urbano, donde los peatones pueden indicar su intención de cruzar mediante un pulsador.
El sistema seguirá funcionando de manera automática, pero ahora incluirá un evento externo que puede modificar su comportamiento.
Este ejercicio introduce conceptos esenciales que aparecen en muchos dispositivos electrónicos:
- lectura de sensores digitales
- detección de eventos externos
- control basado en estados
- filtrado de señales provenientes del hardware
Objetivo del ejercicio
El objetivo de este ejercicio es extender el sistema de semáforo para permitir que un peatón solicite el cambio de estado mediante un botón conectado a la Raspberry Pi.
Durante este ejercicio aprenderemos:
- Cómo leer entradas digitales utilizando los pines GPIO.
- Cómo implementar lógica dependiente del estado del sistema.
- Cómo aplicar debounce por software para eliminar rebotes del botón.
- Cómo diseñar una máquina de estados simple en un sistema embebido.
Estos conceptos son fundamentales en el diseño de sistemas que interactúan con el mundo físico, como:
- robots móviles
- dispositivos IoT
- sistemas de automatización
- interfaces hombre-máquina
Funcionamiento del sistema
El sistema implementa un semáforo vehicular con la posibilidad de generar una solicitud de cruce peatonal.
El comportamiento es el siguiente:
- Cuando el semáforo está en VERDE, el peatón puede presionar el botón para solicitar el cambio.
- Si el botón se presiona cuando el sistema está en AMARILLO o ROJO, la solicitud es ignorada.
La secuencia de funcionamiento es:
VERDE ----(botón)----> AMARILLO → ROJO → VERDE
Cuando se detecta la solicitud peatonal durante el estado VERDE, el sistema interrumpe el ciclo normal y procede al cambio de estado.
Arquitectura del programa
El programa mantiene la estructura utilizada en ejercicios anteriores, pero ahora incorpora la lectura de entradas digitales y lógica adicional para manejar eventos externos.
1. Configuración de los pines GPIO
El sistema utiliza cuatro pines:
| Elemento | GPIO |
|---|---|
| LED rojo | GPIO17 |
| LED amarillo | GPIO27 |
| LED verde | GPIO22 |
| Botón de peatón | GPIO23 |
El botón se configura como entrada digital utilizando una resistencia interna pull-up.
Esto significa que:
- el pin normalmente está en nivel lógico HIGH
- cuando el botón se presiona, el pin pasa a LOW
Este esquema es muy común en diseño electrónico porque reduce la necesidad de componentes externos.
2. Problema del rebote mecánico
Los botones físicos presentan un fenómeno conocido como rebote mecánico (switch bounce).
Cuando un botón se presiona, el contacto eléctrico puede oscilar rápidamente entre:
- abierto
- cerrado
Esto puede generar múltiples activaciones no deseadas.
Para evitarlo, el programa implementa debounce por software, ignorando nuevas activaciones durante un intervalo de tiempo determinado.
En este ejercicio se utiliza un tiempo de:
200 milisegundos
3. Máquina de estados del semáforo
El comportamiento del sistema se basa en una máquina de estados simple representada por la variable:
estado_actual
Los estados posibles son:
- VERDE
- AMARILLO
- ROJO
Cada estado controla:
- los LEDs del semáforo
- la transición al siguiente estado
Este enfoque permite diseñar sistemas de control claros y fáciles de mantener.
4. Detección de solicitud peatonal
Cuando el botón es presionado durante el estado VERDE, el sistema activa la variable:
solicitud_peaton
Esto indica que un peatón desea cruzar.
El sistema continuará en estado VERDE hasta que:
- finalice el tiempo programado, o
- se detecte una solicitud peatonal
En ambos casos el semáforo procede al estado AMARILLO.
Diagrama conceptual del hardware
El sistema utiliza el mismo semáforo de ejercicios anteriores con la adición de un botón.
Componentes
- Raspberry Pi
- LED rojo
- LED amarillo
- LED verde
- 3 resistencias (220 Ω o 330 Ω)
- botón pulsador
- protoboard
- cables jumper
Conexiones
GPIO17 ── Resistencia ── LED ROJO ── GND
GPIO27 ── Resistencia ── LED AMARILLO ── GND
GPIO22 ── Resistencia ── LED VERDE ── GND
GPIO23 ── Botón ── GND
La resistencia pull-up interna de la Raspberry Pi mantiene el pin en estado alto cuando el botón no está presionado.
Repositorio del ejercicio
Puedes encontrar el código completo en el repositorio:
Repositorio GitHub
En el repositorio encontrarás:
- código fuente en Python
- diagrama de conexión
- instrucciones de ejecución
- materiales educativos adicionales
Prompt recomendado para generar el código con IA
Puedes utilizar el siguiente prompt para generar este ejercicio utilizando inteligencia artificial:
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 con un botón de peatón.
El sistema debe utilizar los siguientes pines:
GPIO17 → LED rojo
GPIO27 → LED amarillo
GPIO22 → LED verde
GPIO23 → botón de peatón
Requisitos del programa:
1. Usar la librería RPi.GPIO con numeración BCM.
2. Implementar una máquina de estados con los estados:
VERDE → AMARILLO → ROJO.
3. Permitir que el peatón solicite el cambio presionando el botón
únicamente durante el estado VERDE.
4. Ignorar el botón durante los estados AMARILLO y ROJO.
5. Implementar eliminación de rebotes (debounce) por software.
6. Liberar los recursos GPIO al finalizar el programa.
El código debe estar bien comentado para fines educativos
en un curso de sistemas embebidos.
Lo que aprenderás en el siguiente ejercicio
En el Ejercicio 6 continuaremos ampliando el sistema incorporando múltiples botones o modos de operación, lo que permitirá construir sistemas embebidos más complejos basados en eventos y lógica de control más avanzada.
Este tipo de arquitectura es la base para desarrollar:
- sistemas de control de tráfico más avanzados
- robots interactivos
- interfaces de usuario basadas en hardware
- dispositivos IoT inteligentes.
