¿Cómo controlo varios cientos de leds individuales con Arduino(s)?

Estoy trabajando en un proyecto de electrónica que involucra cientos de LED. (Hablando de seiscientos a setecientos LED... mucho, lo sé). ¿Hay alguna forma de controlar tantos LED con uno o un par de Arduinos? Me gustaría poder acceder/controlar cada LED individualmente , ya que lo que quiero hacer es trazar los LED en un mapa mural del mundo. Luego conectaré Arduino con Google Analytics y cuando alguien navegue a mi sitio desde un lugar determinado del mundo, el LED más cercano a su región se encenderá casi en tiempo real.

Cualquier ayuda sería apreciada. ¡Gracias! Intenté investigar un poco y leí sobre multiplexación y charlie-plexing, pero parece que alcanzan un máximo de 100 o más. Supongo que necesitaría hardware/componentes externos para poder controlar tantos LED, pero ¿qué necesitaría exactamente para que esto suceda? ¿Alguien más ha creado alguna vez una matriz LED tan grande?

Respuestas (7)

Cuando multiplexa una gran cantidad de LED individualmente, la forma común es usar una matriz N x M. El tiempo se divide en N pasos, en cada paso activas una de las N líneas de fila, y las líneas de columna que correspondan de los LED que deseas habilitar. Tenga en cuenta que cada una de las líneas de fila puede transportar M veces la corriente del LED, lo que requiere algo de almacenamiento en búfer. Cada LED está encendido solo 1/N del tiempo, por lo que para mantener el brillo normal debe aumentar la corriente N veces. A la mayoría de los LED no les gusta esto. Charlieplexing no es práctico en esta situación debido a las grandes corrientes involucradas.

De su pregunta, entiendo que desea habilitar solo 1 LED a la vez. En ese caso, no hay nada de malo en Charlieplexing. Un uC con 31 pines de E/S puede controlar 900 LED. Parece que la construcción será una pesadilla...


Actualización 5 años después: la multiplexación normal o Charlieplexing es buena cuando tienes demasiado tiempo disponible, pero cuando tenía que controlar cientos de LED ahora, compraba una tira larga de LED WS2801.

Creo que tengo algo que agregar. Bueno, si la alta corriente es el problema, entonces use alto voltaje. como 9v pero por muy poco tiempo 10mS y ciclo de trabajo correctamente calculado. Como también se utiliza para aumentar la vida útil de las lámparas LED.
El voltaje que cae por un LED es fijo, al igual que el voltaje de salida de un Arduino (probablemente 5V, para algunos tipos 3.3V). El uso de una corriente más alta con un ciclo de trabajo más pequeño generalmente reduce la vida útil del LED.

Puede usar un registro de desplazamiento 74HC595 (o similar) barato y fácil de encontrar para controlar fácilmente cientos de LED con solo unos pocos pines del arduino.

¡Incluso hay un tutorial sobre esto en el sitio de Arduino!

Cambio de serie a paralelo con un 74HC595

Shifting Out y el chip 595

En un momento u otro, es posible que se quede sin pines en su placa Arduino y necesite ampliarla con registros de desplazamiento. Este ejemplo se basa en el 74HC595. La hoja de datos se refiere al 74HC595 como un "registro de desplazamiento de entrada en serie, salida en serie o paralelo de 8 bits con pestillos de salida; 3 estados". En otras palabras, puede usarlo para controlar 8 salidas a la vez mientras solo ocupa unos pocos pines en su microcontrolador. Puede vincular varios registros para ampliar aún más su salida.

Serían muchos registros de desplazamiento, pero funcionaría :) Necesitaría aproximadamente 88 (700 ledes / 8 ledes por chip) registros de desplazamiento y solo 1 mcu.
No olvide los controladores lógicos adicionales, ya que 88 entradas es mucho para manejar.

Construiría esto de manera modular. El 6960 de Maxim manejará 64 LED para usted, aunque es un poco caro. Se manejan con una interfaz en serie y puede conectar hasta 256 de ellos juntos.

El 7218/7221 también funcionaría.

Una respuesta un poco tardía a esta pregunta, pero aquí hay 528 LED Charlieplexed de un solo PICAXE 40X2. Subiría a 930 LED si todos los pines estuvieran dedicados al trabajo.

La compilación: http://www.picaxeforum.co.uk/entry.php?25-The-PICaxe-orrery

Un vídeo: http://www.youtube.com/watch?v=82LvqiaH-iA

La arquitectura PICAXE es bastante lenta, por lo que el número máximo de LED que se pueden encender simultáneamente se limita a unos 15 antes de que el parpadeo se convierta en un problema. Un procesador más rápido y una programación más inteligente aumentarían significativamente este número.

No estoy seguro de si mi respuesta es buena o no... pero ¿por qué no hablar de las tiras de leds direccionables WS2811?

Queremos hacer una matriz de LED para mostrar texto. Hay un proyecto aquí ( https://www.pjrc.com/teensy/td_libs_OctoWS2811.html ), hecho en un Teensy, que es casi lo mismo que un Arduino.

Creo que usa el concepto de PWM (Pulse Width Modulation), y así permite enviar datos complejos a las tiras de leds con un solo cable.

Pero de nuevo, no estoy seguro si mi respuesta es buena...

El problema es que el tiempo requerido restringe la cantidad de LED que puede encadenar, y distribuirlos en varias cadenas aumenta el tiempo de procesamiento general.

Tuvimos un buen debate sobre la conducción de muchos LED en una pregunta reciente aquí. Mi respuesta allí parece ser directamente aplicable a su problema aquí. Vea la respuesta aquí:

Conducción de LED a larga distancia

¿Puede traer la información aplicable y adaptarla a esta pregunta? Si su respuesta funciona perfectamente para ambos, es una señal de un duplicado exacto.

Basado en información en http://bildr.org/?s=shift+register en el registro de desplazamiento 74H595 con un Arduino Uno, que decía 'si tiene 1000 de estos encadenados', se inició un proyecto en una pantalla LED con 320 LEDS. Cuando llegué a más de 100 LED, parpadeé mal y eventualmente frié el Arduino.

Así que hablé con el soporte técnico de Sparkfun, quien me vendió las placas base para el 74H595. Dijo que solo puedes tener cinco o seis LED encendidos a la vez. Así que volví a leer el artículo en BLDR y me di cuenta de que puedes controlar miles de LED con 74H595/Arduino, pero solo puedes tener una docena más o menos a la vez. (Esto tiene sentido porque el Arduino permitirá 200 mA a través de la salida de 5 voltios y cada LED consume 20 mA, por lo que alrededor de diez es todo lo que alimentará de manera segura)

Se han visto transistores que se pueden encender con 1mA de corriente. Si eso es cierto, se podría diseñar un circuito que controle los transistores que tienen un colector de voltaje / corriente mucho más alto para el flujo del emisor. Entonces uno podría usar la combinación Arduino/74H595 para controlar transistores en un circuito con mayor corriente.

Allen en Dallas