AdSense

Montag, 17. Februar 2014

LED-Band mit ATmega / Arduino ansteuern

(English version) In letzter Zeit erfreuen sich LED-Streifen erhöhter Beliebtheit. Inzwischen gibt es sogar schon für Preise unter 20 Euro LED-Streifen aus China bei Ebay. Normalerweise hat ein LED-Streifen ein Steuergerät, ein Netzteil und eine Fernbedienung. Für die meisten Menschen mag das reichen, wer aber mehr will (z.B. gezielt Sequenzen durchfahren) der muss ein (ganz kleines) bisschen Arbeit hineinstecken.

Zuerst zum Aufbau des LED-Streifens: Es gibt 4 Anschlüsse, einer für + 12 V und dann noch einen je Farbe, also rot, grün und blau. Der Streifen funktioniert nun so: Schließt man + 12 V an und legt dann an einen Farb-Kanal Masse, so leuchtet diese Farbe. Die Helligkeit pro Farbe wird normalerweise per PWM eingestellt. Um den Streifen komplett selber anzusteuern braucht man jetzt:
  • Einen Microcontroller (ATmega / Arduino).
  • 3 bipolare Transistoren (NPN), diese sollten einen ausreichend hohen Strom vertragen!
Die Schaltung sieht nun folgendermaßen aus: Vom Microcontroller aus werden 3 PWM-Signale auf die Basis der Transistoren gegeben (ein kleiner Vorwiderstand ist notwendig, ich benutze 470 Ohm). Der Emitter der Transistoren liegt auf Masse (gemeinsame Masse von 12 V Stromversorgung und Microcontroller), der Kollektor wird dem entsprechenden Farb-Kanal verbunden.


Vom Microcontroller wird der entsprechende Kanal folgendermaßen geschaltet:


analogWrite(8, 127);

Dieser Befehl würde nun den Transistor, welcher an Pin 8 angeschlossen ist auf 50% setzen (255 ist Maximum), sodass die daran angeschlossene Farbe mit 50% der Helligkeit leuchtet. Zu beachten ist, dass man natürlich nur PWM-Kanäle benutzen kann (Im Datenblatt sind PWM-Kanäle mit OCR gekennzeichnet).

Um nun beliebige Farben zu mischen geht man folgendermaßen vor:
Man sucht sich eine Farbe im RGB-Raum aus, z.B. orange: diese ist R: 255, G: 255, B:0. Genau das lässt man nun den Microcontroller machen:


analogWrite(RED_PIN, 255);
analogWrite(GREEN_PIN, 255);
analogWrite(BLUE_PIN, 0);  

Es kann vorkommen dass verschiedene Farben unterschiedlich hell sind, das müsste man ausprobieren und dann z.B. für grün 127 als obere Grenze festlegen (grün wird vom Auge sehr stark wahrgenommen, daher wird es vermutlich zu hell erscheinen).

Keine Kommentare:

Kommentar veröffentlichen