Eine LED Aquarium Beleuchtung selber bauen
In diesem Artikel möchte ich euch ein kleines Projekt vorstellen, dass man wohl am besten unter dem Stichwort "Upcycling" einordnen kann. Letztes Jahr habe ich mein Bad renoviert, und dabei ist auch der alte Spiegelschrank ausgemustert worden. Allerdings ist er nicht einfach in den Müll gewandert, sondern ich habe ihn zerlegt und die wichtigsten Teile aufgehoben. Unter anderem auch die Aluminium Profile, aus denen der Rahmen bestand. Jetzt hat mich meine Freundin auf die Idee gebracht, aus dem Profil eine schöne LED Aquarium Beleuchtung zu bauen, da wir kürzlich etwas Ähnliches in einem Restaurant gesehen haben.
Die einzelnen Schritte
Das Aquarium ist knapp 50 cm breit. Da das Profil etwas länger war, musste ich es erst etwas kürzer sägen. Danach habe ich in die zukünftige Unterseite zwei Rechtecke gefräst. In diese Rechtecke sollen jeweils 4 LEDs eingebaut werden. Die LEDs haben eine Betriebsspannung von 12 Volt und eine Leistung von 2 Watt. Da die Kanten der Rechtecke nicht sonderlich schön sind, habe ich mir zwei Blenden konstruiert und ausgedruckt. Das ist auch der Grund, warum ich zwei kleine Rechtecke statt einem großem Rechteck ausgefräßt habe, da mein Drucker höchstens 20 cm große Teile Drucken kann.
Danach werden die LEDs mit Zweikomponentenkleber in das Profil geklebt. Das Profil dient auch gleichzeitig als Kühlkörper, da die LEDs unbedingt gekühlt werden müssen. Nachdem der Kleber ausgehärtet ist, werden die einzelnen LEDs verkabelt.
Die seitlichen Befestigungen für das Profil sind auch aus dem 3D-Drucker. Eine Seite enthält auch gleich das Gehäuse, in dem die Elektronik untergebracht wird.
Die Elektronik der Beleuchtung besteht aus nur wenigen Bauteilen. Ein ESP32 Mikrocontroller steuert die Helligkeit der Beleuchtung. Dazu wird über das WLAN die aktuelle Uhrzeit geladen und abhängig davon automatisch die Helligkeit gesteuert. Das Profil, wann es wie hell sein soll, ich fest im Code eingebaut. Hier könnte man natürlich noch viel mehr Aufwand betreiben, z.B. eine Steuerung per Handy, aber es funktioniert auch so sehr gut. Die LEDs werden mit einem MOSFET Transistor vom Typ IRF3708 geschaltet. Wie man LEDs mit einem Mikrocontroller steuern kann, habe ich in meinem letzten Artikel erklärt. Da der MOSFET wie ein Schalter funktioniert, wird die Helligkeit der LEDs per Pulsweitenmodulation mit dem ESP32 reguliert. Ansonsten wird noch ein Spannungsregler benötigt, der aus der 12 Volt Versorgungsspannung die 5 Volt für den Mikrocontroller erzeugt.
Die Platine wird dann einfach in das Gehäuse geschoben und die Kabel der LEDs mit der Platine über einen Stecker verbunden. Seitlich ist eine kleine Öffnung im Gehäuse, damit der ESP32 per USB noch angeschlossen werden kann, falls Änderungen in der Software notwendig sein sollten.
Bevor alle Teile endgültig verklebt werden, muss die Beleuchtung natürlich getestet werden. Dazu habe ich LEDs einige Tage bei voller Helligkeit laufen lassen und dabei vor allem die Temperatur überwacht. Das Aluminiumprofil wurde aber nur leicht warm, d.h. die Wärme wird sehr gut ableitet.
In dem fogenden Video sieht man, dass auch die Pulsweitenmodulation wie erwartet funktioniert.
Für technisch Interessierte hier auch noch der Code für die Steuerung der Helligkeit. Dazu wird die LED-Steuerung (LEDC) des ESP32 verwendet.
// PWM-Konfiguration #define PWM_FREQ 1000 // 1000Hz PWM #define PWM_RESOLUTION LEDC_TIMER_16_BIT // Auflösung von 16 Bit = Maximum bei 1000Hz #define MIN_DUTY 0 // Minimaler duty cycle Wert #define MAX_DUTY 65535 // Maximaler duty cycle Wert #define LEDC_CHANNEL LEDC_CHANNEL_0 // LEDC-Kanal // PIN für LED-Ausgang #define LED_PIN 16 void app_main(void) { esp_err_t ret; ledc_timer_config_t ledc_timer = { .duty_resolution = PWM_RESOLUTION, .freq_hz = PWM_FREQ, .speed_mode = LEDC_HIGH_SPEED_MODE, .timer_num = LEDC_TIMER_0, .clk_cfg = LEDC_USE_APB_CLK, }; ledc_channel_config_t ledc_channel = { .channel = LEDC_CHANNEL, .duty = 0, .gpio_num = LED_PIN, .speed_mode = LEDC_HIGH_SPEED_MODE, .timer_sel = LEDC_TIMER_0 }; time_t now; struct tm timeinfo; int brightnessArray[24] = { ... }; ledc_timer_config(&ledc_timer); ledc_channel_config(&ledc_channel); ledc_fade_func_install(0); time(&now); localtime_r(&now, &timeinfo); // Beim Start LEDs dunkel ledc_set_duty(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL, 0); int current_state = 0; // Maximalwert hängt von PWM_RESOLUTION ab int max_duty = (1 << PWM_RESOLUTION) - 1; // Bei 16 Bit ist das 65535 while (1) { time(&now); localtime_r(&now, &timeinfo); int hour = timeinfo.tm_hour; int target_state = brightnessArray[hour]; if (target_state != current_state) { current_state = target_state; if (target_state == 0) { ledc_set_fade_with_time(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL, MIN_DUTY, 10 * 60 * 1000); // Ausschalten, 10 Minuten Fade-Zeit } else { ledc_set_fade_with_time(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL, MAX_DUTY, 10 * 60 * 1000); // Einschalten, 10 Minuten Fade-Zeit } ledc_fade_start(LEDC_HIGH_SPEED_MODE, LEDC_CHANNEL, LEDC_FADE_WAIT_DONE); } vTaskDelay(60 * 1000 / portTICK_PERIOD_MS); // Warten für 10 Sekunden } }
Zuletzt werden die Blenden und die Seitenteile mit dem Profil verklebt. Dafür habe ich gewöhnliches Sanitärsilikon verwendet. In die Blenden sind noch zwei Plexiglas Scheiben geklebt, was man auf dem Foto leider nicht wirklich erkennen kann.
Und so schaut die fertige Beleuchtung von unten und von oben aus.
Das letzte Foto ist natürlich die Beleuchtung im Betrieb. Ich finde, sie schaut eigentlich wie gekauft aus :-)
Damit ist dieses kleine Projekt abgeschlossen. Bis auf die LEDs und dem MOSFET ist die komplette Beleuchtung nur aus Resten gebaut worden, vom Aluprofil über den ESP32, dem Spannungsregler, alten Filamenten bis zum Netzteil, das früher einen Laptop versorgt hat.