2027203

Adventskranz mit dem Raspberry Pi basteln

05.12.2014 | 08:30 Uhr |

Ein Adventskranz aus Reisig und Wachskerzen war gestern - Technikbegeisterte basteln sich einen Adventskranz mit dem Raspberry Pi.

Advent, Advent, ein Lichtlein brennt! An den vier Sonntagen vor Weihnachten werden traditionell der Reihe nach vier Kerzen am Adventskranz angezündet. Aber Reisig, Tannenzweige und Wachskerzen sind passe - technikbegeisterte Bastler machen sich diesen vorweihnachtlichen Schmuck mit dem Raspberry Pi.

Werner Ziegelwanger, technisch vielseitig interessiert, ist Inhaber einer EDV-Firma mit Schwerpunkt auf Programmierung für Internetanwendungen. In seiner Freizeit pflegt er einen Blog – und da er selber viele Informationen aus dem Internet holt, teilt er sein Wissen auch gern mit anderen. Diesmal greift er die vorweihnachtliche Stimmung auf und beschreibt, wie Sie sich einen Adventskranz mit dem Raspberry Pi bauen können.

Adventskranz mit dem Raspberry Pi
Vergrößern Adventskranz mit dem Raspberry Pi
© Werner Ziegelwanger

4 LED-Leuchten werden unseren modernen Adventskranz zieren und dem Datum entsprechend leuchten: Ab dem ersten Advents-Sonntag die 1. LED, ab dem zweiten zusätzlich die 2., bis schließlich zu Weihnachten alle vier Lichtlein brennen.

Das Script wird dabei so dynamisch programmiert, dass Sie es jedes Jahr wieder verwenden können.

Das brauchen Sie dazu:

  • einen Raspberry Pi

  • ein Steckbrett (Breadboard)

  • 4 LEDs

  • 4 Widerstände mit 270 Ohm

  • Steckdrähte (8 männlich-männliche für die Pibrella-Variante oder 4 männlich-männliche und 5 männlich-weibliche für die Standard-GPIO-Variante)

Vorbereitung der Hardware

Ich erkläre zwei Vorgehensweisen: einmal mit Pibrella-Erweiterungsboard für den Raspberry Pi (das Board verwende ich im allgemeinen für meine Projekte) und einmal die Standard-GPIO-Variante. Leser, die noch kein Pibrella-Board haben: bitte diesen Teil überspringen und gleich bei der Standard-GPIO-Variante weiterlesen. 

Die Pibrella-Variante

Dazu sollte das Pibrella Erweiterungsboard bereits auf dem Raspberry Pi montiert sein und das Steckbrett sollte bereitliegen. Ich habe es neben der GPIO-Schnittstelle positioniert.

Die folgenden Schritte müssen Sie nun vier Mal wiederholen (einmal pro LED-“Kerze”).

Schritt 1: LED-Lampe, Widerstand und Kabel am Steckbrett befestigen
Vergrößern Schritt 1: LED-Lampe, Widerstand und Kabel am Steckbrett befestigen
© Werner Ziegelwanger

Die Montage der einzelnen LED-Lichter ist relativ simpel. Ich habe sie bereits in einem Artikel über die GPIO-Schnittstelle erklärt. Man schaltet die LED mit dem Widerstand in Serie. Ich verwende einen 270-Ohm-Widerstand. Welchen Widerstand Sie genau verwenden müssen, hängt von der verwendeten LED und der Spannung ab. Um die 300 Ohm sind für solche Standard-LEDs beim Raspberry Pi perfekt.

Die genaue Positionierung von LED, Drähten und Widerstand sollte auf dem Bild erkennbar sein. Der Plus-Pin geht über einen Draht in das Steckbrett Reihe 7. Dort liegt Spannung an. Von dort geht der 270-Ohm-Widerstand zu Steckbrett Reihe 5, in der der längere der beiden Füße der LED eingesteckt ist. Die LED ist mit dem anderen Fuß in Reihe 4 eingesteckt, von dort führt der zweite Draht in den Minus-Pin auf das Pibrella-Board.

Schritt 2: Steckdrähte am Pibrella-Ausgangs-Pin befestigen
Vergrößern Schritt 2: Steckdrähte am Pibrella-Ausgangs-Pin befestigen
© Werner Ziegelwanger

Die beiden Steckdrähte sind am Pibrella-Board am Ausgangs-Pin mit der Bezeichnung “e” angeschlossen. Der im Bild obere Draht ist dabei jener mit der Bezeichnung + und ist am Steckbrett in der Reihe 7 (dort wo der Widerstand sitzt) angeschlossen. Der im Bild untere Draht ist auf dem Steckbrett in der Reihe 4 eingesteckt und direkt nach der LED-Lampe angebracht.

Wie das Bild oben zeigt, leuchtet die gelbe LED-Lampe am Steckbrett. Es fließt Strom. Das wird auch am Pibrella-Board durch das weiße LED direkt an dem Ausgangs-Pin “e” signalisiert.

