Forum: Projekte & Code Moodlight mit 8 Modi! Code, Schaltplan, Layout


von Joachim B. (jojo84)


Angehängte Dateien:

Lesenswert?

Hallo liebe Forengemeinde,

weil es noch nicht genug Moodlight-Projekte gibt wollte ich das Meinige 
hier auch mal vorstellen. Ich halte es für nichts spektakuläres, es 
könnte aber als nette Übung für Anfänger dienen. Das Programm ist schon 
ein paar Jährchen alt und stellt nicht den Anspruch perfekt zu sein.

Gedacht ist das ganze, um es anstatt einer normalen Glühbirne in eine 
„FADO“-Lampe von Ikea einzubauen 
(http://www.ikea.com/de/de/catalog/products/80096372).
Ich habe (hoffentlich) alles angehängt, was man für den Nachbau braucht 
(Sourcecode, AVR Studio Projekt, Schaltplan, Layout).


SOFTWARE:
Die Software ist für einen Atmega8 @ 8MHz geschrieben. Davon hatte ich 
noch welche und die mußten weg. Die Software ist aber problemlos auf 
einen tolleren Atmega88 umzuschreiben.

Folgende Features sind in der Software implementiert:
- Sinusförmiger Blendverlauf (bringt nicht viel, war nur zum 
Ausprobieren)
- Bedienung mit nur einem Poti und einem Taster
- 8 verschiedene Modi
- Automatische Auswahl des zuletzt gewählten Modus beim 
Wiedereinschalten
- LED-Test-Funktion


Beschreibung der einzelnen Modi:
1.       Sanftes Überblenden rund ums Farbdreieck (rot, gelb, grün, 
cyan, blau, pink, weiß, rot…)
2.       Sanftes Überblenden, konstanter Phasenversatz zwischen den 
Grundfarben von 120°
3.       Hartes Umschalte bzw. Mischen der Farben wie bei Modus 1
4.       Stroboskop
5.       Rot einzeln auf- und abblenden
6.       Grün einzeln auf- und abblenden
7.       Blau einzeln auf- und abblenden
8.       Direkte Farbwahl, kein Blendvorgang

Bei Modus 1-7 ist die Geschwindigkeit über das Poti einstellbar, bei 
Modus 8 kann über das Poti eine Farbe, des unter Modus 1 beschriebenen 
Verlaufs, direkt ausgewählt werden.


HARDWARE:
- Ich bin KEIN begnadeter Layouter. Es kommt aber ja hauptsächlich 
dadrauf an, daß es funktioniert. Das Layout hab ich komplett bedrahtet 
gemacht und versucht möglichst viel auf eine Platinenseite zu kriegen. 
Das macht es einfacher, um es zu Hause mit Bastlermitteln zu fertigen. 
Ich habe die Platine mit der Toner-Transfer-Methode hergestellt. Gebohrt 
habe ich von Hand mit einem Dremel und 0,6 – 1,2 mm Bohrern. Vorher mit 
einer Spax-Schraube „angekörnt“.

Zu Beachten: meine verwendeten Transistoren waren so gammelige 
Uralt-Dinger von Pollin (JC501). Die haben eine andere Pinbelegung, als 
„normale“ BC547 oder so. Man muß also entweder das Layout für andere 
Transistoren anpassen, oder man biegt einfach die Beinchen der 
Transistoren so, daß es zum Layout passt ;) . Das funktioniert sehr gut!

- Als LEDs hab ich 3 sechsbeinige RGB-SUPERFLUX-LEDs genommen. Sowas wie 
diese eBay-Artikelnummer hier: 160473585868. Wer andere LEDs benutzen 
will muß das Layout ggf. anpassen…

- Die Platine hat vier Pins für die Versorgungsspannung. Zwei davon 
haben eine Diode zum Verpolungsschutz drin. Die anderen beiden waren 
eigentlich dafür gedacht, um die Spannungsversorgung von einer Lampe zu 
einer weiteren durchzuschleifen. Das funktioniert auch, aber ich hab 
Abstand davon genommen, weil man dann immer mehr Dioden in Reihe hätte. 
Man kann natürlich die Dioden gegen Drahtbrücken ersetzen ;) .

- Alle Vorwiderstände für die LEDs sind gleich. Warum? Rot hätte 
eigentlich (rein rechnerisch) einen größeren R bekommen, als Grün und 
Blau. Weil mir das Rot aber im Verhältnis zu dunkel war hab ich einfach 
alle Widerstände gleich „klein“ gemacht. An die Messwerte erinnere ich 
mich nicht mehr so genau, ich glaube Rot zog 22mA, Grün und Blau 18mA 
oder so…

