{"id":1595,"date":"2012-12-08T09:33:34","date_gmt":"2012-12-08T09:33:34","guid":{"rendered":"https:\/\/blog.ecotronics.ch\/wordpress\/?p=1595"},"modified":"2013-01-17T17:39:55","modified_gmt":"2013-01-17T17:39:55","slug":"digital-adressierbarer-rgb-led-strip-mit-arduino","status":"publish","type":"post","link":"https:\/\/blog.ecotronics.ch\/wordpress\/?p=1595","title":{"rendered":"Digital adressierbarer RGB-LED-Strip mit Arduino"},"content":{"rendered":"<div id=\"attachment_1633\" style=\"width: 310px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/Arduino_ATXNetzteil_LEDStrip_20121209_124153_600.jpg\"><img aria-describedby=\"caption-attachment-1633\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-1633\" title=\"Die ganze Schaltung mit Arduino, PC-Netzteil, ATX-Stecker und LED-Strip\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/Arduino_ATXNetzteil_LEDStrip_20121209_124153_600-300x171.jpg\" alt=\"\" width=\"300\" height=\"171\" srcset=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/Arduino_ATXNetzteil_LEDStrip_20121209_124153_600-300x171.jpg 300w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/Arduino_ATXNetzteil_LEDStrip_20121209_124153_600-150x85.jpg 150w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/Arduino_ATXNetzteil_LEDStrip_20121209_124153_600-400x228.jpg 400w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/Arduino_ATXNetzteil_LEDStrip_20121209_124153_600.jpg 600w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1633\" class=\"wp-caption-text\">Die ganze Schaltung mit Arduino, PC-Netzteil, ATX-Stecker und LED-Strip<\/p><\/div>\n<p>Wer so viel auf Elektronikseiten herumh\u00e4ngt wie ich, wird relativ schnell \u00fcber <strong>LED-Strips<\/strong> stolpern, lange flexible Streifen mit einfarbigen oder RGB-LEDs. Neben den billigeren, bei denen alle LEDs gleichzeitig angesteuert werden, gibt es auch <strong>RGB-LED-Strips<\/strong>, bei denen <strong>jedes LED einzeln angesteuert<\/strong> werden kann (<a href=\"http:\/\/www.play-zone.ch\/de\/digital-adressierbarer-rgb-led-flexi-strip.html\" target=\"_blank\">Bezugsquelle<\/a>). Erfahrungsgem\u00e4ss sind diese adressierbaren Strips teurer als die erste Variante. Seit ein paar Tagen bin ich im Besitz eines 1-Meter-Streifens und seit kurzem habe ich ihn zum Laufen gebracht. <strong>Hauptschwierigkeit <\/strong>bei diesem Projekt war die geeignete <strong>Stromversorgung<\/strong>: ein 5V-LED-Strip mit 32 L\u00e4mpchen pro Meter \u00e0 60 Milliampere zieht fast <strong>2 Ampere Strom pro Meter<\/strong>, wenn alle LEDs gleichzeitig brennen. Das ist <strong>wesentlich mehr, als das Arduino-Board oder eine 4.5V-Blockbatterie liefern<\/strong>! Manche Dinge lernt man nur auf die harte Art (davon unten mehr). Eine externe Stromversorgung war also zwingend. Das vorliegende Tutorial ist eine Weiterentwicklung des Tutorials von <a href=\"http:\/\/learn.adafruit.com\/digital-led-strip\" target=\"_blank\">Adafruit<\/a>.<\/p>\n<p>Eine generelle Einf\u00fchrung in Arduino-Hardware und Programmierung habe ich in meinem <a href=\"https:\/\/www.ecotronics.ch\/ecotron\/arduinocheatsheet.htm\">Arduino Cheat Sheet<\/a> verfasst.<\/p>\n<p><strong>Warnung<\/strong>:<\/p>\n<p>Das vorliegende Projekt verwendet als Stromversorgung f\u00fcr den LED-Strip ein altes ATX-PC-Netzteil. Das <span style=\"color: #ff0000;\"><strong>unsachgem\u00e4sse Herumbasteln an PC-Netzteilen kann t\u00f6dlich sein<\/strong><\/span>. Und das im Gegensatz zum Rauchen nicht erst in 30 Jahren, sondern sofort. Ausserdem funktioniert die vorgeschlagene Versorgung, wenn ich das richtig verstanden habe, <strong>nur mit 5V-LED-Strips<\/strong>, nicht aber mit der 12Volt-Variante, da in PC-Netzteilen <strong>nur der 5V-, nicht aber der 12V-Ausgang stabilisiert<\/strong> ist (<a href=\"http:\/\/www.janson-soft.de\/amateurfunk\/Netzteilumbau.pdf\" target=\"_blank\">Quelle<\/a>) und somit die 12Volt-Anschl\u00fcsse bei der vorgestellten Methode keine stabile Versorgung garantieren (<a href=\"http:\/\/home.arcor.de\/df6vb\/pcnetz.htm\" target=\"_blank\">Quelle<\/a>). F\u00fcr Unbedarfte empfehle ich unbedingt die Verwendung eines <strong>5V-Netzteils mit mindestens 2000 mA<\/strong> (<a href=\"http:\/\/www.play-zone.ch\/de\/netzteil-ac-dc-adapter-5v-dc-2000ma.html\" target=\"_blank\">Bezugsquelle<\/a>).<\/p>\n<p>Die <strong>vorgestellte Schaltung<\/strong> dient zum Experimentieren mit Arduino, sie ist<strong> keinesfalls f\u00fcr den Dauerbetrieb <\/strong>gedacht. Ich rate deshalb unbedingt davon ab, <strong>den LED-Strip l\u00e4ngere Zeit unbeaufsichtigt laufen zu lassen<\/strong>. Bei der Wahl falscher Komponenten (z.B. zu wenig leistungsf\u00e4higen Kabeln) droht durch \u00dcberlastung <strong>Brandgefahr<\/strong>, bei schludriger Verkabelung kann es zu <strong>Kurzschl\u00fcssen <\/strong>kommen.<\/p>\n<h2><span style=\"color: #ff0000;\"><strong>Haftungsausschluss<\/strong><\/span><\/h2>\n<p>Ich \u00fcbernehme <strong>keinerlei Haftung f\u00fcr Personen- oder Sach-Sch\u00e4den<\/strong>, die durch den Nachbau des vorgestellten Projektes entstehen k\u00f6nnten. Jeglicher Nachbau erfolgt in eigener Verantwortung!<\/p>\n<h1>Projektziel<\/h1>\n<p>Einen <strong>digital adressierbaren 5V-RGB-Led-Strip<\/strong> mit <strong>Arduino <\/strong>steuern, wobei f\u00fcr den LED-Strip eine<strong> externe Stromversorgung<\/strong> zum Zuge kommt.<\/p>\n<h1>Komponenten<\/h1>\n<div id=\"attachment_1625\" style=\"width: 610px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/LEDStrip20121209_123409_600.jpg\"><img aria-describedby=\"caption-attachment-1625\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1625\" title=\"Digital adressierbarer LED-Strip vom Typ LPD8806\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/LEDStrip20121209_123409_600.jpg\" alt=\"\" width=\"600\" height=\"151\" srcset=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/LEDStrip20121209_123409_600.jpg 600w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/LEDStrip20121209_123409_600-300x75.jpg 300w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/LEDStrip20121209_123409_600-150x37.jpg 150w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/LEDStrip20121209_123409_600-400x100.jpg 400w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-1625\" class=\"wp-caption-text\">Digital adressierbarer LED-Strip vom Typ LPD8806<\/p><\/div>\n<p>Wichtig ist, dass man den richtigen LED-Strip hat. Es gibt n\u00e4mlich auf dem Markt eine Unzahl verschiedener LED-Strips. Es muss unbedingt ein <strong>RGB-LED-Strip<\/strong> sein, nicht ein einfarbiger. Die LED sind <strong>einzeln ansteuerbar <\/strong>(im Englischen nennt man dies &#8220;digital&#8221;) und der Strip ist im vorliegenden Projekt f\u00fcr <strong>5 Volt<\/strong> ausgelegt (es gibt auch solche f\u00fcr 12V). Gem\u00e4ss Adafruits gibt es diesen RGB-LED-Strip in einer <strong>\u00e4lteren und einer neueren Variante<\/strong>, die sich v.a. durch die Anzahl Anschl\u00fcsse unterscheiden. Ich beziehe mich auf die neuere mit 4 Anschl\u00fcssen (die genaue Unterscheidung findet man bei <a href=\"http:\/\/learn.adafruit.com\/digital-led-strip\" target=\"_blank\">Adafruit<\/a>). F\u00fcr dieses Projekt ben\u00f6tigt man die folgenden Komponenten:<\/p>\n<ul>\n<li>1 Arduino-Board: im aktuellen Fall ein Arduino mega 2560<\/li>\n<li>1 digital adressierbarer RGB-LED-Strip vom Typ <strong>LPD8806<\/strong>, L\u00e4nge 1 Meter (<a href=\"http:\/\/www.play-zone.ch\/de\/digital-adressierbarer-rgb-led-flexi-strip.html\" target=\"_blank\">Bezugsquelle Schweiz<\/a>)<\/li>\n<li>einige Jumperkabel M\/F<\/li>\n<li>einige Jumperkabel M\/M<\/li>\n<li>1 USB-Kabel zur Verbindung des Arduino-Boards mit dem PC<\/li>\n<li>1 PC mit Arduino-Entwicklungsumgebung<\/li>\n<li>falls der Strip ohne Stecker kommt, 1 L\u00f6tkolben und L\u00f6tzinn zum Anl\u00f6ten der Dr\u00e4hte sowie geeigneter Isolierdraht<\/li>\n<\/ul>\n<p>Normale Variante der Stromversorgung<\/p>\n<ul>\n<li>1 Netzteil AC\/DC-Adapter 5V DC, f\u00fcr 1 Meter 2000 mA, f\u00fcr l\u00e4ngere Strips proportional mehr (<a href=\"http:\/\/www.play-zone.ch\/de\/netzteil-ac-dc-adapter-5v-dc-2000ma.html\" target=\"_blank\">Bezugsquelle Schweiz<\/a>)<\/li>\n<li>1 zum Netzteil passende DC Power Adapter, etwas in dieser <a href=\"http:\/\/www.play-zone.ch\/de\/dc-power-adapter-mannlich-2-1mm-stecker-zu-terminal-block.html\">Art<\/a>, darauf achten, dass das Teil bez\u00fcglich Male\/Female und der Buchsengr\u00f6sse auch wirklich zum Netzteil passt<\/li>\n<\/ul>\n<p>Und hier noch die <strong>Alternative zum 5V-Netzteil<\/strong> f\u00fcr <strong>Kamikaze-Elektrobastler\/innen <\/strong>(man beachte den Haftungsausschluss am Artikelanfang!)<\/p>\n<ul>\n<li>1 altes ATX-PC-Netzteil<\/li>\n<li>1 alte (aber funktionierende!) Festplatte oder Ventilator aus PC als Belastungswiderstand (andere nehmen dazu ein Standlicht aus einem Autoscheinwerfer oder einen richtigen Widerstand, siehe <a href=\"http:\/\/home.arcor.de\/df6vb\/pcnetz.htm\" target=\"_blank\">hier<\/a>)<\/li>\n<li>2 L\u00fcsterklemmen (in der Schweiz kennt man dieses Teil unter dem Namen &#8220;Z\u00fcckerli&#8221;)<\/li>\n<li>10 &#8211; 20 cm dicker Isolierdraht<\/li>\n<li>1 Abisolierzange oder anderes Werkzeug zum Abisolieren wie Taschenmesser oder Schere<\/li>\n<\/ul>\n<p>Etwas Kopfzerbrechen bereitete mir das als <strong>Belastungswiderstand<\/strong> empfohlene Standlicht: Wo nimmt eine \u00fcberzeugte NAB (Nichtautobesitzerin) nachts um Elf ein Standlicht her? Draussen auf der Strasse heimlich eines aus einem parkierten Auto ausschrauben? Keine gute Idee! Doch dann schalten sich meine kleinen grauen Zellen ein: Hey, mit Belastungswiderstand meinen die irgendetwas, das Strom zieht. Und was h\u00e4ngt man am besten an diese netten Stecker ohne gemeingef\u00e4hrliches Gebastel? Richtig, das, was fr\u00fcher auch schon daran hing, zum Beispiel eine Festplatte! Und mit alten Festplatten ist unser 2-Computerfreak-Haushalt nun ausserordentlich reichlich best\u00fcckt.<\/p>\n<h1>Best\u00fcckungsplan und Verkabelung<\/h1>\n<p>Bei diesem Projekt ist es mit einem Best\u00fcckungsplan nicht getan, denn zu der Art, wie das PC-Netzteil verbunden wird, muss ich doch ein paar Worte verlieren. Ich erinnere noch mal an den Haftungsausschluss,<span style=\"color: #ff0000;\"><strong> das Basteln an PC-Netzteilen ist wirklich gef\u00e4hrlich<\/strong><\/span>. Grundregel Nr. 1 ist, dass man <strong>die Stromversorgung des Netzteils unterbricht, d.h. das Kabel entfernt<\/strong>, bevor man irgendwelche Manipulationen vornimmt.<\/p>\n<div id=\"attachment_1629\" style=\"width: 310px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/ATXStecker_20121209_123301_6001.jpg\"><img aria-describedby=\"caption-attachment-1629\" decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-1629\" title=\"Stecker des ATX-Netzteils mit \u00dcberbr\u00fcckung und Anschl\u00fcssen f\u00fcr 5Volt und Masse\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/ATXStecker_20121209_123301_6001-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/ATXStecker_20121209_123301_6001-300x225.jpg 300w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/ATXStecker_20121209_123301_6001-150x112.jpg 150w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/ATXStecker_20121209_123301_6001-400x300.jpg 400w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/ATXStecker_20121209_123301_6001.jpg 600w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-1629\" class=\"wp-caption-text\">Stecker des ATX-Netzteils mit \u00dcberbr\u00fcckung und Anschl\u00fcssen f\u00fcr 5Volt und Masse<\/p><\/div>\n<p>Den genauen Aufbau eines ATX-Steckers habe ich <a href=\"http:\/\/www.physigon.de\/bauanleitungen\/46-umbau-pc-netzteil\" target=\"_blank\">hier<\/a> gefunden. Damit man ein PC-Netzteil \u00fcberhaupt ausserhalb eines PCs in Betrieb nehmen kann, muss man Power-On \u00fcberbr\u00fccken, indem man den Power-On-Anschluss (Pin 14, meistens gr\u00fcnes Kabel) mit der Masse (Pin 13 oder 15, schwarzes Kabel) verbindet. Ich habe dies mit einem <strong>dicken Isolierdraht <\/strong>gemacht, den ich an beiden Enden ca. 0.5 cm <strong>abisoliert <\/strong>habe, so dass er gerade b\u00fcndig in den Steckeranschluss passt. Praktischerweise hatte ich einen Isolierdraht zur Hand, der genau die richtige Dicke f\u00fcr den Stecker hat. Jumperkabel kann man daf\u00fcr nicht nehmen, sie sind zu d\u00fcnn und rutschen raus. Und anschliessend h\u00e4ngt man die <strong>Festplatte <\/strong>an einen der ungenutzt herumh\u00e4ngenden <strong>Stecker<\/strong>. Oder man h\u00e4ngt wie auch immer einen anderen Belastungswiderstand an. Sinnvollerweise<strong> testet man nun, ob die \u00dcberbr\u00fcckung geklappt hat<\/strong>, bevor man weiter macht. Also Stromkabel anschliessen und Netzger\u00e4t anschalten. Wenn der Ventilator anf\u00e4ngt zu drehen, dann hat man es geschafft.<\/p>\n<p>Danach wieder <strong>ausschalten, Kabel abziehen <\/strong>und weiter geht es: Zwei ca. 5 cm lange, auf beiden Seiten ca. 0.5 cm abisolierte St\u00fccke <strong>Isolierdraht vorbereiten<\/strong>. Das eine steckt man<strong> in einen 5V-Anschluss (einer der Anschl\u00fcsse mit rotem Kabel, z.B. Pin Nr 4 vis-a-vis vom gr\u00fcnen Kabel<\/strong>) und das zweite<strong> in eine Masse (Pin Nr. 5, schwarzes Kabel)<\/strong>. Dies sind unsere Anschl\u00fcsse f\u00fcr Arduino und LED-Strip.<\/p>\n<p>Mein <strong>LED-Strip<\/strong> kam schon<strong> mit einem Stecker<\/strong> mit der pomp\u00f6s nichtssagenden Bezeichnung <strong>4-Pin JST SM<\/strong>, was mir das Verl\u00f6ten ersparte. Nicht dass ich ein Problem mit L\u00f6ten h\u00e4tte, aber das mache ich normalerweise auf dem Balkon im Freien, und bei der aktuellen Wetterlage mit 20 cm Neuschnee ist das nicht wirklich eine Option. Freundlicherweise passen auf die <strong>4 Pins<\/strong> in diesem Stecker genau die <strong>Female-Enden meiner Jumperkabel<\/strong> (einfach bei Play-Zone oder einem beliebigen Online-Lieferanten nach &#8220;Jumperkabel M\/F&#8221; suchen). Nun hatte ich noch die Herausforderung vor mir, <strong>einen relativ dicken  Isolierdraht mit einem viel d\u00fcnneren Male-Ende eines Jumperkabels zu  verbinden<\/strong>, ohne dass dies in eine lebensgef\u00e4hrliche Bastelei ausartete. Nachdem ich diverse Varianten als fahrl\u00e4ssig oder zu wenig stabil verworfen hatte, brachte wildes Kramen in meiner Komponentensammlung endlich das rettende Teil zum Vorschein: Z\u00fcckerli beziehungsweise <strong>L\u00fcsterklemmen<\/strong>! Damit konnte ich nun einen 5V-Anschluss (rotes Kabel) mit dem 5V-Anschluss des LED-Strips verbinden. Die Masse (GND bzw. schwarzes Kabel) wird dagegen nicht direkt mit dem Strip verkabelt, sondern <strong>beide GND-Anschl\u00fcsse, jener des ATX-Steckers und jener des LED-Strips<\/strong> <strong>kommen in die zwei GND-Anschl\u00fcsse des Arduino-Boards<\/strong>. Unbedingt darauf achten, dass 5V- und GND-Anschl\u00fcsse nicht verkehrtherum verbunden werden, sonst ist der Streifen hin!<\/p>\n<p>Nun fehlt noch die Verkabelung f\u00fcr die zwei mittleren Pins des Streifens. Sie werden angeschlossen, wie im Adafruit- Tutorial beschrieben, d.h. der <strong>mit DI bezeichnete Data-Pin<\/strong> unterhalb GND<strong> mit Pin 2<\/strong> und der <strong>mit CI bezeichnete Clock-Pin mit Pin 3 <\/strong>auf dem Arduino-Board. Und das USB-Kabel kommt nat\u00fcrlich wie immer zwischen PC und Arduino-Board.<\/p>\n<div id=\"attachment_1632\" style=\"width: 564px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/myLedStrip_Steckplatine_600.jpg\"><img aria-describedby=\"caption-attachment-1632\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1632\" title=\"Best\u00fcckungsplan f\u00fcr digital adressierbaren RGB-LED-Strip vom Typ LPD8806\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/myLedStrip_Steckplatine_600.jpg\" alt=\"\" width=\"554\" height=\"600\" srcset=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/myLedStrip_Steckplatine_600.jpg 554w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/myLedStrip_Steckplatine_600-277x300.jpg 277w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/myLedStrip_Steckplatine_600-138x150.jpg 138w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/myLedStrip_Steckplatine_600-400x433.jpg 400w\" sizes=\"(max-width: 554px) 100vw, 554px\" \/><\/a><p id=\"caption-attachment-1632\" class=\"wp-caption-text\">Best\u00fcckungsplan f\u00fcr digital adressierbaren RGB-LED-Strip vom Typ LPD8806<\/p><\/div>\n<h1>Code<\/h1>\n<p>F\u00fcr die RGB-LED-Strips gibt es eine pfannenfertige Library namens <strong>LPD8806<\/strong> von Adafruit (<a href=\"https:\/\/github.com\/adafruit\/LPD8806\" target=\"_blank\">hier<\/a> herunterladen), welche f\u00fcr programmiertechnisch Unbedarfte bereits mit einem ausgefeilten Beispielprogramm aufwartet &#8211; das Beispiel namens &#8220;<strong>strandtest<\/strong>&#8221; &#8211; und beachtliche Farbspielereien in allen Regenbogenfarben liefert. Ich zeige deshalb hier nur jenen Code, der meine eigene Kreation ist: Dabei werden die L\u00e4mpchen von aussen nach innen eingeschaltet und zwar von kalten Blaut\u00f6nen \u00fcber Rot, Orange und Gelb bis zum gleissenden Weiss in der Mitte. Der Code ist f\u00fcr einen 1-Meter-Strip mit 32 LED, l\u00e4sst sich mit etwas herumrechnen aber auch f\u00fcr andere L\u00e4ngen anpassen.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#include &quot;LPD8806.h&quot;\r\n#include &quot;SPI.h&quot;\r\n\r\n\/*\r\n * digitale RGB LED Strips vom Typ LPD8806 steuern\r\n * Weiterentwicklung des Tutorials von Adafruit\r\n * Autorin: Silvia Rothen, rothen ecotronics, Bern, Switzerland\r\n * https:\/\/blog.ecotronics.ch\/wordpress\/category\/physical-computing\/\r\n*\/\r\n\r\n\/*****************************************************************************\/\r\n\r\n\/\/ Anzahl RGB LEDs\r\nint nLEDs = 32;\r\n\r\n\/\/ Die zwei Arduino-Pins, mit denen der LED Strip verbunden ist\r\nint dataPin  = 2;\r\nint clockPin = 3;\r\n\r\n\/\/ Den Strip initialisieren\r\nLPD8806 strip = LPD8806(nLEDs, dataPin, clockPin);\r\n\r\nvoid setup() {\r\n  \/\/ LED-Strip starten\r\n  strip.begin();\r\n  Serial.begin(9600);\r\n  \/\/ Am Anfang sind alle LEDs aus\r\n  strip.show();\r\n}\r\n\r\nvoid loop() {\r\n  getHot(200);\r\n  allOut();\r\n  hotline(200, 6);\r\n}\r\n\r\n\/\/Hilfsroutine zum \u00dcberpr\u00fcfen des Codes\r\nvoid printRGB(int i, int j, int r, int g, int b) {\r\n  Serial.print(i);\r\n  Serial.print(&quot; &quot;);\r\n  Serial.print(j);\r\n  Serial.print(&quot; &quot;);\r\n  Serial.print(r);\r\n  Serial.print(&quot;\/&quot;);\r\n  Serial.print(g);\r\n  Serial.print(&quot;\/&quot;);\r\n  Serial.print(b);\r\n  Serial.println();\r\n}\r\n\r\n\/\/Die LED werden von Links nach Rechts einzeln zugeschaltet,\r\n\/\/wobei die Farben von Blau \u00fcber Rot und Gelb bis zu Weiss laufen\r\n\/\/Es brennt nur die im Parameter anzahl \u00fcbergebene Anzahl LEDs gleichzeitig\r\nvoid hotline(int wait, int anzahl) {\r\n  int i = 0;\r\n  int r = 0;\r\n  int g = 0;\r\n  int b = 127;\r\n  int difference = 13;\r\n  int steps = 11;\r\n  int j = 0;\r\n  for (i = 0; i &lt; strip.numPixels() + anzahl; i++) {\r\n    r = constrain(i * difference, 0, 127);\r\n    if (i &gt; steps) {\r\n      g = constrain((i - steps) * difference, 0, 127);\r\n    } else {\r\n      g = 0;\r\n    }\r\n    if (i &lt; steps) {\r\n      b = constrain(127 - i * difference, 0, 127);\r\n    } else {\r\n      if (i &gt; steps * 2) {\r\n        b = constrain((i - (steps * 2)) * difference, 0, 127);\r\n      } else {\r\n        b = 0;\r\n      }\r\n    }\r\n    strip.setPixelColor(i, strip.Color(r, g, b));\r\n    if (i &gt;= anzahl) {\r\n      strip.setPixelColor((i - anzahl), 0);\r\n    }\r\n    printRGB(i, 0, r, g, b);\r\n    strip.show();\r\n    delay(wait);\r\n  }\r\n}\r\n\r\n\/\/Farblich das gleiche wie oben,\r\n\/\/aber jetzt werden die LEDs von aussen nach innen eingeschaltet\r\nvoid getHot(int wait) {\r\n  int i = 0;\r\n  int j = 0;\r\n  int r = 0;\r\n  int g = 0;\r\n  int b = 127;\r\n  int difference = 26;\r\n\r\n  for (i=0; i &lt; 5; i++) {\r\n    strip.setPixelColor(i, strip.Color(r, g, b));\r\n    j = strip.numPixels() - 1 - i;\r\n    strip.setPixelColor(j, strip.Color(r, g, b));\r\n    strip.show();\r\n    r = constrain(r + difference, 0, 127);\r\n    b = constrain(b - difference, 0, 127);\r\n    printRGB(i, j, r, g, b);\r\n    delay(wait);\r\n  }\r\n\r\n  for (i=5; i &lt; 10; i++) {\r\n    strip.setPixelColor(i, strip.Color(r, g, b));\r\n    j = strip.numPixels() - 1 - i;\r\n    strip.setPixelColor(j, strip.Color(r, g, b));\r\n    strip.show();\r\n    \/\/r = constrain(r - 32, 0, 127);\r\n    g = constrain(g + difference, 0, 127);\r\n    printRGB(i, j, r, g, b);\r\n    delay(wait);\r\n  }\r\n\r\n  for (i=10; i &lt; 16; i++) {\r\n    strip.setPixelColor(i, strip.Color(r, g, b));\r\n    j = strip.numPixels() - 1 - i;\r\n    strip.setPixelColor(j, strip.Color(r, g, b));\r\n    strip.show();\r\n    b = constrain(b + difference, 0, 127);\r\n    printRGB(i, j, r, g, b);\r\n    delay(wait);\r\n  }\r\n  strip.show();\r\n}\r\n\r\n\/\/Hilfsfunktion zum Ausschalten aller LEDs zwischen 2 Mustern\r\nvoid allOut() {\r\n  int i = 0;\r\n  for(i=0; i&lt;strip.numPixels(); i++) strip.setPixelColor(i, 0);\r\n  delay(1000);\r\n}\r\n\r\n<\/pre>\n<p>Mit der folgenden kleinen Erg\u00e4nzung (Paramter backwards und lokale Variable pos) kann man f\u00fcr die Methode im Beispielcode von &#8220;strandtest&#8221; die Laufrichtung umdrehen:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\/\/\u00fcberladene Methode, damit die alte Schnittstelle noch g\u00fcltig ist\r\nvoid colorWipe(uint32_t c, uint8_t wait) {\r\n  colorWipe(c, wait, false);\r\n}\r\n\r\n\/\/ Fill the dots progressively along the strip.\r\n\/\/ Der Parameter backwards erm\u00f6glicht,\r\n\/\/ dass die LEDs in beide Richtungen laufen\r\nvoid colorWipe(uint32_t c, uint8_t wait, boolean backwards) {\r\n  int i;\r\n  int pos; \/\/pos ersetzt i f\u00fcr beidseitige Lauflichter\r\n\r\n  for (i=0; i &lt; strip.numPixels(); i++) {\r\n    \/\/in welche Richtung laufen die Lichter\r\n    if (backwards) {\r\n      pos = strip.numPixels() - i - 1;\r\n    } else {\r\n      pos = i;\r\n    }\r\n    strip.setPixelColor(pos, c);\r\n    strip.show();\r\n    delay(wait);\r\n  }\r\n}\r\n<\/pre>\n<p>Und der Aufruf dazu im Loop:<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nvoid loop() {\r\n  colorWipe(strip.Color(127,   0,   0), 50);  \/\/ Red\r\n  \/\/dank \u00fcberladener Methode ben\u00f6tigt nur jeder 2. Aufruf den 3. Parameter\r\n  colorWipe(strip.Color(  0, 127,   0), 50, true);  \/\/ Green\r\n  colorWipe(strip.Color(  0,   0, 127), 50);  \/\/ Blue\r\n  colorWipe(strip.Color(  127, 127,   0), 50, true);  \/\/ Yellow\r\n}\r\n<\/pre>\n<p>In einem <a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/2012\/programmwahl-fur-den-led-strip\/\">sp\u00e4teren Beitrag<\/a> habe ich \u00fcbrigens beschrieben, wie man den Code erg\u00e4nzen kann, wenn man mit einem Potentiometer zwischen verschiedenen Farbprogrammen wechseln m\u00f6chte.<\/p>\n<h1>Demo<\/h1>\n<div id=\"attachment_1642\" style=\"width: 610px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/LEDStripBlueToRedToWhite_6001.jpg\"><img aria-describedby=\"caption-attachment-1642\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1642\" title=\"RGB-LED-Strip in Aktion\" src=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/LEDStripBlueToRedToWhite_6001.jpg\" alt=\"\" width=\"600\" height=\"63\" srcset=\"https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/LEDStripBlueToRedToWhite_6001.jpg 600w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/LEDStripBlueToRedToWhite_6001-300x31.jpg 300w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/LEDStripBlueToRedToWhite_6001-150x15.jpg 150w, https:\/\/blog.ecotronics.ch\/wordpress\/wp-content\/uploads\/2012\/12\/LEDStripBlueToRedToWhite_6001-400x42.jpg 400w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-1642\" class=\"wp-caption-text\">RGB-LED-Strip in Aktion<\/p><\/div>\n<p>Weiter oben habe ich behauptet, die Stromversorgung sei in diesem  Projekt die Herausforderung. Das war allerdings, bevor ich versucht  habe, den LED-Strip in voller Aktion aufzunehmen. Mein Samsung Galaxy  SII, auf das sonst immer Verlass ist, produzierte v\u00f6llig \u00fcberstrahlte  Bilder. Und meine digitale Spiegelreflex, die ich nach ein paar  unbrauchbaren Handy-Versuchen zu Hilfe nahm, produzierte ein etwas  besseres Video, daf\u00fcr aber in einem unm\u00f6glichen Format.<\/p>\n<p>&nbsp;<\/p>\n<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"http:\/\/www.youtube.com\/embed\/czkCx4pXtcQ?rel=0\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p id=\"caption-attachment-1633\" class=\"wp-caption-text\">Die ganze Schaltung mit Arduino, PC-Netzteil, ATX-Stecker und LED-Strip<\/p>\n<p>Wer so viel auf Elektronikseiten herumh\u00e4ngt wie ich, wird relativ schnell \u00fcber LED-Strips stolpern, lange flexible Streifen mit einfarbigen oder RGB-LEDs. Neben den billigeren, bei denen alle LEDs gleichzeitig angesteuert werden, gibt es auch RGB-LED-Strips, bei denen jedes LED einzeln angesteuert werden kann (Bezugsquelle). [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":1640,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[160,158],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1595"}],"collection":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1595"}],"version-history":[{"count":55,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1595\/revisions"}],"predecessor-version":[{"id":1605,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1595\/revisions\/1605"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/media\/1640"}],"wp:attachment":[{"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1595"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1595"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ecotronics.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1595"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}