Sonnenaufgang mit LED Panel

Hallo und herzlich willkommen zu unserem heutigen Beitrag.

 

Ein Community-Mitglied hat sich von unseren Beiträgen inspirieren lassen, und eine Funkuhr mit Wecker gebaut. Dabei sollte vor dem morgendlichen Alarm ein U-64 RGB Panel das Licht eines Sonnenaufgangs simulieren, um ein sanfteres Wecken zu ermöglichen.

Die von mir bevorzugte Bibliothek FastLED bietet hierzu die Möglichkeit eigene Farbverläufe zu definieren.

Jede LED besteht intern aus einer sehr kleinen roten, grünen und blauen LED sowie einem sehr kleinen Steuerungschip, welcher die Helligkeit der einzelnen Farben steuert.

Jede Farbe kann über einen Wert zwischen 0 (Aus) und 255 (volle Helligkeit) eingestellt werden.

Die Farbe und Helligkeit der LED setzt sich also aus 3 Werten zusammen, jeweils für rot, Grün und Blau.

Rot

Grün

Blau

LED Farbe

255

0

0

Rot

0

255

0

Grün

0

0

255

Blau

255

255

0

Gelb

0

255

255

Cyan

 

 Nachdem wir also wissen, wie die Farben zusammengesetzt werden, müssen wir nur noch einen Farbverlauf angeben.

Dank einer relativ neuen Funktion in der FastLED Bibliothek, können wir solche verläufe sehr einfach definieren. 

Das ganze kann man sich wie eine Liste vorstellen. An erster Stelle steht die Zeilennummer, gefolgt von den Werten für rot, grün und blau. Diese können wir für jede Zeile anpassen.

Wenn meine Tabelle also 255 Zeilen lang wäre das einiges an Arbeite für jede Zeile die passenden Werte manuell einzugeben.

Mittels DEFINE_GRADIENT_PALETTE können wir für bestimmte Zeilen in unserer Tabelle den gewünschten Wert angeben. Im Beispiel unten mache ich dies für die Zeilen 0, 128, 224 und 255.
Das Ergebnis ist eine Tabelle mit 255 Zeilen, in dem die verschiedenen Farbverläufe für mich berechnet werden.

Wenn ich nun mittels ColorFromPalette() die Farbwerte für Zeile 64 abfrage, bekomme ich entsprechend den Mittelwert zwischen 0 und 128.

In der Praxis wird die Funktion wie folgt aufgerufen:

DEFINE_GRADIENT_PALETTE ( *name_meiner_palette* ) {
*Zeilennummer*, *Wert für rot*, *Wert für Grün*, *Wert für Blau*
};
Im Beispiel sieht das wie folgt aus:
DEFINE_GRADIENT_PALETTE( sunrise_gp ) {
  0,     0,  0,  0,   //schwarz
128,   240,  0,  0,   //rot
224,   240,240,  0,   //gelb
255,   128,128,240 }; //sehr helles Blau

Damit wie Tabelle jedoch nutzen können, müssen wir die Tabelle "sunrise_gp" noch mittels CRGBPalette16() oder CRGBPalette256() in eine Variable schreiben.

CRGBPalette256 sunrisePal = sunrise_gp;

Dann können wir mittels folgendem Befehl die Farbe an einer bestimmten Position (=heatIndex) ermitteln.

CRGB color = ColorFromPalette(sunrisePal, heatIndex);

Anschließend setzen wir mittels fill_solid() die Farbe aller LEDs auf die ermittelte Farbe:

fill_solid(leds, NUM_LEDS, color);



Hier nun der komplette Sketch:

#include <FastLED.h>

#define DATA_PIN    3
#define LED_TYPE    WS2811
#define COLOR_ORDER GRB
#define NUM_LEDS    64
CRGB leds[NUM_LEDS];

#define BRIGHTNESS          128

DEFINE_GRADIENT_PALETTE( sunrise_gp ) {
  0,     0,  0,  0,   //schwarz
128,   240,  0,  0,   //rot
224,   240,240,  0,   //gelb
255,   128,128,240 }; //sehr helles Blau

void setup() {
  delay(1000);
  FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(BRIGHTNESS);
  fill_solid(leds, NUM_LEDS, CRGB(0,0,0)); // Alle Pixel aus
  FastLED.show(); 
  sunrise(); // Sonnenaufgang abspielen
}
  
void loop()
{
}

void sunrise() {
  static uint16_t heatIndex = 0; // start out at 0
  for (heatIndex=0; heatIndex<255; heatIndex++) {
  CRGBPalette256 sunrisePal = sunrise_gp;
  CRGB color = ColorFromPalette(sunrisePal, heatIndex);
  // fill the entire strip with the current color
  fill_solid(leds, NUM_LEDS, color);
  FastLED.show(); 
  FastLED.delay(250);
  }
}

 

Mit dem FastLED.delay können wir die Geschwindigkeit anpassen.

Um das ganze in einem Wecker umzusetzen, muss lediglich die Funktion sunrise() vor dem eigenlichen Alarm aufgerufen werden, und der Wecker fängt mit dem sanften Weckvorgang an.

Wer schon Erfahrung mit unserem MP3 Modul oder dem TonUINO Set gesammelt hat, kann sich dazu passend noch mit Meeresrauschen oder Vogelgezwitscher auditiv berieseln lassen. 

Ich hoffe der heutige Beitrag wird Ihnen dabei helfen, die Farbverläufe Ihrer Neopixel in den Griff zu bekommen. Es muss ja nicht jeder mit Neopixeln beleuchtete Weihnachtsbaum in Regenbogenfarben erstrahlen.

 

 

Letzter Artikel Tipp zum Artikel "Umlaute auf LCD"
Neuer Artikel Simpler Linienfolger

Hinterlasse einen Kommentar

Kommentare müssen vor der Veröffentlichung überprüft werden

Erforderliche Angabe