- Ach ja, die Spannungsversorgung: 5V, ca. 200mA



So, wenn noch irgendwas fehlt einfach Bescheid sagen oder Fragen fragen. 
Vielleicht hat ja jemand Freude am Nachbau oder an der Weiterentwicklung 
=)



Gruß,
Joachim

von Max M. (computerzoo)


Lesenswert?

Sehr schön gemacht, das Projekt werde ich bestimmt mal in Angriff 
nehmen, wenn die Tage kälter und länger werden.
Besten Dank für das Bereitstellen der Dateien.

von Daniel C. (cecky)


Lesenswert?

Moin,

ich hatte am WE ein wenig Zeit und hab mir diese Projekt mal 
vorgenommen.
Habe lediglich die Transistoren durch ULN2803 ersetzt und benutze 4 
SUPERFLUX-RGB Leds. Es läuft hervorragend und sieht einfach klasse aus!!

Besten Dank Joachim !!

mfg
Cecky

von Joachim B. (jojo84)


Lesenswert?

@Daniel:

freut mich, wunderbar :) . Mach doch mal ein paar Fotos von deinem 
Aufbau, würde mich interessieren :) .

Gruß

von Bastler (Gast)


Lesenswert?

Ein kleiner Verbessungsvorschlag zu Modi 8, wäre denkbar über poti den 
gesamten Farbspektrum "durchzufahren" ? also nicht nur die Farben die im 
Modi 1 hinterlegt sind ?

Wäre klasse !!

von Daniel C. (cecky)


Angehängte Dateien:

Lesenswert?

@Joachim:

Auch auf die Gefahr hin mich hier zum Honk zu machen, hab ich mal ein 
Bild vom Endprodukt gemacht. Die Funktion sollte dir ja bekannt sein :-) 
Da ich das ganze zuerst in eine Lampe aus dem Baumarkt setzen wollte, 
musste alles auf ne Platine mit ne Kantenlänge von 55mm passen. Da ich 
leider keine Erfahrung im Platinenätzen habe, und dies in der 
Mietwohnung auch nicht anfangen möchte, blieb nur Lochraster. Ich würde 
den Aufbau aber als kreatives Chaos bezeichnen wollen :-)

mfg
Cecky

von AVR Fan (Gast)


Lesenswert?

Hallo,

schönes Projekt, klappt wunderbar - danke.

Ich musste aber feststellen das die Fusebits nicht automatisch 
mitgeflasht werden.
Für den fortgeschrittenen User oder bei "frischen" AVR kein Problem. 
Sollte aber der total unbedarfte Anfänger (mit einen einfachst 
Programmer)  einen AVR nutzen der vorher auf externen Quarz "gefuset" 
wurde wird er ein Problem bekommen da der AVR nicht arbeiten wird 
(externer Quarz nicht vorhanden).

Ein Hinweis wie die Fuses eingestellt werden müssen (nachkontrolliert 
werden) wäre sicherlich hilfreich da es sicherlich einige (wenige) hier 
gibt die die Schaltung einfach nur nachbauen wollen und keine 
tiefergehende Kenntnisse bezüglich des AVRs haben.

Sind eigentlich die absoluten Grundlagen aber für den "nur Nachbauer" 
der froh ist den ATMega mit Ponyprog und einfachst Programmer irgendwie 
programmiert zu bekommen nicht unbedingt selbstverständlich.

mfg

   "AVR Fan"

von Joachim B. (jojo84)


Lesenswert?

@Daniel:
hey, das sieht doch wunderbar aus :) . Meine Projekte sahen bis vor 
einem Jahr auch noch so aus. Das mit dem Ätzen der Platinen ist aber nur 
halb so schlimm, selbst in Mietwohnungen. Meine Küche sieht noch Tiptop 
aus ;) . Aber warum hast du zwei Transistor-Arrays verbraten?! Hätten 
nicht eigentlich drei Transistoren gereicht? Oder treibst du jede LED 
einzelnd (12 Stk)?

