3D-Drucker

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
}

Willst du noch mehr über Arduino erfahren, damit du so richtig durchstarten kannst?
Oder suchst du spannende Projekte zum Nachbauen?
Dann sieh' dir unbedingt die E-Books von StartHardware an.


Bevor du gehst, würdest du mir helfen, diese Website besser zu machen, indem du ganz kurz an einer Umfrage teilnimmst? Sind nur zehn Fragen und das würde mir sehr viel bedeuten.

Ich hoffe, der Beitrag hilft dir weiter. Und falls du weitere Fragen hast, stelle sie gern hier im Arduino-Forum.

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.