Zum Inhalt springen
Kronleuchter mit Arduino Titelbild

Kronleuchter mit Arduino

    Heute bauen wir einen Kronleuchter mit Arduino. Er wird auf sechs LEDs bestehen, die ab und zu aufflackern, als wären es Kerzen. Wir nutzen dazu die PWM-Kanäle des Arduino-Boards. Den Kronleuchter kann man zum Beispiel in Puppenhäusern oder LEGO-Modellen verbauen. Er passt auch sehr gut Dioramen oder andere Modelle.

    Bauteile

    Schaltung

    Kronleuchter mit Arduino Schaltplan

    Die Schaltung für unseren Kronleuchter mit Arduino besteht aus je sechs Reihenschaltungen aus einem Widerstand und einer LED. Der Widerstand ist mit dem GND und dem kürzeren Beinchen der LED (Kathode) verbunden. Das längere Beinchen der LED (Anode) ist mit einem der PWM Kanäle des Arduino-Boards verbunden. Darüber hinaus gibt es noch einen Taster, der später der An-/Aus-Schalter des Kronleuchters sein wird. Er ist mit dem GND und dem digitalen Pin 12 des Arduino-Boards verbunden.

    Kronleuchter mit Arduino Schaltung

    Funktion

    Startet man das Programm, bleibt der Kronleuchter zuerst ausgeschaltet. Drückt man den Taster, leuchten alle sechs LEDs auf. Sie flackern in unregelmäßigen Abständen, um das Verhalten von Kerzen zu simulieren.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    Code-Erklärung

    Im Code wird zuerst das Array ledPins deklariert. Es speichert die Arduino-Pins, an denen die LEDs angeschlossen sind. Des Weiteren speichert die Variable buttonPin den Pin, an dem der Button angeschlossen ist. Die Variable speichert, ob Kronleuchter an oder aus sein soll (-1 = aus, 1 = an). Die boolsche Variable buttonState speichert den aktuellen Zustand des Tasters,  lastState speichert den letzten Zustand des Tasters am Ende der loop-Methode.

    Im Setup muss nur der Pin des Tasters angelegt werden. Da wir einen internen Pullup-Widerstand nutzen, muss er mit INPUT_PULLUP deklariert werden.

    Im Loop lesen wir zuerst den Taster aus:

    buttonState = digitalRead(buttonPin);

    Ist er zum ersten Mal gedrückt, keheren wir den Zustand von toggle um:

    toggle = toggle * (-1);

    Ist toggle nun größer als 0, soll der Kronleuchter eingeschaltet werden. Unter Zuhilfenahme einer for-Schleife schalten wir alle LEDs per analogWrite auf eine Helligkeit von 120.

    Um das Flackern von Kerzen zu simulieren, erzeugen wir eine Zufallszahl von 0 bis 999. Ist sie kleiner als 6, lassen wir die LED aufblinken, die den gleichen Index (also die gleiche Zahl) im Array ledPins hat.

    analogWrite(ledPins[flackerndeLED], 255);

    Ist toogle < 0 schalten wir den Kronleuchter wieder per for-Schleife ab

    analogWrite(ledPins[i], 0);

    Am Ende des Programmes merken wir uns noch den Zustand des Tasters für den nächsten Durchlauf:

    lastState = buttonState;

    Programm Code

    int ledPins[] = {3,5,6,9,10,11};                    // die Pins, an denen die LEDs angeschlossen sind
    int buttonPin = 12;                                 // der Pin, an dem der Button angeschlossen ist
    
    int toggle = -1;                                    // speichert, ob Kronleuchter an oder aus sein soll (-1 = aus, 1 = an)
    boolean buttonState;                                // speichert den aktuellen Zustand des Tasters
    boolean lastState;                                  // speichert den letzten Zustand des Tasters
    
    void setup() {
      pinMode(buttonPin, INPUT_PULLUP);                 // legt buttonPin als Input mit zugeschaltetem Pull-up-Widerstand fest
    }
    
    void loop() {
      buttonState = digitalRead(buttonPin);             // liest den Taster aus
      if ((buttonState==LOW)&&(lastState!=LOW)){        // wenn Taster jetzt gedrückt, aber vorher nicht gedrückt war
        toggle = toggle * (-1);                         // kehre den Wert von Toggle um
      }
    
      if (toggle>0){                                    // toggle > 0 bedeutet, der Kronleuchter ist eingeschaltet
        for (int i=0; i<6; i++){                        // von i=0 bis i<6 wiederhole und zähle i jedes Mal um 1 hoch (i++)
            analogWrite(ledPins[i], 120);               // schalte alle LEDs ein
            int flackerndeLED = random(1000);           // erzeuge Zufallszahl von 0 bis 999
            if (flackerndeLED<6) {                      // wenn die Zahl kleiner als 6 ist
              analogWrite(ledPins[flackerndeLED], 255); // lass die LED mit dem Index der Zufallszahl aufblinken
              delay(10);                                // warte ein bisschen
            }
        }    
      } else {
        for (int i=0; i<6; i++){                        // von i=0 bis i<6 wiederhole und zähle i jedes Mal um 1 hoch (i++)
            analogWrite(ledPins[i], 0);                 // schalte alle LEDs aus
        }        
      }
        
      lastState = buttonState;                          // merke dir den Zustand des Tasters für den nächsten Durchlauf
      delay(10);                                        // kurze Pause
    }

    Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

    • Die beliebtesten Arduino-Projekte von StartHardware
    • Inklusive Schaltplan, Beschreibung und Code
    • Arduino-Schnellstart-Kapitel
    • Kompakter Programmierkurs


    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

     

    Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.