🏠 FabLab Startseite | Nutzungsbedingungen | Impressum | Wiki

Monitor-Tisch mit LED-Beleuchtung und Ambient-Light

Moin,

weil meine Monitore immer zu niedrig standen und auf meinem Schreibtisch nie genug Platz war, habe ich mir überlegt einen Monitor-Tisch zu bauen, der auf dem Schreibtisch steht.
Nachdem ich ihn designt hatte, kam ich auf die Idee statt Holz doch einfach Acryl zu verwenden, und einen LED-Streifen anzubauen, den ich noch daheim hatte. Als das dann fertig war, kam noch der Wunsch auf, die Farben des Tisches automatisch an den Monitor-Inhalt anzupassen (so genanntes Ambient-Light). So entstand dann dieses Projekt. Hier könnt ihr ein Bild des fertigen Tisches sehen:

Später lade ich vielleicht noch mal Videos hoch, damit man das Ambient-Light in Aktion sehen kann.
Hier möchte ich zeigen, wie man diesen Tisch baut und das Ambient-Light in Hard- und Software kostengünstig umsetzen kann.

1 „Gefällt mir“

Zunächst der Tisch - Hierfür habe ich mir in Fusion eine Skizze angelegt. Der Tisch sollte für meine 2 Monitore breit genug sein, außerdem abgerundete Kanten haben, damit man sich nicht verletzt und auf der rechten Seite etwas breiter werden (dort steht der 2. Monitor etwas schief). Außerdem wollte ich genug Platz haben um Maus und Tastatur bequem darunter unterzubringen. Verbunden werden sollte das ganze mittels Stecksystem, da doch ein relativ großes Gewicht auf dem Tisch lastet und der auf keinen Fall zusammenbrechen sollte. Heraus kamen dann diese Teile:

linkePlatte.dxf (2,3 KB)

RechtePlatte.dxf (2,9 KB)

Rueckplatte.dxf (3,9 KB)

Tischplatte.dxf (8,3 KB)

Diese habe ich mit dem Lasercutter ausgeschnitten. Nachträglich habe ich an der Rückplatte noch 3 Kabelöffnungen angebracht, die hier nicht verzeichnet sind, damit Maus- und Tastatur-Kabel durchgeführt werden können.
Verwendet wurde hier eine 4 mm Acrylglas-Platte, die Maße der Dateien sind auch darauf angepasst.
Anschließend habe ich die Teile zusammengesteckt und mit Acrylkleber verklebt, damit das ganze auch stabil hält.

Beim ersten Testen merkte ich gleich, das die Konstruktion so nicht stabil genug war, auf der Platte lastete zu viel Gewicht das nach vorne drückte - die Bildschirme wären nach vorne gekippt. Zum Glück hatte ich noch so einen LED-Würfel aus Glas der genau darunter passte:

ich habe einfach ein wenig Filz darüber geklebt, damit beides nicht verkratzt und das Ganze darunter gestellt. Alternativ kann man sich natürlich aus Acrylglas eine Säule cutten z.B. mit dieser Biegemethode die auch bei der Fablab-Mappe verwendet wurde.

2 „Gefällt mir“

Für die LED-Beleuchtung habe ich einfach einen RGB-LED-Streifen mit Fernbedienung aus dem Baumarkt (Kostenpunkt c.a. 20 €, zum Beispiel so einer: LED-Streifen) verwendet den ich noch daheim hatte.

