Wie steuere ich mehrere hundert einzelne LEDs mit Arduino (s)?

10

Ich arbeite an einem Elektronikprojekt mit Hunderten von LEDs. (Ich spreche von sechshundert bis siebenhundert LEDs ... viel, ich weiß.) Gibt es eine Möglichkeit, so viele LEDs mit einem oder mehreren Arduinos zu steuern? Ich möchte in der Lage sein, auf jede LED einzeln zuzugreifen / sie zu steuern, da ich LEDs auf eine Wandkarte der Welt zeichnen möchte. Ich werde dann Arduino mit Google Analytics verbinden. Wenn jemand von einem bestimmten Ort auf der Welt zu meiner Website navigiert, leuchtet die LED, die seiner Region am nächsten liegt, fast in Echtzeit auf.

Jede Hilfe wäre dankbar. Vielen Dank! Ich habe versucht, einige zu recherchieren und über Multiplexing und Charlie-Plexing zu lesen, aber diese scheinen bei 100 oder so maximal zu sein? Ich gehe davon aus, dass ich externe Hardware / Komponenten benötigen würde, um so viele LEDs steuern zu können, aber was genau würde ich brauchen, um dies zu erreichen? Hat jemand eine jemals so große LED-Matrix erstellt?

Kaffolder
quelle

Antworten:

9

Wenn Sie eine große Anzahl von LEDs einzeln multiplexen, wird üblicherweise eine N x M-Matrix verwendet. Die Zeit ist in N Schritte unterteilt. In jedem Schritt aktivieren Sie eine der N Zeilenzeilen und die Spaltenzeilen, die den LEDs entsprechen, die Sie aktivieren möchten. Beachten Sie, dass die Zeilenleitungen jeweils das M-fache des LED-Stroms führen können, was eine gewisse Pufferung erfordert. Jede LED leuchtet nur 1 / N der Zeit. Um die normale Helligkeit beizubehalten, müssen Sie den Strom N-fach erhöhen. Die meisten LEds mögen das nicht. Charlieplexing ist in dieser Situation aufgrund der großen Ströme nicht praktikabel.

Aus Ihrer Frage verstehe ich, dass Sie jeweils nur 1 LED aktivieren möchten? In diesem Fall ist an Charlieplexing nichts auszusetzen. Ein uC mit 31 E / A-Pins kann 900 LEDs ansteuern. Klingt so, als wäre der Bau ein Albtraum ...


Update 5 Jahre später: Normales Multiplexing oder Charlieplexing ist schön, wenn Sie zu viel Zeit zur Verfügung haben, aber wenn ich jetzt Hunderte von LEDs steuern musste, würde ich einen langen Streifen WS2801-LEDs kaufen.

Wouter van Ooijen
quelle
Ich denke, ich muss etwas hinzufügen. Wenn ein hoher Strom das Problem ist, verwenden Sie eine hohe Spannung. wie 9V, aber für eine sehr kurze Zeit 10 ms und korrekt berechnetes Tastverhältnis. Da es auch die Verlängerung der Lebensdauer von LED-Lampen nutzt.
Standard Sandun
Die von einer LED abfallende Spannung ist fest, ebenso wie die Ausgangsspannung eines Arduino (wahrscheinlich 5 V, bei einigen Typen 3,3 V). Die Verwendung eines höheren Stroms mit einem kleineren Arbeitszyklus verringert im Allgemeinen die LED-Lebensdauer.
Wouter van Ooijen
9

Sie können ein billiges und leicht zu findendes 74HC595 (oder ähnliches) Schieberegister verwenden, um Hunderte von LEDs mit nur wenigen Pins vom Arduino aus einfach zu steuern.

Es gibt sogar ein Tutorial dazu auf der Arduino Seite!

Serielles bis paralleles Herausschalten mit einem 74HC595

Shifting Out & der 595 Chip

Irgendwann gehen Ihnen möglicherweise die Stifte auf Ihrem Arduino-Board aus und Sie müssen es mit Schieberegistern erweitern. Dieses Beispiel basiert auf dem 74HC595. Das Datenblatt bezieht sich auf den 74HC595 als "8-Bit-Schieberegister mit seriellem Eingang, seriellem oder parallelem Ausgang und Ausgangs-Latches; 3-Zustand". Mit anderen Worten, Sie können damit 8 Ausgänge gleichzeitig steuern, während Sie nur wenige Pins Ihres Mikrocontrollers belegen. Sie können mehrere Register miteinander verknüpfen, um Ihre Ausgabe noch weiter zu erweitern.

