Peatón semáforo dinámico con multiplexación

Buenas a todos, soy nuevo en el mundo Arduino y me gustaría recrear por el método de multiplexación de una matriz LED uno de esos semáforos de peatones que se ven de vez en cuando por las ciudades, en los que el hombrecillo verde sale caminando en movimiento y en los últimos segundos aumenta la velocidad. Tengo disponibles los fotogramas que crean la animación en movimiento (son 9 en total), pero no se muy bien cómo comenzar a construirlo en Arduino ya que es la primera vez que lo voy a utilizar.
Adjunto foto de uno de los fotogramas en los que se aprecian todos los LED que conforman la matriz necesaria para dicha animación:


Aquí un vídeo del semáforo en funcionamiento por si alguien no lo conoce: https://www.youtube.com/watch?v=2kOyxRPuHg8
Si alguien tiene alguna idea de cómo construir la matriz (resistencias que hay que poner, modelo de placa Arduino más apropiada, etc) y sobre cómo programarla lo agradecería enormemente. Muchas gracias de antemano.

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @alvarohear.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Su matriz es de 16x12 (16x16 será más fácil de encontrar, o construir a partir de 4 cada 8x8). Aquí hay una animación de 8x8 que puedes ver con los "fotogramas" definidos, y el código simplemente cambia de fotogramas.

Hola xfpd,
Gracias por tu respuesta, yo había pensado en fabricar la matriz solo con los LED imprescindibles que se encienden durante la animación, ya que no se trata de una matriz cuadrada estándar en la que habría LEDs que nunca se usarían.
La idea sería comprar sueltos los LED de tensión y corriente apropiadas para funcionar con Arduino y montarlos sobre una base de plástico para luego conectar los pines con las salidas de Arduino mediante cable por la parte trasera. Una vez creada la matriz, en Arduino se programaría el encendido multiplexado de los LED para que se reproduzca la animación en movimiento. Para requerir el menor número de LEDs encendidos simultáneamente en cada fase de la multiplexacion, la forma más óptima de realizarla es en dirección vertical encendiendo los LED por líneas horizontales, siendo 6 el máximo de LEDs encendidos simultáneamente (en el peor de los casos se podría reducir a 5 ya que solo se encienden 6 simultáneamente en un único fotograma de la animación y creo que quitando un LED a ese fotograma no va a generar una gran diferencia. Adjunto el fotograma con los 6 LEDs enseñados en horizontal)


La idea a grandes rasgos la tengo clara, pero no se como comenzar a montarlo ya que desconozco que modelo de placa de Arduino es la más apropiada por número de salidas e intensidad que proporciona cada una, y las características de los LED que debo usar. Si tú o alguien más me puede orientar os lo agradecería mil!!

Lea sobre "Charlieplexing" para minimizar la cantidad de pines necesarios para iluminar la matriz.

Podrías usar el MAX7219 que maneja hasta 64 LED y se encarga del multiplexado.
Puedes conectar 2 en cascada para tener hasta 128 LED y manejar todo con solo 3 pines.
Y tienes librerías y ejemplos a montones que te van a facilitar la tarea.
Solo adáptalos a tu diseño.
Creo que es la solución más sencilla.

Hola MaximoEsfuerzo,
Muchas gracias por tu aportación, el MAX7219 que comentas veo que es un modelo de dot-display, no obstante mi duda es más bien sobre el modelo de placa Arduino más apropiado para lo que quiero hacer, teniendo en cuenta que la matriz ficticia necesaria sería de 11x15 (digo ficticia porque para construir la matriz solo utilizaré los LED imprescindibles para crear la animación, es decir que no va a tener forma rectangular como las matrices estándar para omitir los LED que nunca se encenderían), se necesitaría un Arduino con un mínimo de 26 salidas utilizables. Pongo foto de cómo sería la matriz solo con los LED que se encienden en algún momento de la animación:


Respecto a los LED por línea horizontal que se encienden simultáneamente durante los fotogramas, estos varían desde 1 LED hasta un máximo de 6 LED simultáneos. Mi idea era multiplexar por líneas horizontales ya que requieren menos LED simultáneos que haciéndolo por columnas, pero me surge la duda de si se producirán variaciones de brillo entre las distintas líneas que forman cada fotograma, ya que en algunas líneas la corriente que proporciona la salida del Arduino solo alimentará un LED mientras que en otras líneas la misma corriente se repartirá entre un máximo de 6 LEDs.
Otra opción es multiplexar por LED en vez de por líneas, de ese modo solo habrá un LED encendido en todo momento, pero mi duda ahí está en si se notaría el efecto de parpadeo ya que para formar cada fotograma se tendría que encender y apagar cada uno de los LED que lo conforman de forma individual, y eso sería más lento que encender y apagar cada línea. Poniendo como ejemplo el fotograma de la siguiente foto y tomando como supuesto que un encendido y apagado durase 1 milisegundo, multiplexando por línea tardaría 15 milisegundos en hacer un barrido de todo el fotograma, mientras que multiplexando por LED tardaría 44 milisegundos.

Con esos números sobre la mano, obviamente es mejor multiplexar por línea. Hay alguna forma de que el brillo entre LEDs no se vea afectado dependiendo de si la salida del Arduino está alimentando 1, 2, 3, 4, 5 o 6 LEDs simultáneamente con la misma corriente??

Entendí perfectamente tu consulta (y lo de la "matriz" irregular) y por eso te propuse el MAX que solo necesita 3 pines, maneja 64 LED (tu tienes 96 si no conté mal), se encarga del multiplexado y el control de brillo. Además se interconectan fácilmente para manejar otros 64 LED cada uno que conectes y siempre los manejas con solo 3 pines.

Ahora, si te gusta a la manera difícil, igual vas a tener que agregar componentes adicionales, minimo un transistor por columna o algún driver tipo ULN200x.
En cuanto al brillo, hablando de micros que trabajen a 5V (por ej. Arduino Mega) no deberías tener problemas porque cada LED debe llevar resistencia limitadora (96 resistencias) así que cada uno tendría el mismo consumo pero, atento, tienes que prestar mucha atención a la corriente que puede manejar cada pin del micro. La excedes y adiós.
Además, para hacer las cosas bien, vas a tener que trabajar con alguna interrupción de algún timer (sino el multiplexado resulta una porquería) lo que complica el código.

Personalmente iría por la opción del MAX7219 (y eso que me gusta hacer las cosas a la antigua).

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.