@Bastler:
Hmm, ich weiß nicht so genau, was du meinst. Ich weiß, daß es da diese 
verscheidenen Farb... ähm... na also z.B. "RGB", "HSV" und "YUV". Meinst 
du das? Da hab ich leider kaum Ahnung von. Außerdem wird das Programm 
für Anfänger dann evtl. noch schwieriger, wenn Farbwerte erst noch durch 
verschiedene Systeme transformiert werden müssen, oder? Wie auch immer, 
wenn du dich da auskennst kannst du es ja mal versuchen einzubauen. 
Sourcecode ist ja oben :) .

@AVR Fan:
da hast du natürlich recht, auf die Fuses geh ich eher "sparsam" ein ;) 
... Kann ich bei Gelegenheit mal nachpflegen. Aber andererseits: selbst 
ein Anfänger sollte sich erstmal mit den Fuses, als mit der PWM und dem 
ADC befassen. Und spätestens bei dem Verweis auf die "8 MHz" sollte man 
sich ja fragen, ob man das so eingestellt hat ;) . Sind ja schließlich, 
wie du schon sagst, die absoluten Grundlagen. Bei Gelegenheit kann ich 
dann ja noch eine Version für den Atmega88 hochladen. Da wird das dann 
mit den Fuses noch wichtiger, weil die meisten Anfänger das 
"DIV8"-Fusebit gekonnt ignorieren ;) ...

Danke für die Anregungen und das Foto!

Gruß,
Joachim

von Daniel C. (cecky)


Lesenswert?

@Joachim

Ich hab die ULN's nur benutzt, weil ich keine Transistoren mehr in 
meinem Bestand hatte. Und da ich einfach Bock hatte den Lötkolben zu 
schwingen, hab ich genommen was da war, und das waren in diesem Fall die 
ULN2803 :-)

von Daniel J. (n0i5ebreak3r)


Lesenswert?

Guten Abend zusammen,

Ich habe dieses tolle Projekt entdeckt, das mir soweit meine Wünsche 
erfüllt, allerdings bekomme ich das Programm nicht auf den ATmega32 
umgeschrieben. Die "free running" variable und die Ports habe ich 
entsprechend angepasst aber es läuft nichts. Der ATmega32 läuft mit 8Mhz 
intern. Im AVR Studio bekam ich jede menge Fehler "redefinition error" 
im AVR Studio 5 gab es keine Fehler dies bezüglich. Hätte da jemand 
etwas für mich?

Edit: Hat sich erledigt. War mein Fehler beim Build mit AVR Studio 5 
habe ich nur "Build Solution" angeklickt und nicht "Build Projekt1". Da 
kann ich dann so oft Flashen mit AVR Brenner wie ich will... Ja ist 
schon spät ...:)

Grüße, Daniel J.

von Daniel J. (n0i5ebreak3r)


Lesenswert?

Ich bin es nochmal,

das Programm läuft soweit aber noch nicht ganz so wie es soll z.B. 
funktioniert der LED-Test nicht sowie die Stroboskop Funktion. Im Modus 
8 kann ich nur zwischen rot-orange und grün mit dem Poti regeln. Hat 
jemand ein paar Ideen wo dran es liegt

Gruß, Daniel J.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Noch eine Modifikation einer IKEA-Leuchte (in diesem Falle einer mit 
RGB-LED) wird hier beschrieben:
http://www.heise.de/newsticker/meldung/LED-Lampe-von-Ikea-aufgemotzt-1418509.html

von Joachim B. (jojo84)


Lesenswert?

Moin,

da freu ich mich ja, daß meine Version bisher so gut angenommen wurde :) 
.

@ Daniel:
also vorweg frag ich mich erstmal ganz akut, warum du das Programm 
unbedingt auf einen Mega32 bannen willst. Der ist doch viel zu... naja, 
wie mit Kanonen auf Spatzen zu schießen :) !
Zu deinem Problem: das klingt merkwurdig. Funktionieren denn alle 
anderen Modes wie gewünscht? Was genau machen der Stroboskop und der 
Test Modus denn (nicht)? Mal davon abgesehen, daß ich oben vergessen 
habe, den Testmodus zu beschreiben... Du mußt doch nur beim Strom 
anmachen den Taster gedrückt halten...
Zeig doch einfach mal dein Programm, dann kann ich mir das mal angucken 
ob da vielleicht was falsch umgeschrieben wurde.

@Rufus:
nicht schlecht, sieht hübsch aus :)

@all:
ich lade demnächst (vielleicht heute) eine neue Version des Programms 
hoch. In der Version ist die Software weitreichend umstrukturiert und es 
wurde ein neuer Modus, der "Slave-Modus" hinzugefügt... näheres dazu 
später, man darf gespannt sein ;) ...