Ich wollte sowohl die rechte als auch die hintere Seite mit LEDs versehen, daher musste ich den Streifen auftrennen (hierfür einfach mit einem Seitenschneider, einer guten Schere oder einer geeigneten Zange über den Verbindungen der Streifen schneiden wie hier:

Anschließend müssen die beiden Teile mit Kabeln verbunden werden. Für diesen Zweck lagen bei meinem Streifen extra Steckverbinder bei. Diese müssen mit viel Druck an die Schnittstellen angedrückt werden und mit einer Kappe geschlossen werden:

Je nach Hersteller sind vielleicht andere Systeme dabei, das muss dann natürlich entsprechend der Anleitung angewandt werden.

Bei diesem System hatte ich das Problem, dass man sehr genau die Lötstellen treffen musste, was zu Wackelkontakten führte. Daher habe ich die Stellen einfach mit isoliertem Kabel gelötet. Dafür muss die Plastikschicht über dem LED-Streifen entfernt werden und dann ganz normal gelötet werden, 12V zu 12V, R/G/B zu R/G/B

Ist das geschafft muss man nurnoch den Streifen am Tisch befestigen, das habe ich mit ein wenig Sekundenkleber erledigt (der Acrylkleber hat am Plastik der Streifen nicht gehalten). Dann nurnoch den Streifen am Netzteil anschließen und testen - dann kann mithilfe der Fernbedienung die Farbe des Tisches eingestellt werden:

2 „Gefällt mir“

So, jetzt der spannende Teil - das anschließen an den Monitor.

Hierfür gibt es unterschiedliche Möglichkeiten. Man kann einen HDMI-Splitter (oder auch für andere Übertragungsmöglichkeiten) verwenden, und mithilfe spezieller Hardware die Farben analysieren, allerdings sind die Kosten hierfür sehr hoch und es funktioniert nur für einen Bildschirm.
Alternativ kann man die Farben auf dem PC berechnen lassen und über USB an einen Arduino nano schicken - das ist die Methode für die ich mich entschieden habe.
Arduino nano ist leider in Europa nicht erhältlich (soweit ich weiß?), alternativ ginge natürlich ein Genuino uno, oder ein Nano-Fake (auf Amazon 5 für 20€ erhältlich, hier muss nur die Steckleiste selbst gelötet werden, was allerdings eigentlich kein Problem sein sollte)
Ich hatte noch ein Paar Nano-Fakes daheim, daher habe ich einen von denen verwendet.

Zur Stromversorgung könnte man ein eigenes Netzteil kaufen, allerdings kommen die LED-Streifen ja schon mit dem passenden Netzteil. Für die Schaltung habe ich daher das letzte Stück des Kabels abgeschnitten und 12V und GND auf ein Board gelötet (schöner wäre hier natürlich eine passende Buchse, die könnte man aus dem IR-Empfängerkasten auslöten)

Der erste Schritt ist das Ansteuern der LED-Streifen mit dem Arduino. Hier kommt schon das erste Problem auf uns zu, der Arduino läuft auf 5V, der LED-Streifen dagegen auf 12V (zumindest meiner). Um das Schalten zu können müssen wir also einen Transistor verwenden (sollte man auch wenn der Streifen 5V hat, da die Ausgänge des Arduino nicht genug Stromstärke bereitstellen können). Hierfür eignen sich die meisten Transistoren, wenn man sich nicht so sicher ist kann man mal hier reinschauen: mikrocontroller.net: Welchen Transistor? . Ich hatte noch die BC548C daheim, daher habe ich die verwendet. Wichtig ist hierbei, den Vorwiderstand an der Basis des Transistors nicht zu vergessen, sonst brennt er durch.

Mein LED-Streifen ist so geschaltet, dass man 12V an einem Pin anschließt und an den anderen 3 eine Leitung zu Ground, um die Helligkeit zu regeln. Schließt man also alle 3 an Ground an, leuchtet der Streifen weiß. Um die Helligkeit der Farben zu regeln verwendet man die Pulsweitenmodulation, eine Technik bei der durch sehr schnelles an- und ausschalten eine Verdunklung erreicht wird. Zum Glück kann der Arduino dass schon ohne eigene Software, hierfür muss nur beachtet werden, einen PWM-Anschluss zu verwenden (z.B. Pin 9-11 des Nanos).

Wichtig ist auch, den GND-Anschluss des Nanos mit dem GND der 12V-Schaltung zu verbinden, sonst kommt es zu komischem Verhalten der LEDs.

Hier eine schemazeichnung der Schaltung die ich verwende:

Fertig sieht das dann so aus:

die Steckerleiste der LED habe ich nach unten angelötet, damit das sehr kurze Kabel nicht noch extra durch das Gehäuse muss.

Das kann man dann mit einem einfachen Arduino-Sketch testen (hierfür zunächst die Arduino-IDE herunterladen, den richtigen COM-Port auswählen und das Programm hochladen: LEDTest.zip (277 Bytes))
Je nach Pinbelegung müssen die Pins im Programm angepasst werden und eine farbe kann innerhalb der Loop eingestellt werden (einfach rgb werte der Farbe in die analogWrite methode einfügen). Wenn alles klappt müssten die LEDs in der eingestellten Farbe leuchten (dunkle Farben können aber abweichen, da LEDs ja nicht schwarz leuchten können)

Damit die Schaltung nicht so offen herumliegt, habe ich mir auch ein Case designt, in dass ich die Schaltung und den Arduino eingeklebt habe. Ich lade die Datei hier auch mal hoch, nur der USB-Anschluss ist zu klein geraten, den musste ich mit einer Feile erweitern, außerdem fehlte die Kabel-Durchführung für das Netzteil, das habe ich nachträglich gebohrt.
AmbiCase.zip (493,6 KB)

Das Ergebnis sieht dann so aus:

1 „Gefällt mir“

Jetzt muss das ganze ja nurnoch über den PC gesteuert werden. Hierfür wird die Serial-Verbindung des Arduinos verwendet. Auf dem PC läuft eine Software, die dem Arduino die errechneten Farbwerte mitteilt. Hierfür gibt es bereits Lösungen z.B. Boblight, allerdings haben alle Nachteile und ich wollte mich auch selbst an einer Lösung versuchen. Daher stieß ich auf diesen Link: Silicon-Republic , auf dem erklärt wurde wie eine solche Software in Processing umgesetzt werden könnte. Dies setzte ich auch um, allerdings flackerte der Mauszeiger so stark, dass ich diese Lösung wieder verwarf.

In den Kommentaren war allerdings eine angepasste Software in Python angegeben, die deutlich besser funktionierte. Anstatt sämtliche Bildpunkte durchzugehen, wurde hier eine Schrittweite eingeführt, außerdem ein Rahmen, der nicht beachtet wurde und eine Gewichtung der R/G/B anteile, um ungleichmäßige Farben der LEDs auszugleichen. In der Praxis fand ich, dass dieser Rahmen allerdings eher negativ ausfiel, deswegen setzte ich den Wert auf 0.
Ich passte die Software dahingehend an, dass während dem Betrieb ein Systray-Icon angezeigt wird (rechts unten in der Symbolleiste), über den man zwischen den Monitoren wechseln kann, das Licht zeitweise ausschalten und das Programm beenden kann.

Hierfür musste ich allerdings noch die Möglichkeit, den 2. Monitor zu scannen, nachrüsten. Hierfür stieß ich auf diesen Link auf github, für die Systray-Icons auf diesen Beispielcode.
Anschließend war ich noch etwas unzufrieden mit den errechneten Farben, mir viel auf, dass starke Ausreißer der Farben das Ergebnis zu stark beeinflusste, ein Bild mit durchgehend Roten hintergrund und 2 mittelgroßen Blauen Flecken (z.B. Star Wars 3) führte zu einem rosa-Farbton, wo man eigentlich ein dunkles Rot erwarten würde. Zunächst versuchte ich also einen Mittelwert-Filter über dem Bild auszuführen. Das Ergebnis war zwar deutlich besser, allerdings dauerte die Berechnung viel zu lange, weshalb die Farben zu verzögert angezeigt wurden.
Ein zweiter Ansatz brachte die Lösung, ich berechnete normal den Mittel-Farbwert, ging anschließend nochmals über das Bild und ersetzte alle Bildpunkte, die zu stark vom Mittelwert abwichen durch den Mittelwert. Anschließend bestimmte ich einen neuen Mittelwert. Dadurch werden stark abweichende Bildpunkte ignoriert, wodurch der Farbton zuverlässig erkannt wird. Den resultierenden Code lade ich hier mal hoch: ambilight.zip (5,4 KB).
Damit der Code läuft müssen allerdings noch ein par .ico dateien im gleichen Ordner abgelegt werden, das sind die Icons die im System-Tray angezeigt werden.

Auf dem Arduino muss natürlich auch ein Programm installiert werden, das einfach nur die Serial-Daten empfängt und anzeigt:
ambilight.zip (618 Bytes)

Testen kann man das Ganze dann ganz gut mit diesem Youtube-Video.

Ich hoffe das Projekt gefällt euch und die Erklärungen sind klar genug. Wenn es Probleme oder Anmerkungen gibt, meldet euch. Ich helfe natürlich gerne :wink:

1 „Gefällt mir“