LED Nachtlampe mit Infrarotfernbedienung und Sleep-Timer

Plämprige LED-Lampen mit langweiligen Farbwechseleffekten gibt es heute bereits für wenig Geld zu kaufen...

Allerdings lässt der Funktionsumfang der handelsüblichen LED-Effektlichter stark zu wünschen übrig. Steuerung über eine Infrarotfernbedienung oder wenigstens ein Sleep-Timer war bislang nichtmal mit Aufpreis zu haben.

Also mal wieder selber bauen!

...das Ergebnis (nur einige der vielen Farbschemas gezeigt):

(Bild anklicken zum Vergrößern) (Bild anklicken zum Vergrößern)

Eine billige 230 V Nachttischlampe aus dem Baumarkt mit den drei Buchstaben wurde hier mit zwei Mikrocontrollern und 18 farbigen Hochleistungs-LEDs kräftig getunt.
Über einen Infrarotsensor hört die Lampe auf RC5-Kommandos einer stinknormalen Philips-Fernbedienung oder einer programmierbaren Infrarotfernbedienung, wie es sie inzwischen überall zu kaufen gibt.
Die einstellbaren, animierten Farbschemas sorgen beim Einschlafen oder als Kontrast beim Fernsehen für eine angenehme Atmosphäre.

6 weiße, kontinuierlich leuchtende LEDs ermöglichen ebenfalls den Betrieb als Leselampe
(Bild anklicken zum Vergrößern)


Eine Zweifarb-LED im Sockel der Lampe signalisiert den Satus sowie das Eintreffen von Infrarotkommandos.

Leuchtet die LED dauerhaft rot, so ist der Sleep-Timer aktiviert. Nach 25 Minuten dimmt die Lampe selbständig langsam aus.

(Bild anklicken zum Vergrößern)


Die Hardware
Die Platinenunterseite, teilweise bereits mit SMD-Chipwiderständen bestückt.

Die beiden Spannungsregler rechts sind zum Testen provisorisch angelötet. Später werden diese mit dem Metallgehäuse verschraubt (Wärmeabfuhr) und über Kabel mit der Platine verbunden.

(Bild anklicken zum Vergrößern)



(Bild anklicken zum Vergrößern)



Die Oberseite.

Ich habe alles vorsichtshalber etwas überdimensioniert um spätere Hardwareprobleme zu vermeiden. Womöglich wäre man ohne die Treibertransistoren für die LEDs ausgekommen. Da aber jede LED durchschnittlich 20 mA verbrät wollte ich lieber sichergehen, um die Lebensdauer des LED-Steuerchips (in der Mitte) nicht künstlich zu verkürzen...

Auf der Platine sind ein PIC16F648A (der kleine IC) sowie ein PIC18F452 verbaut.



(Bild anklicken zum Vergrößern)
Diese Lösung, um die LEDs irgendwie im Inneren des Glasgehäuses zu fixieren gefiel mir zunächst nicht so sehr, funktioniert aber bestens...
Das Chaos auf der Rückseite des Pappkegels zeige ich hier besser nicht. die LEDs wurden zunächst mit Anschlusskabeln versehen und dann mit Heißkleber fixiert.
Vorher habe ich allerdings die klaren LED-Gehäuse mit grobem Schleifpapier aufgerauht, um den mikrigen Abstrahlwinkel der superhellen LEDs (meist < 35°) zu vergrößern. Auf dem Milchglas der Lampe zeichnen sich zwar immer noch deutliche Lichtpunkte ab, aber es hat trotzdem geholfen.


(Bild anklicken zum Vergrößern)
Hier sieht man die Lampe kurz vor der Vollendung.
Alles ist bereits an seinem Platz. Die Spannungsregler wurden an der Hinterseite des Blechgehäuses angeschraubt, um die Verlustwärme an das Gehäuse und die Umgebung abzugeben (im schlimmsten Fall braucht die Schaltung schon mal 800 mA)
Der Infrarotempfänger (TSOP1738) sitzt an der Gehäusefront neben der Duo-LED.
Im Normalbetrieb wird das ganze noch durch eine Bodenblechplatte verschlossen.
Auf dem Foto sind der Brenner (Brenner5 von Sprut) und ein selbstgestrickter RS-232 Programmierdongel noch angeschlossen.


Die Software
Die Funktionsweise ist eigentlich recht einfach. Der PIC16F648A empfängt über den TSOP1738 Infrarotkommandos, welche er auch sofort dekodiert (siehe auch RC5-Tutorial). Über ein serielles Interface wird dann ein Steuerbefehl an den PIC18F452 gesendet. Der PIC16F648A übernimmt ebenfalls die Aufgabe des Sleep-Timers. Ist die Zeit um, wird einfach ein entsprechendes Kommando an den PIC18F gesendet, welcher sich daraufhin in den Sleep-Modus begibt (wie passend :) 
Die gesamte "Drecksarbeit" erledigt der PIC18F. Hier habe ich eine 18-Kanal Software-Pulsweitenmodulation (PWM) implementiert (die bei 40 Mhz Controllertakt grade noch eine ausreichende PWM-Frequenz erzeugt). Sämtliche Animationseffekte, Fade-Outs, Fade-Overs usw. werden ebenfalls von dem PIC18F gesteuert (in dessen Programmspeicher trotzdem gähnende Leere herrscht)
Da mir schon von vornherein klar war, dass ich hier viel rumtüfteln müsste, habe ich den PIC18F vor dem Einbau mit einem Bootloader ausgestattet, um die Firmware flott auf den neusten Stand bringen zu können. Die Platine verfügt über einen 4-Pol-Steckverbinder, an den ein RS-232-Dongel mit MAX232 - Treiberchip angeschlossen werden kann. So musste der Treiberchip für das serielle Interface nicht noch unnötigerweise auf der Hauptplatine plaziert werden.
Der PIC16F648A wurde wie gewohnt über einen ICSP-Steckverbinder mit dem Brenner5 von www.sprut.de gebrannt. Glücklicherweise hielten sich hier die Programmupdates in Grenzen, so dass man ein paar lahme Brennvorgänge verkraften konnte...

