Go Down

Topic: Projekt: Moodlight (Read 3645 times) previous topic - next topic

ratcatcher

Hi, Ich bin ein Beginner was den Arduino angeht, hab schon ein wenig mit rumgespielt und plane gerade mein erstes "ernsthaftes" Projekt.

Ich dachte mir dass ich mal beschreibe was ich vor habe damit ich nicht ewig rum hampele und es funktioniert garnicht...

RGB-LED, angesteuert mittels PWM (3 digitale out)
5 Programme, wählbar mittels drehschalter(5 digitale in)
3 Potis um eine konstante Farbe(Program 1) einzustellen(3 analog in)

Teile:
1x Arduino Duemilanove
1x RGB-LED Leiste (12V)
1x netzteil 12V
3x Transistoren
3x Poti
1x Drehschalter, 5 Pole

Was meint ihr?
Gruß Andre

Realizer

#1
Aug 17, 2010, 04:36 pm Last Edit: Aug 17, 2010, 04:39 pm by Realizer Reason: 1
Willkommen ratcatcher

Kennst du folgende Seite schon ?

http://www.lochraster.org/fnordlicht/

Vor allem die dort gezeigten Schaltpläne können sehr hilfreich sein :)
Eine Kuh macht muuhh.
Viele Kuehe machen Muehe

volvodani

#2
Aug 17, 2010, 04:42 pm Last Edit: Aug 17, 2010, 04:48 pm by volvodani Reason: 1
Ich habe so etwas schon gemacht nur ohne wählbare Programme wenn du willst kann ich dir meinen Code zur Verfügung stellen. Hatte zuerst ein paar Probleme wenn ich den nebeneinadeliegende bzw Anaolgouts vom gleichen Timer genommen habe.

Zu Hardware ich würde anstatt der Transistoren Buz73A oder IRF540N N Kanal MosFet nehmen die haben "eignetlich" in so einer Anwendung nahzu keine Verluste und sind ohne schnickschnack anzusteuern (Basis wiederstand) einfach Gate an Arudino Source auf Masse und Drain an die Kathoder der LED´s. Oder mittels eines ULN2804A.

Am Ende bin ich jetzt bei einem Attiny25 (13er geht auch) mit Bascom Code gelandet da das nur ein kleiner 8Piner ist und man mit dem Bascom einen sehr guten Soft PWM realisieren konnte. Ich habe ein kleines Moodlight mit einer kleinen RGB LED und 3 BC548 Transen gebaut. Und ein großes ist auch im Bau mit 8 RGB LED und 3 BUZ73A als Treiber.  Die Tiny sind dafür genau richtig der Code is ca 1kB groß in Bascom
"Komm wir essen Opa!" - Satzzeichen retten Leben!

volvodani

#3
Aug 17, 2010, 04:52 pm Last Edit: Aug 18, 2010, 10:37 am by volvodani Reason: 1
Hier der Grund Code:
EDIT: Achtung War auf einem Mega
für 2k9 Board die Ausgänge 3,6,11

Code: [Select]
unsigned int Rval=255;
unsigned int Gval=0;
unsigned int Bval=0;
unsigned long interval=120;
unsigned long pMillis;
int T=0;

void setup (){
 //nothing for setup  
}

void loop(){
 if(millis()-pMillis > interval){
   pMillis=millis();
   if (T>=0 && T<=255){
     Rval=Rval-1;
     Gval=Gval+1;
     Bval=0;  
   }
   if (T>=255 && T<=510){
     Rval=0;
     Gval=Gval-1;
     Bval=Bval+1;
   }
   if (T>=510 && T<=765){
     Rval=Rval+1;
     Bval=Bval-1;
     Gval=0;
   }
   if (T>=765){
     T=0;  
     Bval=0;
     Gval=0;
     Rval=255;
   }
   T=T+1 ;  
 }
 analogWrite(2,Rval);
 analogWrite(7,Gval);
 analogWrite(12,Bval);
}
"Komm wir essen Opa!" - Satzzeichen retten Leben!

ratcatcher

