Anzeige

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.

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 zugeschaltenem Pullup-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 jedesmal 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 jedesmal 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 an!

Darin findest du die beliebtesten Arduino-Projekte von StartHardware. Jedes Projekt umfasst Schaltplan, Bauteile, Beschreibung und Code. Für Einsteiger gibt es ein Arduino-Schnellstart-Kapitel und einen kompakten Programmierkurs. Zusätzlich findest du Zwischenkapitel mit Expertenwissen zu den Komponenten, die verwendet werden. Alle Code-Beispiele gibt es natürlich als Download.

Weitere Informationen findest du auf der Produktseite. Klicke jetzt auf den Button, um Details anzusehen.


Jetzt bist du gefragt: Welches Projekt würdest du gern auf dieser Seite finden? *


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.