Gruß,
Joachim

von Joachim B. (jojo84)


Angehängte Dateien:

Lesenswert?

Hallo nochmal,

wie versprochen hier nochmal die überarbeitete Version des Moodlights. 
Die grundlegende Neuerung ist, daß jetzt mehrer Lampen "in einer Reihe" 
zusammengeschaltet werden können, so daß alle Lampen die (fast) exakt 
gleichen Leuchtmuster erzeugen, wie die "Master"-Lampe. Dafür hat jede 
Lampe einen fest definierten Ein- und Ausgang, der jeweils zum 
Weiterreichen der Versorgungsspannung und zum Senden/Empfangen der 
Farbcodes dient.

Wie angekündigt ist die Software etwas neu strukturiert.

Die wesentlichen Änderungen in der Software sind:
- neuer Modus eingebaut (9, Slave Mode)(s.u.)
- alle Farben werden als PWM ausgegeben und nicht mehr durch das direkte 
Schalten der Portpins (ehemals z.B. bei Mode 3, harte Farbumschaltung)
- In Mode 1-8 werden die Werte für die Farben per UART rausgeschickt
- ADC für Poti läuft im free-running-mode
- Das Abfragen und entprellen des Tasters passiert im Timer-Interrupt

Die Änderungen ander Hardware:
- an die UART-Pins (RX, TX) wurden jeweil Widerstände eingebaut, um den 
Controller zu schützen
- ein Quarz wurde eingebaut
- ein 5V-Spannungsregler wurde eingebaut

Zum Slave-Modus:
Im Slave-Modus wartet die jeweilige Lampe darauf, das ein neuer Farbcode 
empfangen wird (UART-RX-Interrupt). Das der "Datenstream" aus drei 
Farbcodes besteht (RGB) muß ermittelt werden können, wo der Stream 
losgeht. Dafür dient das 9. Datenbit, was nur beim Übertragen des 
Rot-Codes gesetzt ist. Der empfangen Farbcode wird daraufhin an eine 
eventuelle weitere Lampe rausgesendet.
Ist eine Lampe nicht im Slave-Modus, ist sie automatisch "Master". Das 
heißt sie sendet ihre Codes nur raus, ohne sich um Empfangenes zu 
kümmern.

Zur Hardware:
für die Nutzung des UART ist der externe Quarz eigentlich fast Pflicht. 
Ich hatte erst keine Quarz dran, aber das hat nicht zufriedenstellend 
funktioniert. Zumal ja jeder Controller seine eigenen Toleranzen hat. 
Und mit etwas Pech können zwischen des RC-Frequenzen von zwei 
Controllern 20% liegen...! Wichtig also: FUSES RICHTIG SETZEN!
Als Verbindung zwischen den Lampen hatte ich ein 3,5mm-Klinkenkabel 
vorgesehen. Dabei war die Spitze mit "+" belegt, die Mitte mit Daten, 
und das untere Dings (Schaft?) mit "-". Damit hab ich mich an die 
Belegungs-"Regel" gehalten, die bei Spannungsversorgung über 
Klinkenstecker meist eingehalten wird (außer der Mittelteil für 
Daten...). Durch die Reihenwiderstände in der RX- und der TX-Leitung 
kann auch ein Mono-Klinkenstecker, den manche Netzteile haben, zur 
Spannungsversorgung benutzt werden. Auch ein Vertauschen der Sende- und 
Empfangsbuchsen an den Lampen ist ungeführlich.
Der 5V-Spannungsregler wurde eingebaut, weil folgendwas Problem auftrat:
bei minderwertigen Klinkekabeln geht eine Menge Spannung auf der Strecke 
bis zur letzten Lampe verloren, wenn man versucht, die 5V direkt 
durchzuschleifen. Ich hatte bei zwei Slave-Lampen mit je 3m Zuleitung am 
1. Slave nurnoch 3,8V, und am 2. sogar nurnoch 3,2V. Das führt dann 
dazu, daß diese Lampen durchschnittlich "roter" erscheinen, weil die 
grüne und die blaue LED eine höhere Durchlassspannung haben, als rot. 
Das ist auch in dem Video zu erkennen... Da hatte ich den Umbau mit dem 
5V-Spannungsregler an jeder Lampe noch nicht vorgenommen.

So, das wars erstmal. Viel Spaß damit!

Gruß,
Joachim

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.