Michael Choi
quelle
Das wären viele Schieberegister, aber es würde funktionieren :) Sie würden ca. 88 Schieberegister (700 LEDs / 8 LEDs pro Chip) und nur 1 mcu benötigen.
Johan
1
Vergessen Sie nicht die zusätzlichen Logiktreiber, da 88 Eingänge ziemlich viel zu handhaben sind.
Ignacio Vazquez-Abrams
2

Ich würde dies modular aufbauen. Das 6960 von Maxim steuert 64 LEDs für Sie an, obwohl es etwas teuer ist. Sie werden mit einer seriellen Schnittstelle betrieben, und Sie können bis zu 256 davon miteinander verbinden.

Der 7218/7221 würde auch funktionieren.

Eric Gunnerson
quelle
2

Eine etwas späte Antwort auf diese Frage, aber hier sind 528 LEDs, die von einer einzelnen PICAXE 40X2 Charlieplexed sind. Es würden bis zu 930 LEDs verwendet, wenn alle Pins für den Job reserviert wären.

Der Build: http://www.picaxeforum.co.uk/entry.php?25-The-PICaxe-orrery

Ein Video: http://www.youtube.com/watch?v=82LvqiaH-iA

Die PICAXE-Architektur ist ziemlich langsam, sodass die maximale Anzahl von LEDs, die gleichzeitig leuchten können, auf etwa 15 begrenzt ist, bevor das Flimmern zum Problem wird. Ein schnellerer Prozessor und eine klügere Programmierung würden diese Zahl erheblich erhöhen.

Buzby
quelle
1

Ich bin nicht sicher, ob meine Antwort gut ist oder nicht ... aber warum nicht über WS2811 adressierbare LED-Streifen sprechen?

Wir möchten eine LED-Matrix erstellen, um Text anzuzeigen. Hier gibt es ein Projekt ( https://www.pjrc.com/teensy/td_libs_OctoWS2811.html ), das auf einem Teensy erstellt wurde und fast dasselbe ist wie ein Arduino.

Ich denke, es verwendet das Konzept der PWM (Pulse Width Modulation) und ermöglicht so das Senden komplexer Daten an die LED-Streifen mit einem einzigen Draht.

Aber auch hier bin ich mir nicht sicher, ob meine Antwort gut ist ...

Simon
quelle
Das Problem ist, dass das erforderliche Timing die Anzahl der LEDs einschränkt, die Sie miteinander verketten können, und die Verteilung auf mehrere Ketten die Gesamtverarbeitungszeit verlängert.
Ignacio Vazquez-Abrams
0

Wir hatten in einer aktuellen Frage hier eine nette Diskussion über das Ansteuern vieler LEDs. Meine Antwort dort scheint hier direkt auf Ihr Problem anwendbar zu sein. Die Antwort finden Sie hier:

LEDs über große Entfernungen ansteuern

Michael Karas
quelle
4
Können Sie die zutreffenden Informationen überbringen und auf diese Frage zuschneiden? Wenn Ihre Antwort für beide perfekt funktioniert, ist dies ein Zeichen für ein genaues Duplikat.
Kortuk
0

Basierend auf Informationen unter http://bildr.org/?s=shift+register im 74H595-Schieberegister mit einem Arduino Uno, das besagte: "Wenn Sie 1000 davon verkettet haben", wurde ein Projekt auf einem LED-Display mit gestartet 320 LEDs. Als ich über 100 LEDs kam, flackerte es schlecht und briet schließlich den Arduino.

Also sprach ich mit dem technischen Support von Sparkfun, der mir die Breakout-Boards für den 74H595 verkaufte. Er sagte, Sie können immer nur fünf oder sechs LEDs gleichzeitig an haben. Also ging ich zurück und las den Artikel bei BLDR noch einmal und stellte fest, dass Sie mit 74H595 / Arduino Tausende von LEDs steuern können, aber Sie können immer nur ein Dutzend oder so gleichzeitig haben. (Dies ist sinnvoll, da der Arduino 200 mA über den 5-Volt-Ausgang zulässt und jede LED 20 mA verbraucht, sodass nur etwa zehn sicher sind.)

Es wurden Transistoren gesehen, die mit 1 mA Strom eingeschaltet werden können. Wenn das wahr ist, wenn man eine Schaltung entwerfen könnte, die Transistoren steuert, die einen viel höheren Spannungs- / Stromkollektor zum Emitterfluss haben. Dann könnte man die Arduino / 74H595-Kombination verwenden, um Transistoren zu steuern, die in einer Schaltung mit höherem Strom sind.

Allen in Dallas

Allen Pitts
quelle