Super und danke euch beiden für die Tipps! Das mit den MosFETs klingt zb sehr gut. Ich probiere es jetzt einfach mal.. Werd dann posten wie es läuft(und ob ;) )

mpeuser

#5
Aug 18, 2010, 05:29 am Last Edit: Aug 18, 2010, 05:35 am by mpeuser Reason: 1
Quote
Oder mittels eines ULN2804A

Wäre auch mein Tipp. Soviel Strom braucht ein 5m-Streifen nicht.  Falls man mal Relais ansteuern will,sind da auch "Freilaufdioden" drinne. Noch etwas kompatibler ist ULN2803. Kostet = 31 Cents.

Quote
Die Tiny sind dafür genau richtig der Code is ca 1kB groß in Bascom

*seufz* Ja, für die Kleinen ist Bascom echt gut....

Joghurt

#6
Aug 18, 2010, 10:24 am Last Edit: Aug 18, 2010, 10:27 am by Joghurt Reason: 1
Ich hab mal einen kleinen Regenbogenalgorithmus für ein Landkartenprojekt geschrieben, den könnte man für sowas vermutlich auch gut verwenden:
Code: [Select]

// Verwendete analoge ports
#define RD_PIN            3
#define GN_PIN            6
#define BL_PIN            9

// Die Anzahl der verwendeten RGB-Gruppen
#define COLORS_LEN      7
// Die verwendeten Farben in  Gruppen {Rot, Grue, Blau}. Die Liste kann erweitert
// oder gekuerzt werden, dann aber nicht vergessen, das COLORS_LEN anzupassen!
int COLORS[COLORS_LEN][3] = {
 {255, 0, 0}, {255, 255, 0}, {0, 255, 0}, {0, 255, 255}, {0, 0, 255}, {255, 0, 255},
 {255, 0, 0} // Die letzte Farbe muss auch die erste Farbe sein!
};

long MAX, val;

void setup () {
 // Nach 120 Sekunden von vorne anfangen, kann beliebig geaendert werden...
 MAX = 1000 * 120;
}

void loop () {
 val = millis() % MAX;
 double i = (double)((COLORS_LEN-1)*val)/MAX;
 analogWrite(RD_PIN,(int)(COLORS[(int)i][0]*(1-i+(int)i)+COLORS[(int)i+1][0]*(i-(int)i)));
 analogWrite(GN_PIN,(int)(COLORS[(int)i][1]*(1-i+(int)i)+COLORS[(int)i+1][1]*(i-(int)i)));
 analogWrite(BL_PIN,(int)(COLORS[(int)i][2]*(1-i+(int)i)+COLORS[(int)i+1][2]*(i-(int)i)));
}

Ich geb aber keine Garantie dafür, dass das ohne kleinere Anpassungen funktioniert, ich hab das grade eben auf die Schnelle von Java umgesetzt und keine Entwicklungsumgebung hier um es zu testen... ;)

volvodani

Für weichere Übergänge könnte man die Hinterlegten Werte im Array doch in der Loop addieren bzw subtrieren dann hat man einen schönes Fading.
"Komm wir essen Opa!" - Satzzeichen retten Leben!

Joghurt

Ich bin nicht sicher was Du meinst...?

volvodani

In deinem Code geht er doch nur durch das Array Colors und liest  dann die Farben z.B. 255,255,0 und geht dann zur nächsten Farbe. Wenn man doch jetzt die einzelenen Werte im Array addieren z.B 1-255 und 255-1 dan hätte man doch einen schönen weichen übergang zwischen den Farben
"Komm wir essen Opa!" - Satzzeichen retten Leben!

Joghurt

#10
Aug 18, 2010, 06:28 pm Last Edit: Aug 18, 2010, 06:32 pm by Joghurt Reason: 1
Nein, der Code faded in der angegebene Zeit (hier 120 Sekunden) einmal komplett weich durch das Array und fängt dann wieder von vorne an.

Das Schöne daran ist, dass man nicht nur "0" oder "255" angeben kann, sondern auch jeden beliebigen Wert dazwischen. :)

Go Up