Diese Konfiguration können Sie mit der interaktiven Python-Shell und folgenden Codezeilen testen:

1    sudo python -i 2    import pibrella 3    pibrella.output.e.on() 

Diesen ganzen Vorgang müssen Sie nun vier Mal wiederholen. Dazu reichen die 4 Ausgangs-Pins e, f, g, h am Pibrella-Board aus. Und so sieht das fertige Setup aus:

So sieht das fertige Setup aus
Vergrößern So sieht das fertige Setup aus
© Werner Ziegelwanger

Die Standard-GPIO-Variante

Wer kein Pibrella-Board hat, kann den Adventskranz trotzdem nachbauen. Ich zeige Ihnen, wie man das mit einem Standard-Raspberry Pi schafft.

Standard-GPIO-Variante - Schritt 1: LED-Lampe, Widerstand und Kabel am Steckbrett befestigen
Vergrößern Standard-GPIO-Variante - Schritt 1: LED-Lampe, Widerstand und Kabel am Steckbrett befestigen
© Werner Ziegelwanger

Wie beim Pibrella-Board beginnen wir wieder bei der ersten LED. Das Bild zeigt das vollständige Setup. Ich erkläre das Zusammenstecken anhand der ersten LED-“Kerze”. Diese ist blau und verwendet zur besseren Übersicht auch blaue Steckdrähte.

Wir stecken einen männlich-weiblich Steckdraht am Raspberry Pi in den GPIO-Pin mit der Nummer 7 (siehe dazu die Nummerierung der GPIO-Pins ). Das andere Ende des Steckdrahts endet im Steckbrett in der Zeile 7 - dort wo auch der 270-Ohm-Widerstand eingesteckt ist. Analog wie beim Pibrella-Board beschrieben ist der Widerstand mit dem anderen Fuß in Zeile 5 montiert, wo ebenfalls der längere der beiden Füße der blauen LED-Lampe eingesteckt ist. Der kürzere Fuß der LED steckt in Zeile 4.

Geschlossen wird der Stromkreis über das GND-Pin der GPIO-Schnittstelle. Da wir für alle 4 Lampen gerade mal ein GND-Pin benötigen, habe ich Pin Nummer 6 mit der ganz äußeren Spalte des Steckbretts mit dem violetten Steckdraht verbunden. Dort werden alle 4 Lampen durch einen Steckdraht verbunden, so auch die blaue Lampe. Mit einem männlich-männlichen Steckdraht schließen wir also Zeile 4 an die äußerste Spalte an.

Im 2. Schritt befestigen Sie dann die Steckdrähte an den GPIO-Pins. Für dieses Setup verwenden wir die GPIO-Pins 6 (GND für alle Lampen) und 7, 8, 10, 11 für die aktive Ansteuerung der LEDs. Generell können Sie man das Setup nach eigenen Vorstellungen machen. Wenn Sie jedoch meinen Source-Code verwenden wollen, ist der exakte Nachbau nötig.

Info zum Steckbrett:

Das Steckbrett hat außen jeweils zwei Spalten (bezeichnet mit + und -). Alle Steckplätze einer Spalte sind im Steckbrett vertikal miteinander verbunden. So können Sie den GND-Pin ganz einfach mit einem einzigen Draht auf das Steckbrett übertragen, ebenso wie die +5-V-Spannung.

Die Steckplätze in der Mitte mit der Spaltenbezeichnung a, b, c, d, e, f, g, h, i, j sind untereinander zeilenweise, also horizontal verbunden.

Damit haben Sie jetzt bereits die Hardware für den Adventskranz. Im folgenden Teil bekommen Sie das Python-Script, das die LEDs zum Leuchten bringt.

Die notwendige Software

Auch den Source-Code biete ich in zwei Varianten an. Die Ansteuerung der 4 Ausgabe-Pins des Pibrella-Boards funktioniert mit einer eigenen Python Pibrella-Bibliothek. Alternativ zeige ich, wie man die LEDs mit den “normalen” GPIO-Boards eines Raspberry Pis steuert und zwar so, dass der Source-Code sowohl auf den alten Raspberry-Pi-Versionen als auch auf den neuen Plus-Modellen funktioniert.

Die Pibrella-Variante

Das Script beginnt mit den Import der benötigten Bibliotheken. Wie Sie diese installieren, erkläre ich in einem separaten Artikel . Zusätzlich benötigen wir für die Berechnung mit Daten die datetime-Bibliothek, die man folgendermaßen in Python importiert:

1    import pibrella 2    import datetime 

Im nächsten Block werden einige Daten initialisiert. Wir holen uns das aktuelle Datum und berechnen das jeweilige Datum der 4 Advents-Sonntage. Das geht wie folgt:

