Flackerndes Licht mit LEDs II.

Wie schon in dem vorherigen Experiment "Flackerndes Licht mit LEDs" geht es hier um möglichst natürlich wirkendes Flackerlicht, welches durch LEDs einen Eindruck einer Kerze oder eines Feuers erzeugen soll.
Die folgenden kleinen Experimente habe ich nach einiger Suche im WWW gefunden:

1. "Realistic LED Candle"

(Quelle: https://www.instructables.com/id/Realistic-LED-Candle/)

Verwendete Bauteile

Aufbau

Die folgende Simulation habe ich sicherheitshalber auf vier Vorwiderstände erweitert, ansonsten ist sie unverändert übernommen.

Schaltplan der Realistic LED Candle
Abb.: Schaltplan der "Realistic LED Candle"

Sketch

Ein paar kleinere Sketch-Änderungen (v.a. die verwendeten Pins) habe ich vorgenommen, aber der grundsätzliche Algorithmus des Flackerlichts ist unverändert.

candle.ino

Resultat

Ein brauchbares Ergebnis, welches ziemlich natürliches Kerzen-Flackerlicht abgibt, wenn man einen Diffusor verwendet.

Video: Demonstration des "Realistic LED Candle"

2. "Candle Light LED Lamp"

(Quelle: http://www.heidislab.com/tutorials/how-to-build-a-candle-light-led-lamp-flame-effect)

Verwendete Bauteile

Aufbau

Schaltplan der Realistic LED Candle
Abb.: Schaltplan der "Realistic LED Candle"

Sketch

Vom Original-Sketch habe ich nur den Flicker-Teil übernommen.

#define PIN_LED1 5
#define PIN_LED2 6
#define PIN_LED3 9

void setup()
{
    pinMode(PIN_LED1, OUTPUT);
    pinMode(PIN_LED2, OUTPUT);
    pinMode(PIN_LED3, OUTPUT);
}

void loop()
{
    analogWrite(PIN_LED1, random(10, 255));
    delay(20);
    analogWrite(PIN_LED2, random(10, 255));
    delay(20);
    analogWrite(PIN_LED3, random(10, 255));
    delay(20);
}

Resultat

Hektisches Flackern, welches nicht sehr organisch wirkt. Außerdem ist der Rot-Anteil etwas zu hoch und könnte durch 2x gelbe und 1x rote LED bzw. orange LEDs optimiert werden.

Video: Demonstration des "Candle Light LED Lamp"

3. "Flickering LED Candle"

(Quelle: https://www.instructables.com/id/Flickering-LED-Candle-1/)

Aufbau

siehe: 2. "Candle Light LED Lamp"

Sketch

Der ursprüngliche Sketch lässt nur eine LED flackern. Dies habe ich auf drei LEDs (1x gelb und 1x rot) erweitert:

#define PIN_LED1 5
#define PIN_LED2 6
#define PIN_LED3 9

int pulseMin = 1; // Minimum number of pulses in each set
int pulseMax = 5; // Maximum number of pulses in each set
int brightMin = 128; // Baseline LED brightness. Cannot exceed 128.
int minDelay = 1000; // Minimum delay between pulse sets (ms)
int maxDelay = 5000; // Maximum delay between pulse sets (ms)

byte ledPins[3] = {PIN_LED1, PIN_LED2, PIN_LED3};
long nextAction[3];

void setup()
{
    randomSeed(analogRead(A0));
    for (byte i = 0; i < 3; i++) {
        pinMode(ledPins[i], OUTPUT);
        nextAction[i] = millis();
    }
}

void loop()
{
    for (byte i = 0; i < 3; i++) {
        flickerLed(i);
    }
}

void flickerLed(byte ledIndex)
{
    if (nextAction[ledIndex] > millis()) {
        return;
    }
    nextAction[ledIndex] = millis() + random(minDelay, maxDelay);

    for (byte x = random(pulseMin, pulseMax); x > 0; x--) {
        int bright = 224 - random(96);
        for (byte y = brightMin; y < bright ; y++) {
            analogWrite(ledPins[ledIndex], y);
            delay(3);
        }

        for (byte y = bright; y > brightMin; y--) {
            analogWrite(ledPins[ledIndex], y);
            delay(3);
        }
        delay(10);
    }

    analogWrite(ledPins[ledIndex], brightMin);
}

Resultat

Ein sehr kerzenähnliches, ruhiges Flackerlicht, dass sich leicht durch mehrere LEDs erweitern lässt.

Video: Demonstration des "Flickering LED Candle"
zurück