So wird aus einem Lego-Raumschiff eine Uhr mit LEDs

Seite 3: Wie sage ich dem Raspberry Pi, wann er die LEDs ein- und ausschalten soll?

Inhaltsverzeichnis

Hierzu benötigen wir eine weitere Python-Bibliothek names datetime. Um deren Funktionsweise zu demonstrieren, fangen wir einfach an, das Uhr-Programm zu schreiben. Wer sich für die Details der Programmierung nicht interessiert, kann das fertige Programm herunterladen und einsetzen. Um Änderungen im Code vornehmen und so die Software optimal an das eigene Projekt anpassen zu können, sollte man den Aufbau des Programms anhand der folgenden Schritte kennenlernen.

Wer sich noch in der Python-Konsole befindet, drückt zunächst die Tastenkombination STRG-D, um diese zu beenden. Dann gibt man im Terminal den Befehl nano Uhr.py ein. Dieser Befehl öffnet den Editor nano und lässt uns die Datei Uhr.py bearbeiten. Dorthin kann der folgende Code kopiert werden:

from gpiozero import PWMLED
from time import sleep
import datetime
Cockpit = PWMLED(21)
rot_links = PWMLED(16)
gruen_links = PWMLED(12)
rot_rechts = PWMLED(25)
gruen_rechts = PWMLED(4)
while True:
Zeit = datetime.datetime.now().strftime("%H:%M”)
if (Zeit == "01:00") or (Zeit == "13:00”):
Cockpit.pulse()
rot_links.pulse()
gruen_links.pulse()
rot_rechts.pulse()
gruen_rechts.pulse()
sleep(2.04)
Cockpit.off()
rot_links.off()
gruen_links.off()
rot_rechts.off()
gruen_rechts.off()
sleep(60)
sleep(0.5)

Nach dem Import der benötigten Bibliotheken versehen wir die fünf LEDs (PWMLED) mit aussagekräftigen Namen wie Cockpit. Mein Raumschiff verfügt über zwei rote und zwei grüne LEDs sowie die LEDs in der Innenraumbeleuchtung.

Solange es läuft, ruft das Programm regelmäßig die aktuelle Uhrzeit ab und schreibt diese in dem angegebenen Format in die Variable Zeit. Anschließend prüft eine if-Anweisung, ob es 01:00 Uhr oder 13:00 Uhr ist. Ist eins von beidem der Fall, leuchten alle LEDs einmal auf. Sie leuchten deshalb nur einmal, weil das Programm 2,04 Sekunden wartet – die Zeit für einen „Pulse“ der LED. Anschließend werden die LEDs ausgeschaltet und das Programm wartet weitere 60 Sekunden. Ansonsten würde die Uhr die Zeit nicht nur einmal anzeigen, sondern mehrfach.

Nach jeder Ausführung wartet das Programm eine halbe Sekunde, bevor es von vorn beginnt, die Zeit und die if-Anweisung zu überprüfen.

Das Programm speichern wir mit der Tastenkombination STRG-X und bestätigen die anschließende Abfrage mit J. Um es auszuführen geben wir python Uhr.py ein.Sofern es gerade nicht zufällig 1 oder 13 Uhr ist, passiert nach Aufruf des Programms allerdings nichts. Um den Code zu testen, müssen wir die Uhrzeit umstellen. Dafür öffnet man ein neues Terminal-Fenster und schaltet zunächst die Internet-Synchronisierung der Uhrzeit aus:

sudo timedatectl set-ntp 0

Anschließend ändert man die Uhrzeit mit dem Befehl:

sudo date -s "2019-01-01 01:00:00”

Wenn nun die LEDs blinken, funktioniert alles nach Plan. Nach dem Test sollte die Synchronisierung der Systemuhr über das Internet wieder aktiviert werden:

sudo timedatectl set-ntp 1

Als Nächstes bringen wir dem Uhr-Programm bei, die Uhrzeit auch um viertel nach eins anzuzeigen. Dafür ergänzen wir das Programm um die folgenden Zeilen:

 elif (Zeit == "01:15") or (Zeit == "13:15”):
gruen_links.pulse()
gruen_rechts.pulse()
sleep(2.04)
gruen_links.off()
gruen_rechts.off()
rot_links.pulse()
rot_rechts.pulse()
sleep(2.04)
rot_links.off()
rot_rechts.off()
sleep(60)
sleep(0.5)

Um viertel nach zeigen zunächst die grünen LEDs die Stunde an und anschließend die roten LEDs die Minuten. Beide LEDs blinken um 01:15 Uhr (bzw. 13:15 Uhr) also jeweils einmal.

Wer sich die Arbeit ersparen möchte, alle anderen Uhrzeiten per Hand einzutragen, lädt am besten einfach das fertige Programm herunter. Mit dem Programm-Code als Basis lassen sich auch weitere Projekte realisieren, zum Beispiel die Nutzung der LEDs als Wecker. Hierzu könnte noch ein Buzzer an die GPIO-Ports angelötet werden.

Dazu muss man lediglich den Befehl sudo crontab -e eingeben. Anschließend wählt man seinen bevorzugten Editor aus (ich verwende wieder nano) und navigiert mit den Pfeiltasten ans Ende der Datei. Wurde die Datei Uhr.py im Home-Verzeichnis des Raspberry Pi gespeichert, gibt man folgende Zeile ein:

@reboot sudo python /home/pi/uhr.py &

Nun speichert man die Datei (STRG-X und die Abfrage mit J bestätigen) und kann den Raspberry Pi herunterfahren. Bei jedem Hochfahren startet die Uhr nun automatisch.

Hier sind noch einige weitere Projektideen, zum Beispiel eine Spielkonsole aus LEGO.

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmmung wird hier eine Vimeo-Video (Vimeo LLC) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Vimeo LLC) übermittelt werden. Mehr dazu in unserer Datenschutzerklärung.


Oder ein motorisierter WALL-E, der mit einer Nintendo Wii-Fernbedienung gesteuert wird:

Man kann sich auch einfach aus einem LEGO-Set ein schicken Gehäuse für den Pi basteln:

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmmung wird hier eine Vimeo-Video (Vimeo LLC) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Vimeo LLC) übermittelt werden. Mehr dazu in unserer Datenschutzerklärung.


Oder eine kleine Erinnerungshilfe für den nächsten Urlaub:

Und nun viel Spaß beim Basteln! Meine LEGO-Uhr steht mittlerweile auf meinem alten Apple IIe und zeigt mir an, wie viele Stunden ich bereits mit meinem Avatar in Britannien verbracht habe. Wofür sonst könnte man die LEGO LED-Uhr einsetzen? Ich freue mich über jeden Kommentar mit Ideen, Lob oder Verbesserungsvorschlägen!

(hch)