Code-Outlet von Andreas Bahr, Zürich
Die NeoPixel Produktlinie von Adafruit wecken die Lust selbst einmal mit diesen neumodischen RGB-LEDs zu arbeiten. Das vorliegende Projekt habe ich innerhalb weniger Stunden realisieren können, die Dokumentation der NeoPixel und deren Treiber/Library ist Tiptop.
Die Hardware besteht aus einem Netzteil 5V/2A DC, einem klassischen Arduino Nano / Clone und 1 Meter NeoPixel-Schlauch, angeschlossen an Pin D6. Der von mir verwendete Schlauch enthält 60 RGB-LEDs pro Meter.
Die offizielle Dokumentation für die Produktlinie (in englischer Sprache)
Das vorliegende Script erzeugt zufällige Werte für eine anzuzeigende Farbe, und verändert diese in 250 kleinen Schritten hin zu der nächsten zufällig ausgewählten Farbe. Zusätzlich werden die LEDs von unten nach oben auf grössere Helligkeit eingestellt.
Die Gesamt-Helligkeit der LEDs, und damit auch deren Stromverbrauch, werden am Beginn des Scripts mit dem Befehl "strip.setBrightness(150);" eingestellt, gültige Werte sind 0-255.
Es war für mich eine interessante Lektion festzustellen, dass das Ansteuern der RGB-LEDs mit RGB-Werten zu sehr unattraktiven Farben führt. Nutzt man hingegen das HSV-Farbmodell, profitiert man von den auf diese LEDs optimierten Algorithmen der Library, und hat zusätzlich Kontrolle über Helligkeit & Farbsättigung.
Info zu HSV: Wikipedia: HSV-Farbraum
/* ShinyLight * HSV: color, saturation and value (brightness) * Version 3: Morphing von Farbe zu Farbe * Hardware: 1m NeoPixel & Arduino Nano * Info zu HSV: https://de.wikipedia.org/wiki/HSV-Farbraum * -------------------------- * Copyleft 2019 Andreas Bahr * -------------------------- * NeoPixel nicht unter Spannung anschliessen * Zuerst den strom für NeoPixel, dann den Arduino */ // der "treiber" von adafruit #include <Adafruit_NeoPixel.h> #define LED_PIN 6 // NeoPixel an pin "D6" #define LED_COUNT 60 // anzahl led im NeoPixel-strip // Neopixel deklaration & konfiguration Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800); // das ding mit dem namen "strip" ist jetzt das NeoPixel... // startup code void setup() { strip.begin(); // den adafruit-code "starten" strip.show(); // alle led's einmal ansteuern strip.setBrightness(150); // helligkeit, max = 255 } // "das programm" void loop() { int j; int diff; long hue; long randomHue; long lastHue = 0; randomSeed(analogRead(0)); // zufallszahlen initialisieren do { // zufällige farbe wählen randomHue = random(0, 65536); j = 0; diff = 0; do { // aktuelle farbe berechnen if(randomHue == lastHue) { hue = randomHue; } else { diff = diff - ((lastHue - randomHue) / 250); hue = lastHue + diff; } // saturation 0-255 for(int i = 0; i < strip.numPixels() / 2; i++) { strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(hue, i * (255 / (strip.numPixels() / 2)), 255))); } // brightness 0-255 for(int i = strip.numPixels(); i > strip.numPixels() / 2; i--) { strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(hue, 255, 255 - (i * (255 / (strip.numPixels() / 2)))))); } strip.show(); delay(20); j++; } while(j < 250); lastHue = randomHue; } while(true); // endlos-schleife }