1   #aktuelle Zeit holen 2   now = datetime.datetime.now() 3   #Datum extrahieren 4   jahr = now.year 5   monat = now.month 6   tag = now.day 7  8   #Wochentag von Weihnachten bestimmen 9   weihnachten = datetime.datetime(jahr, 12, 24, 0, 0, 0) 10   wochentag = weihnachten.weekday() 11   vierter_advent = weihnachten - datetime.timedelta(wochentag + 1) 12   dritter_advent = weihnachten - datetime.timedelta(wochentag + 8) 13   zweiter_advent = weihnachten - datetime.timedelta(wochentag + 15) 14   erster_advent = weihnachten - datetime.timedelta(wochentag + 22) 

Beachten Sie, dass die Daten der Advents-Sonntage vom 24.12. des aktuellen Jahres zurückgerechnet werden. Dadurch können Sie dieses Script dynamisch jedes Jahr wieder verwenden. Der eigentlich interessante Codeteil ist die If-Abfrage, in der basierend auf der Datumsinformation die einzelnen LEDs aktiviert werden.

1   #LEDS aktivieren basierend auf Datum 2   if(now <= weihnachten): 3      if(now >= erster_advent): 4        pibrella.output.e.on() 5      if(now >= zweiter_advent): 6        pibrella.output.f.on() 7      if(now >= dritter_advent):  8         pibrella.output.g.on() 9      if(now >= vierter_advent): 10       pibrella.output.h.on() 11 12   input("Programm wird mit Tastendruck beendet") 

Mit dem letzten Kommando bleibt das Script am Leben. Das heißt, die LEDs leuchten so lange, bis man das Script durch einen Tastendruck beendet. Danach werden die Pibrella-Board-Pins wieder auf den Ursprungszustand zurückgesetzt.

Den Source-Code für die Pibrella-Variante können Sie über diese Seite herunterladen.

Die Standard-GPIO-Variante

Die Standard-GPIO-Variante unterscheidet sich nur wenig von der Pibrella-Variante. Tatsächlich sind nur jene Codestellen anders, die sich auf die Kommunikation mit der GPIO-Schnittstelle beziehen. Im Importbereich wird statt der Pibrella-Bibliothek die der GPIO-Schnittstellen eingebunden:

1    import RPi.GPIO as GPIO

Dann müssen Sie die GPIO-Schnittstelle initialisieren. Das geht mit einer einzigen Codezeile. Zusätzlich lege ich im Codebereich für die Initialisierung auch Variablen für die GPIO-Pin-Nummerierung an, damit ich im Fall des Falles die verwendeten Pins problemlos austauschen kann:

1   #initialisiere GPIO 2   PIN_A = 7 3   PIN_B = 8 4   PIN_C = 10 5   PIN_D = 11 6   GPIO.setmode(GPIO.BOARD) 

Die zweite Code-Änderung bezieht sich auf die If-Abfrage, bei der hier anders kommuniziert wird als im Pibrella-Beispiel:

1   #LEDS aktivieren basierend auf Datum 2   if(now <= weihnachten): if(now >= erster_advent): 3   GPIO.setup(PIN_A, GPIO.OUT) 4   GPIO.output(PIN_A, True) 5   if(now >= zweiter_advent): 6   GPIO.setup(PIN_B, GPIO.OUT) 7   GPIO.output(PIN_B, True) 8   if(now >= dritter_advent): 9   GPIO.setup(PIN_C, GPIO.OUT) 10   GPIO.output(PIN_C, True) 11   if(now >= vierter_advent): 12   GPIO.setup(PIN_D, GPIO.OUT) 13   GPIO.output(PIN_D, True) 14   a = raw_input("Programm wir mit Tastendruck beendet") 15   GPIO.cleanup() 

Die einzelnen Pins muss man jeweils initialisieren. Man kann diese als GPIO.IN oder GPIO.OUT definieren. Da wir sie als Ausgabe-Pins nutzen, setzen wir jeweils GPIO.OUT. Erst nach dem Setup kann auf die Pins geschrieben werden.

Beachten Sie hier auch die letzte Zeile. Anders als beim Pibrella-Script müssen wir die GPIO-Schnittstelle manuell aufräumen. Ohne Cleanup-Kommando würden die LEDs weiter leuchten.

Den Source-Code für die Standard-GPIO-Variante können Sie über diese Seite herunterladen.

Werner Ziegelwanger hat auf www.pcwelt.de/hacks bereits folgende Projekte vorgestellt:

Aktiver CPU-Lüfter für den Raspberry Pi

Karaoke mit dem Raspberry Pi

Der Raspberry Pi lernt sprechen

Raspberry Pi im Auto

Hinweis für alle Bastler:

Wenn auch Sie ein kreatives Projekt entwickelt haben, schreiben Sie uns. Wir würden Ihre Konstruktionen, nützlich oder einfach nur schräg, gern auf www.pcwelt.de/hacks vorstellen. Schreiben Sie an Birgit Götz - hacks@pcwelt.de.

0 Kommentare zu diesem Artikel
2027203