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
- 1x Taster
- 6x Widerstand 220Ohm (rot, rot, braun)
- 6x LED (z. B. Gelb oder Weiß)
Schaltung
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.
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 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