Visuelle Persistenz mit LEDs

Die Persistenz des Sehens (auch: Nachbildwirkung oder Trägheit des Auges) ist der Effekt, dass sich schnell bewegende Bilder im menschlichen Gehirn zu einem Muster oder einer Form persistieren. Dafür reichen Frequenzen von 4-5 Hertz aus. Ist diesem kleinen Projekt wird dieser Effekt ausgenutzt, um aus einer Folge schnell hintereinander aufleuchtender LEDs (hier als LED-Reihe) für das menschliche Auge aussehen, als würde ein Schriftzug in die Luft projiziert.

Verwendete Bauteile

Aufbau

Aufbau und Programmierung des ATtiny ist wie zuvor beschrieben. An die ATtiny-Pins PCINT0 bis PCINT4 werden je eine LED mit Vorwiderstand gehängt. (Um den späteren Aufbau so klein wie möglich zu halten, ist es auch denkbar, nur einen Vorwiderstand für alle LEDs zu verwenden)

Schaltplan

Funktionsweise & Sketch

Um einen Schriftzug in der oben beschriebenen Weise darzustellen, werden zunächst die Buchstaben des Alphabets in Punkte zerlegt, d.h. jeder Buchstabe besteht aus einer Matrix (hier 5×n) von Punkten. Diese Punkte sollen später die einzelnen LEDs repräsentieren.
In dem Sketch werden nun jeweils immer eine Reihe einer Buchstaben-Matrix gleichzeitig dargestellt, wobei zwischen den verschiedenen Reihen eine gewisse Zeit vergeht (hier: 5ms). Zwischen den einzelnen Buchstaben soll ein etwas größerer Abstand bestehen, d.h. hier wird eine leere Reihe eingefügt (keine LED leuchtet). Die Abstände zwischen den Worten soll entsprechend noch größer sein und es werden sowohl alles LEDs gelöscht als auch der zeitliche Abstand erhöht (hier 50ms). Somit ergibt sich beim Bewegen des gesamten Aufbaus durch die Luft die Illusion, als würde ein Schriftzug in der Luft entstehen.

const int rowDelay = 5; // in ms

// Encoded text: CHRIS
const int sequence[] = {
    B00001110, B00010001, B00010001, B00000000, B00011111, B00000100, B00011111,
    B00000000, B00011111, B00001101, B00010111, B00000000, B00011111, B00000000,
    B00010111, B00010101, B00011101, B00000000
};

void setup()
{
    DDRB = 0xFF; // Sets the pins as output
}

void loop()
{
    for (int i = 0; i < sizeof(sequence) / sizeof(sequence[0]); i++) {
        PORTB = ~sequence[i];
        delay(rowDelay);
    }

    // space between the sequence repeats
    PORTB = ~0B00000000;
    delay(rowDelay * 10);
}

Rechner

Die Buchstabenfolge, die dargestellt werden soll, wird im Sketch durch die Konstante sequence festgelegt. Anstatt sich mühsam zu überlegen, wie die Buchstaben als "LED-Pixel" aussehen könnten, ist der folgende Rechner hilfreich, eigene Wörter oder Sätze darzustellen (Es werden nur Großbuchstaben ohne Umlaute kodiert):

Resultat

Leider war es schwieriger als gedacht, das fertige Resultat auf eine Kamera zu bannen, v.a. da ich nur die Kamera vom Smartphone benutze. Das folgende Foto zeigt deshalb nur ungefähr, wie der Schriftzug in die Luft mit Licht "gemalt" wird.

Visuelle Persistenz mit LEDs und ATtiny
zurück