Semáforo en miniatura con Raspberry Pi: cableado de muchos LED

Fondo:

Soy Ingeniero Civil especializado en dispositivos de control de tráfico y tengo un pequeño proyecto de hobby para construir un sistema de semáforo modelo a escala. Puedo administrar y controlar la programación de patrones de semáforos por mi cuenta usando una Raspberry Pi (además, esto me da la capacidad de implementar un control dinámico y programado, e interactuar con un esquema de control de tráfico serio y posiblemente con datos de tráfico reales). Solo necesito ayuda con el cableado de muchos LED en el lado del hardware :)

Seguí este tutorial http://www.raspberrypi-spy.co.uk/2012/06/control-led-using-gpio-output-pin/ muy bien (incluido el uso de una fuente de alimentación externa en lugar del Pin 2), pero Es probable que me encuentre con el problema de muy pocas conexiones GPIO para todos los semáforos.

A continuación, probé la multiplexación con una matriz LED http://www.appelsiini.net/2011/how-does-led-matrix-work . La multiplexación funciona, sin embargo, las luces suelen ser más tenues, dudo que esto se escale bien, y esto tiende a aumentar la complejidad del control.

Pregunta central:

Además de obtener una tarjeta de expansión en Raspberry Pi, ¿hay algún otro truco que pueda usar para controlar varios LED con menos señales 0/1?

Una cosa acerca de los semáforos es que generalmente vienen en bloques de tres, de los cuales solo uno está activo a la vez. ¿Hay algún circuito relativamente simple que me permita 'alternar' un bloque de LED usando una sola señal 0/1?

b = techo (ln (N)/ln (2)) donde N es la cantidad de LED para controlar y b es la cantidad de bits necesarios para implementar el control. Por lo tanto, una unidad de semáforo, donde solo 1 de cada 3 LED está activo a la vez, requeriría 2 bits de E/S para el control. Con E/S de 8 bits, puede controlar 32 unidades de semáforo: 2 bits para datos (que 1 de cada 3 enciende para encender), 5 bits para dirección (a qué 1 de cada 32 o 2^5 unidades se refiere), y 1 bit para enclavamiento. Espero que alguien pueda ampliar esto a una respuesta completa.
La respuesta a continuación es buena y lo que iba a sugerir, pero como algo simple, no pude encontrar un buen circuito de referencia. También puede usar un pequeño microcontrolador de 8 pines de $ 1 y lanzar su propio bus serie para dispositivos prácticamente ilimitados, aunque eso es un poco en un proyecto en sí mismo si no los ha usado antes.
Si busca "[multiplexing] [led]", encontrará preguntas con ambas etiquetas. Es posible que encuentre información útil allí.
OP puede disfrutar de este semáforo de Velleman

Respuestas (3)

¿Está familiarizado con los registros de desplazamiento como 74HC595? Requiere 3 pines de su RPI y puede controlar 8 líneas de salida. Puede conectarlos fácilmente en cascada controlando de manera efectiva n × 8 líneas de salida.

Los datos se sincronizan en serie en el registro de desplazamiento y, una vez que se transfieren los 8 bits de salida, los bloquea en las salidas.

Estaba a punto de agregar la hoja de datos aquí, pero https://www.sparkfun.com/products/733 muestra un buen video y también tiene un enlace a la hoja de datos.

Los registros de desplazamiento como sugiere jippie funcionan bien. Pero también se puede hacer que la multiplexación funcione para más LED de los que cabría esperar. La solución al brillo reducido es aumentar la corriente máxima para que la corriente promedio permanezca igual. Puede hacer esto aumentando el voltaje o reduciendo la resistencia limitadora de corriente.

La razón por la cual la corriente excesiva daña un LED es que la unión se sobrecalienta. Si se le da tiempo para que se enfríe entre pulsos, los pulsos pueden ser más fuertes. La hoja de datos de su LED debe especificar tanto una corriente promedio máxima como una corriente pico máxima que no debe excederse. Si no está demasiado preocupado por la alta confiabilidad (un proyecto de pasatiempo, no una nave espacial) y no le importa fumar algunos LED o cambiar un poco las reglas, siempre puede probar los límites usted mismo.

Además, busque en charlieplexing una forma de multiplexar más LED desde una cantidad menor de pines. El límite superior de la cantidad de LED que se pueden conectar con este método suele ser el brillo que se puede lograr con la corriente disponible de los pines GPIO, no la cantidad de pines.

Lectura adicional: ¿Pulsar un LED a una corriente más alta produce un mayor brillo aparente?

Tiendo a evitar empujar los picos de corriente demasiado altos en ausencia de circuitos que puedan evitar que una fila se deje encendida durante demasiado tiempo. Casi se garantiza que cualquier unidad de fila basada en software fallará ocasionalmente, y un circuito bien diseñado debería ser inmune al daño por tal ocurrencia.

Use USB o Ethernet para controlar las luces a través de una placa de relé de bloqueo como esta

http://www.robot-electronics.co.uk/acatalog/Relay_Modules.html

He usado estas placas para otras aplicaciones y son excelentes.

Esperamos que las respuestas aquí se mantengan en gran medida por sí mismas. Los enlaces se pudren con el tiempo y no se debe confiar en ellos para obtener la información principal. Indique su respuesta en uno o dos párrafos y use enlaces para consultar información de antecedentes adicional.
¡Me parece bien! La placa en cuestión a la que me referí de Robot Electronics es un controlador de relé controlado por USB o Ethernet. Viene con un conjunto de comandos simple para activar o desactivar cada uno de los 8 o 16 relés en el tablero. Estos relés se pueden usar fácilmente para cambiar la pila de LED de sus semáforos y permitir el control a través del puerto USB o Ethernet de Raspberry PI
@Gareth Así que pon esta información en la respuesta, no aquí.