Projektvorstellung 32x16 RGB LED Matrix - modular und aus Ping Pong Bällen

  • Hallo liebe Forenmitglieder!


    Bisher war ich nur als stiller Beobachter in diesem Forum unterwegs und konnte viele Sachen lernen! Jetzt habe ich mit meinem Kollegen selbst ein Projekt in Angriff genommen welches ich hier kurz vorstellen möchte.


    Viele von euch werden sicher auch bei µController.net unterwegs sein und haben die Projektvorstellung vielleicht schon gesehen. Bitte seht es mir nach wenn ich den Text von da einfach hier hinein kopiere.



    ... mein Kollege und ich haben endlich unser Langzeitprojekt einer
    "modularen Plasmawand" fertiggestellt und möchte es euch nicht
    vorenthalten:


    http://www.youtube.com/watch?v=yzCAcbA51A0


    "Modulare Plasmawand"!? Klingt komplizierter als es ist. Prinzipiell
    handelt es sich um mehrere (8 Stück an der Zahl) 8x8 RGB-Matrizen die zu
    einer großen Wand vereinigt sind. Jedes Segment hat eine eigene PCB die
    nicht mehr als 4 Schieberegister 8 Transistoren und 8 Widerstände
    enthält. Die Daten werden seriell von PCB zu PCB über Cat6-Kabel
    übertragen.


    Klingt nicht sonderlich spannend!? Die selbstgesetzte Herausforderung
    für dieses Projekt bestand darin eine Gesamtmatrix von 512 RGB LEDs,
    d.h. physikalisch 1536 Einzel-LEDs mit einem einzigen 8bit µC zu steuern
    und dabei noch genügend Reserve zu haben um PWM für jede einzelne LED
    und jede einzelne Farbe zu realisieren. Viele von euch kennen sicher die
    vielen tollen Videos der DMX gesteuerten "Groß-Matrizen" bei der zumeist
    ein FPGA sein bestes tut. Wir wollten das mit einem einfachen ATMEGA 328
    im DIP-gehäuse schaffen!


    Was soll ich sagen es ist ganz gut gelungen. Wir schaffen 216 Farben pro
    LED bei einer Framerate von 20 fps. Zudem bleibt noch genug Kapazität um
    wahlweise Daten vom PC über UART zu empfangen oder online einfache
    Plasmaalgorithmen zu berechnen.


    Es war ein wahnsinniger Löt- und verdrahtungsaufwand und die Optimierung
    des Codes war auch langwierig, aber ich denke es hat sich gelohnt.


    Ich denke mit ein wenig Geschick bei der Programmierung kann man den
    8bit-ern mehr entlocken als so mancher glaubt. Es muss nicht immer ein
    FPGA ran um "Großes" zu leisten. ...



    Wenn euch das Projekt gefällt schaut doch einfach mal auf unserer Projekt-Page rein und schreibt was ins Gästebuch!


    https://sites.google.com/site/arduinodiyprojects/Home


    In desem Sinne beste Grüße und ein schöne WE,


    Pepe
    Markierten Text zitieren | Antwort |

  • Markierten Text zitieren | Antwort |

    Hat da etwas jemand seinen Beitrag direkt aus dem µC Forum kopiert ;)


    Aber sehr schönes Projekt. Ich muss sagen, Tischtennisbälle eignen scheinbar gut als Diffusor ohne zuviel Helligkeit zu verlieren. Vielleicht werde ich das ganze in kleiner mal nachbauen (ich will nicht unbedingt 500 Euro an Materialkosten reinstecken müssen ;). Sieht auf jeden Fall schick aus und hat mit Sicherheit sehr viel Zeit gekostet.

  • Hey,
    schickes Projekt ,kam mir gelich so bekannt vor =)
    Das Video ist genial vorallem das SoundTo Light in Spectrum VU sieht sehr schön und dekorativ aus, wie realisiert ? MADRIX ?
    Ich hätte nicht erwartet dass ein ATMega diese Rechenleistung des Plasmas auf sovielen Pixeln realisieren kann :-O Das war defintiv neu für mich :D Kenne mich zwar nochnicht ganzso gut mit denen aus aber dass die solche Leistungenerrechenen können war mir keineswegs bewusst.
    Bezüglich Tischtennisbälle: Ist doch nichts neues, es gibt doch auch hier schon diverse Lichterketten aus Tischtennisbällen :D

  • Auch von mir ein großes Lob für die gelungene Arbeit. 8o Mir gefällt das Projekt echt, was mich aber interessiert, wie ihr die Anbindung an PC gemacht habt und die Muster zu übertragen, da ich meinen LED Cube auch per RS232 ansteuer. Wollte dort auch Musik visualisieren aber das kann ich mir nun von der Liste streichen, da die Zeit um ein Bild (20 Bytes) zu übertragen trotz einer Baudrate von 250k immer noch zu lange dauert.
    Hoffe, dass alles auf eurer Homepage ausführlich erklärt und dokumentiert wird. Vielleicht ja auch noch in Deutsch? Aber mit Englisch hab ich auch kein Problem, doch in Deutsch versteht man halt manchmal doch ein bisschen mehr. :D


    Interessant, dass auf jedem Bild im Video mind. eine Bierflasche zu sehen ist. :whistling:

    Theorie ist wenn man alles weiß, aber nichts funktioniert. Praxis ist wenn alles funktioniert, aber niemand weiß warum.
    Microsoft vereint Theorie und Praxis: Nichts funktioniert und niemand weiß warum. :D

  • Hallo und besten Dank für die positiven Kritiken!


    Zu den Fragen:


    - die Sound-To-Light-Berechungen (und auch alles andere was vom Rechner kommt) macht ein kleines Programm, dass ich in der (kostenlosen) Programmierumgebung "Processing" realisiert habe. "Processing" schickt dann auch die Daten über seriell raus.


    - Wenn Du nur 20 Byte rausschieben willst und 20 Frames pro Sekunde haben möchtest kommst Du locker mit einer Baudrate von 9600 aus!!! Ein Knackpunkt dabei ist aber der Windows-API gleich ein Array aus Bytes zu übergeben und NICHT (wie auch ich es anfänglich tat) Byte für Byte (Dann hat man nämlich unglaublich viel Overhead und es wird richtig langsam).


    Mehr Infos gibt's in Kürze auf unsere Projekt-Page!


    Beste Grüße,


    Pepe

  • HAMMMMMMMER!!!


    Ich kamm gerade garnicht mehr aus dem Staunen raus das ist mal der Hammer sehr gute Arbeit!
    Das macht einfach nur laune sich das Video anzuschauen!


    Sowas würde ich irgendwann in kleinem Format auch gerne mal selber bauen, aber Programmiertechnisch bin ich ein hoffnungsloser fall!

  • echt super gemacht! - gute Idee auch das mit den Tischtennisbällen, sieht richtig nett aus :)


    zwecks Mega328 und Processing wird es sich da wohl auch um nen Arduino handeln...?

    Klingt nicht sonderlich spannend!? Die selbstgesetzte Herausforderung
    für dieses Projekt bestand darin eine Gesamtmatrix von 512 RGB LEDs,
    d.h. physikalisch 1536 Einzel-LEDs mit einem einzigen 8bit µC zu steuern
    und dabei noch genügend Reserve zu haben um PWM für jede einzelne LED
    und jede einzelne Farbe zu realisieren

    Doch, das klingt schon spannend!


    Ihr habt praktisch pro Modul ne Matrix 24x8, die 32 Leitungen kommen aus 4 Schieberegistern...? - sind dann praktisch 32 Bit pro Matrix, Ihr habt 8 Matrixen, sind 256 Bit für das ganze Panel...


    gemultiplext wird dann 8 mal, 216 Farben sind 6 PWM-Stufen pro LED (also 5 Segmente) - macht dann praktisch 10.240 Bit die man rausschieben muss für einmal durchmultiplexen mit PWM...


    rechnet man nun mit 100 Hz Refresh, damit's nicht flimmert, dann wäre das praktisch 1 Mbit/s Datenrate zur Ansteuerung - oder habe ich mich nun irgendwo verrechnet..?


    das ist ja kein Problem, kann man über den HW-SPI ja locker rausschieben - aber man hat dann bei 16 MHz Prozessortakt nur 125 Takte, um jedes Byte zu "berechnen"...


    OK, gut, ein Byte (das für die aktive Zeile) ist ja bei jeder Matrix gleich und ändert sich auch während eines PWM-Zyklus nicht - aber ich glaube gerne, dass das ne Herausfordrung war, das alles so timing-mäßig hinzubekommen...


    ist die Multiplex-Firmware eigentlich auch in Processing geschrieben...? - das ginge dann evtl. in Assembler noch etwas schneller, wobei das Grundproblem darin besteht, wenn Du die PWM-Auflösung verdoppeln willst, dann gleich auch doppelte Datenrate...


    Bei so größeren Matrixen ist übrigens der übliche Ansatz nicht der mit nem FPGA o.ä., sondern eher die "Rechenleistung" zu verteilen, eben auf dedizierte LED-Treiber-ICs wie TLC5947 oder WS2801 etc. - und dann da nur die RGB-Daten rein zu schieben...


    es gibt direkt aus China z.B. so "RGB-Lichterketten" mit einem WS201 oder TM1804 pro RGB-LED, vergossen, müsste man nur Löcher bohren, die Dinger reinstecken, vorne Strom und Daten ran, fertig ;) - wäre evtl. sogar günstiger gewesen, bei ca. 50 Cent/Pixel...? - aber klar, ich verstehe schon auch, dass man da den sportlichen Ehrgeiz hat, sowas ohne diese fertigen LED-Treiber/Pixel zu bauen...


    was hat das Ganze denn gekostet, habe ich nicht gefunden... ich baue gerade was ähnliches, dabei festgestellt, dass das Ganze drumherum (bei mir die Kabel und Kugeln, Montagematerial etc., bei Euch wohl die Tischtennisbälle etc.) dann leider immer gleich nochmal so viel kostet wie die Elektronik selbst... :(



    Interessant, dass auf jedem Bild im Video mind. eine Bierflasche zu sehen ist. :whistling:

    Das muss so sein! :thumbup:

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • echt super gemacht! - gute Idee auch das mit den Tischtennisbällen, sieht richtig nett aus


    Besten Dank! Als stiller Leser über die letzten 6 Monate hier im Forum konnte ich (insbesondere in Deinen Beiträgen) sehr viel lernen und in das Projekt einfließen lassen!


    wird es sich da wohl auch um nen Arduino handeln...?


    Genau so sieht's aus! Von den ganzen netten Makros die die Arduino-IDE so mit sich bringt ist aber quasi nix benutzt worden. Die Funktionen machen zwar gerade Anfängern vieles einfacher und verhelfen zu raschen Erfolgen (zumindest war es bei mir so), aber wenn es um Ressourcen geht merkt man sehr schnell wieviel Overhead in den vorgefertigten Funktionen verloren geht.


    Ihr habt praktisch pro Modul ne Matrix 24x8, die 32 Leitungen kommen aus 4 Schieberegistern...? - sind dann praktisch 32 Bit pro Matrix, Ihr habt 8 Matrixen, sind 256 Bit für das ganze Panel ... gemultiplext wird dann 8 mal, 216 Farben sind 6 PWM-Stufen pro LED (also 5 Segmente) - macht dann praktisch 10.240 Bit die man rausschieben muss für einmal durchmultiplexen mit PWM...


    Exakt formuliert und ausgerechnet!


    rechnet man nun mit 100 Hz Refresh, damit's nicht flimmert, dann wäre das praktisch 1 Mbit/s Datenrate zur Ansteuerung - oder habe ich mich nun irgendwo verrechnet..?


    das ist ja kein Problem, kann man über den HW-SPI ja locker rausschieben


    Auf 100Hz schaffen wir es nicht und auch die HW-SPI schafft das nicht. Sie kann zwar locker 1MBit, aber das gilt nur für die eigentliche Übertagung. Die Berechnung jedes Bytes würde zu kompliziert ablauften bei dieser Art der Datenübertragung. Oder besser formuliert: Ich habe auch nach mehreren Nächten Programmierung keinen Weg gefunden alle Schieb-Register seriell über SPI zu füttern und dabei auf eine annehmbare frame rate zu kommen.


    aber man hat dann bei 16 MHz Prozessortakt nur 125 Takte, um jedes Byte zu "berechnen"...


    OK, gut, ein Byte (das für die aktive Zeile) ist ja bei jeder Matrix gleich und ändert sich auch während eines PWM-Zyklus nicht - aber ich glaube gerne, dass das ne Herausfordrung war, das alles so timing-mäßig hinzubekommen...


    Wie schon gesagt, genau da liegt der Hase im Pfeffer! Schön das jemand das so auf die Schnelle erkennt und zu schätzen weiß! :)


    Des Problems Lösung sie wie folgt aus (ob es die beste Lösung ist weiß ich aber nicht, zumindest funktioniert sie):


    Die Matrix aus 4x2 Segmenten wird in zwei Hälften zerlegt, eine obere Reihe 4x1 sowie die unterer Reihe 4x1.Jede Reihe entält 16 Schieberegister. Diese werden aber NICHT seriell beschalten / beschrieben.


    Vielmehr hängen "nur" die 4 Schiebe-Register für die Farbe Rot in Reihe, die vier für Grün, vier für Blau und vier für die Zeilen. Damit gibt es in jeder der beiden Teilmatrizen 4 Datenleitungen also insgesamt 8. Diese gehen zum Atmega! Die CLOCK, LATCH, ENABLE und RESET-Leitungen ALLER Schieberegister sind parallel geschaltet und gehen auch noch zum Atmega. Damit benötigt man insgesamt 12 Pins am Atmega.


    Mit einem (natürlich selbst generiertem) CLOCK-Puls kann man nur die daten an 8 Leitungen parallel rausschicken und die Berchung der aktuellen Zusände die an den 8 Datenleitungen anliegen müssen vereinfacht sich auf einen einfachen Vergleich zwischen zwei Zahlen (Mux-Counter und Farbwert an der akuellen Matrixposition)!! :)


    Das ist der ganze "Trick" an der Sache.


    Ich werde in den nächsten Tagen den Code auf unserer Projekt-Seite online stellen (wenn ich ihn gescheit kommentiert habe), da ist das was ich hier in Prosa geschrieben habe bestimmt etwas besser zu ersehen. Seit heute stehen aber schon ein paar sehr übersichtliche Schemata sowie die Schaltpläne und Layouts auf unserer Seite die ich erstellt habe um den Mechanismus etwas zu verdeutlichen. Das Ganze wie gesagt auf unserer Seite (https://sites.google.com/site/arduinodiyprojects/Home) unter "Modular Plasma Wall". Für die die nicht suchen wollen hier der Direktlink zu den Plänen:


    https://picasaweb.google.com/e…Z_5RQ#5588821706565406978



    es gibt direkt aus China z.B. so "RGB-Lichterketten" mit einem WS201 oder TM1804 pro RGB-LED


    Ja, von den WS2801 habe ich auch ne Stange hier rumliegen, das war quasi der erste Vorversuch. Ich habe auch einzelne "Pixel-Patinen" entwurfen, ähnlich den Deinen. Funktionierte prima aber der Ätzaufwand für 512 solcher Teile hatte uns dann doch sehr abgeschreckt.


    Von den fertigen Pixeln aus dem Reich der Mitte habe ich auch ein paar hier aber die wurden aus "Mangel an Eigenleistung" verworfen :)




    was hat das Ganze denn gekostet, habe ich nicht gefunden... ich baue gerade was ähnliches, dabei festgestellt, dass das Ganze drumherum (bei mir die Kabel und Kugeln, Montagematerial etc., bei Euch wohl die Tischtennisbälle etc.) dann leider immer gleich nochmal so viel kostet wie die Elektronik selbst...


    Die Gesamtkosten für das Projekt liegen bei ziemlich genau 500 EUR. In der Tat sind es die vielen kleinen Dinge in Bezug auf Mechanik und Verkabelung die die Kosten immer wieder in die Höhe treiben. Aber ein Hobby ist nunmal erst dann ein Hobby wenn man es übertreibt!


    Die Tischtennisbälle gibt es übrigens ganz günstig bei http://www.gunstigepreise.com/ 240 Stück unbedruckt für unschlagbare 29.99 EUR !!



    Das muss so sein!


    Unterhopfen ist die häufigste Ursache für Fehler beim Basteln! Daher empfiehlt es sich immer zu zweit zu arbeiten und sich gegenseitig zu reichlich Flüssigkeitsaufnahme zu ermahnen!


    In diesem Sinne beste Grüße,


    Pepe

  • Hallo Pepe,
    echt ein super Projekt, sieht spitze aus.


    Ich hätte noch zwei fragen und zwar:
    1. Wurde die Software am PC zur Steuerung der Matrix auch mit der Arduino Software erstellt?
    2. Welchen Litzenquerschnitte habt ihr bei der Verkabelung der LEDs genutzt und wie viel von den LEDs, habt ihr immer in Reihe geschaltet?

  • Hallo,


    die Software die am PC läuft wurde mit der Entwicklungsumgebung "Processing" geschreben. "Processing" ist quasi der große Bruder von "Arduino" nur eben für PC-Anwendungen.


    Die Anoden der LED's sind spaltenweise über einen verzinnten Kupferdraht von 0.25mm verbunden (würde auch dünner gehen, aber dann wird's mechanisch nicht so stabil). Die Kathoden sind zeilenweise über einen 0.75mm verzinnten Kupferdraht verbunden, da diese ja den Strom von bis zu 24 LED's im whorst case abführen müssen.


    Von der Matrix zum Treiber-Board geht dann Standard-Fachbandkabel weg an dessen Ende eine Pfostenbuchse sitzt.


    Ich glaube rein rechnerisch könnte das Falchbandkabel für die Kathodenleitungen zu sogar noch zu schwach sein aber in der Realität haben sich bisher keine Probleme gezeigt!


    Beste Grüße,


    René Heller

  • Vielmehr hängen "nur" die 4 Schiebe-Register für die Farbe Rot in Reihe, die vier für Grün, vier für Blau und vier für die Zeilen. Damit gibt es in jeder der beiden Teilmatrizen 4 Datenleitungen also insgesamt 8. Diese gehen zum Atmega! Die CLOCK, LATCH, ENABLE und RESET-Leitungen ALLER Schieberegister sind parallel geschaltet und gehen auch noch zum Atmega. Damit benötigt man insgesamt 12 Pins am Atmega.


    Mit einem (natürlich selbst generiertem) CLOCK-Puls kann man nur die daten an 8 Leitungen parallel rausschicken und die Berchung der aktuellen Zusände die an den 8 Datenleitungen anliegen müssen vereinfacht sich auf einen einfachen Vergleich zwischen zwei Zahlen (Mux-Counter und Farbwert an der akuellen Matrixposition)!! :)

    Ja, das ist natürlich schlau gemacht! :thumbup:


    Wobei jetzt (wenn man mal nachrechnet, und ich mich nicht irre...) das unter'm Strich praktisch fast auf's selbe rauskommt..? - also, ob ich jetzt den Wert für Rot aus dem RAM hole, mit dem PWM-Zähler vergleiche und dann das Bit am "Rot-Port" setze, das selbe für grün und blau - oder ob ich immer das selbe Bit am selben Port setze und dazwischen halt nen Clock-Puls...?


    Klar, die Clock-Pulse muss man damit natürlich weniger oft erzeugen, und auch die Datenrate teilt sich auf mehrere Leitungen auf, da ein Signal mit 1 MHz durchzuschicken wäre ja auch nicht ganz ohne... da ist das auf jeden Fall besser so


    wegen dem Flachbandkabel: Du hast ja nicht immer alle LEDs an, also im Durchschnitt auch nicht den Strom für 24 LEDs da drauf, sondern nur 1/3 - 1/2 - kannst ja mal, wenn Du sicher gehen willst, einfach die komplette Matrix ne Zeit lang auf weiß stellen, und dann mal schauen, ob/wie sich das Kabel erwärmt...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Hallo,
    ich finde euer Projekt einsamme spitze. Schaue jetzt seit einer Weile hier öfters vorbei. Leider passiert ja nicht mehr viel. Mich würde mal Interessieren habt ihr ganz normale 5mm LEDs genommen und von wo habt ihr diese gekauft?
    Und stellt ihr noch den Quelltext ins Internet oder bleibt der euer Eigen? Der würde mich nämlich sehr interessieren.
    mfg