Startseite

Knight Rider Licht

Hier zeige ich dir, wie du das Lauflicht von dem Auto K.I.T.T aus der TV-Serie Knight Rider mit ganz wenigen Bauteilen nachbauen kannst. Das kurze Video zeigt, wie es in Aktion aussieht.

Dieses Anschluss-Schema der Leuchtdioden nennt man Charlieplexing. Hier werden 12 Leuchtdioden mit nur 4 Ausgängen vom Mikrocontroller angesteuert, indem alle drei möglichen Zustände (High, Low und Hochohmig) benutzt werden.

An den freien Anschluss könnte man zum Beispiel ein Potentiometer zur Einstellung der Geschwindigkeit anschließen. Oder einen Taster, um zwischen mehreren Licht-Effekten umzuschalten. Man könnte sogar beides kombinieren.

Du kannst dieses Lauflicht wahlweise mit 3 bis 12 Leuchtdioden aufbauen. Die nötigen Bauteile sind:

Anzahl Bezeichnung Preis ca.
1 Mikrocontroller ATtinx13A-PU 0,90 €
1 Kondensator 100nF 0,10 €
4 Widerstände 100 Ohm 0,40 €
12 Leuchtdioden 1,20 €
1 Batteriekasten mit Schalter (z.B. 4,5V) 1,50 €
Summe: 4,10 €

Natürlich brauchst du auch etwas Draht und eine Platine, Steckbrett oder einfach nur ein Stück Pappe und Heißkleber, um die Bauteile irgendwie zu befestigen.

Um das Ganze mit großen Lampen aufzubauen, würde ich die Leuchtdioden durch Solid-State-Relais ersetzen, welche die größeren Lampen schalten.

Der Quelltext des Programms ist ziemlich einfach:

#include <util/delay.h> 
#include <avr/io.h>

#define DELAY 100
#define LEDS  12

void led(int number)
{
    // Zunächst alle vier Leitungen hochohmig schalten
    DDRB  &= ~0b1111;
    PORTB &= ~0b1111;
    
    switch (number)
    {
        case 1:
            DDRB  |= 0b0011;
            PORTB |= 0b0001;
            break;
        case 2:
            DDRB  |= 0b0011;
            PORTB |= 0b0010;
            break;
        case 3:
            DDRB  |= 0b0101;
            PORTB |= 0b0001;
            break;
        case 4:
            DDRB  |= 0b0101;
            PORTB |= 0b0100;
            break;
        case 5:
            DDRB  |= 0b1001;
            PORTB |= 0b0001;
            break;
        case 6:
            DDRB  |= 0b1001;
            PORTB |= 0b1000;
            break;
        case 7:
            DDRB  |= 0b0110;
            PORTB |= 0b0010;
            break;
        case 8:
            DDRB  |= 0b0110;
            PORTB |= 0b0100;
            break;
        case 9:
            DDRB  |= 0b1010;
            PORTB |= 0b0010;
            break;
        case 10:
            DDRB  |= 0b1010;
            PORTB |= 0b1000;
            break;
        case 11:
            DDRB  |= 0b1100;
            PORTB |= 0b0100;
            break;
        case 12:
            DDRB  |= 0b1100;
            PORTB |= 0b1000;
            break;
    }
}

int main(void) 
{        
    while(1)
    {
        for (int i=1; i<LEDS; i++)
        {
            led(i);
            _delay_ms(DELAY);
        }
        for (int i=LEDS; i>1; i--)
        {
            led(i);
            _delay_ms(DELAY);
        }
    }
}

Auf der Seite ISP Programmieradapter ist beschrieben, wie du das Programm in den Mikrocontroller übertragen kannst.

In meinem Buch Einstieg in die Elektronik mit Mikrocontrollern findest du eine ausführliche Anleitung, wie der Mikrocontroller funktioniert und wie man ihn programmiert. Das dort vermittelte Wissen wird dir helfen, den obigen Quelltext zu verstehen.