Die fernsteuerbaren Funktionen sind derzeit:

An/Aus :)
Sleep-Timer (de)aktivieren
Helligkeit in 8 Stufen einstellen
Farbschema wechseln
(direkte Anwahl über die Nummerntastatur)
Animationsgeschwindigkeit einstellen
(8 Stufen)
Fade-Effekte (beim Ein-/Ausschalten, Farbschemawechsel)



Die serielle Kommunikation zwischen den zwei PIC-Mikrocontrollern hat von Anfang an Probleme bereitet. Das liegt daran, dass der Interrupt, welcher für das Ein- und Ausschalten der LEDs zuständig (also die Pulsweitenmodulation) ist nach nur 205 Befehlen ausgelöst wird, die Interruptroutine selbst hat aber einen deutlich größeren Umfang. Der Controller verbringt also deutlich mehr Zeit in der Interrup-Serviceroutine als im normalen linearen Programmablauf.
Es lässt sich bestimmt darüber streiten, ob dies so im Sinne des Erfinders ist. Für mich hat allerdings eine konstante PWM-Frequenz höchste Priorität, was somit bestens erreicht wird.
Bei dem ersten Lösungsversuch des seriellen Interfaces hat der PWM-PIC allerdings (zum Glück nur sehr selten) ein eingehendes Kommando verschlafen bzw. erst mitten in der Botschaft darauf reagiert. Dieses Problem habe ich nun durch eine dritte Verbindungsleitung zwischen Infrarot-Empfänger-PIC und dem PWM-PIC gelöst. Über diese Verbindung bestätigt der PWM-PIC jedes einzelne Bit, die Kommunikationsgeschwindigkeit passt sich so automatisch der "Freizeit" des PWM-PICs an.

Da die pulsweitenmodulierten Controllerausgänge zur Vereinfachung der Schaltung nicht tiefpassgefiltert werden, ist eine hohe PWM-Frequenz nötig, sonst macht sich das ständige An- und Ausschalten der LEDs durch fieses Flackern bemerkbar. Mit 20 Mhz Mikrocontroller-Taktfrequenz trat dieses Problem teilweise auf, vorallem, wenn viele LEDs angesteuert wurden.
Nach dem Austauschen des 20 Mhz-Quarzes gegen einen 10 Mhz Quarz ließ sich das Problem lösen. Die Aktivierung des internen PLLs (Phase Lock Loop) vervierfacht die Quarzfrequenz und der PIC läuft nun mit seiner Maximalfrequenz von 40 Mhz. Im Endeffekt wurde so eine Verdopplung der Mikrocontrollerfrequenz und somit vor allem auch der PWM-Frequenz erreicht.

Am Oszilloskop zeigt sich eine minimale Frequenz von ca. 100 Hz, sind nur wenige LEDs aktiv lassen sich jedoch mindestens 150 Hz erreichen.
Ein Flackern ist nun nicht mehr sichtbar, auch wenn viele LEDs aktiv sind.

Eine Optimierung der Firmware mit Assembler würde die Frequenz wahrscheinlich noch weiter steigern können, das wollte ich mir allerdings nicht antuen...




LED-Moodlight Version 2
Inzwischen habe ich eine abgespeckte Variante des LED-Nachtlichts entwickelt. Dieses ist weder fernsteuerbar, noch besitzt es einen Sleep-Timer sondern produziert die Lichteffekte direkt, sobald die Spannungsversorgung anliegt. Das Verhalten der Lampe (priorisierte Farschemata, Animationsgeschwindigkeit, Farbschemawechselgeschwindigkeit usw.) lässt sich durch ein komfortables Interface über die RS232-Schnittstele mit einem beliebigen Terminalprogramm konfigurieren.

Die Lampe in Aktion. Diese Version habe ich in eine Milchglaskugel eingebaut. Zur Streuung der Lichtkegel der LEDs wurden auch diese wieder mit Schleifpapier aufgerauht und zusätzlich die Kugel mit durchsichtigem Luftkammerpolstermaterial ausgestopft.

Erster Hardwaretest:
Zusammengebaut handelt es sich um eine Sandwich-Konstruktion. Auf der unteren Platine befinden sich zwei 7805 Spannungswandler mitsamt Kühlkörpern, die Hauptplatine mit dem PIC wird mit Abstandsbolzen darüber befestigt.
(Bild anklicken zum Vergrößern)

Die vollständig bestückte Platine aus der Vogelperspektive.
Der Hauptprozessor ist ein PIC18F452, der mit 40 MHz getaktet wird.
(Bild anklicken zum Vergrößern)

Die fertige Lampe ohne Glaskugel bei der Arbeit...
(Bild anklicken zum Vergrößern)



Home
Letztes Update: 28.10.2007