Beim Kochen sind nicht alle Gerichte gleichzeitig fertig. Ein einfacher Doppelwecker löst das Problem.
Beim Kochen sind nicht alle Gerichte gleichzeitig fertig, und sei es nur, weil jeder im Haushalt seine eigene Vorstellung von der idealen Kochzeit des Frühstückseis hat. Ein einfacher Doppelwecker löst das Problem.
Dieses Projekt verwendet neben einem Pi Zero einige billige Komponenten, die bei den üblichen Versendern für wenige Euro über die Ladentheke gehen. Im Prinzip ist es möglich, das Projekt ohne Löten auf einem Breadboard nachzubauen. Daher eignet es sich als Einstiegsprojekt für eigene Experimente.
Auf dem Pi Zero installieren Sie im Vorfeld Raspbian “Buster”, die Lite-Version genügt dabei vollkommen. Als einziges Zusatzpaket sollten Sie vorerst wiringpi installieren. Wer gerne auf einer grafischen Oberfläche arbeitet, wechselt besser auf einen RasPi 3 oder 4. Für den eigentlichen Einsatzzweck sind diese Plattformen aber im Grunde völlig überdimensioniert.
Das gilt streng genommen sogar für den Pi Zero, denn einen Wecker steuern kann im Prinzip jeder Mikrocontroller. Ein RasPi hat aber den Vorteil, dass sich die Software schneller und einfacher implementieren lässt – beim vorliegenden Projekt kommt Python zum Einsatz. Bevor es jedoch an die Software für das Projekt geht, verkabeln Sie die Hardware wie in den nächsten Abschnitten beschrieben.
Mini-Displays
Ideal für die Anzeige von (Uhr-)Zeiten sind Segmentanzeigen auf Basis des TM1637-Treibers (Abbildung 1). Mit sieben Segmenten lässt sich jede Ziffer darstellen, entsprechende Displays finden Sie mit dem Suchbegriff “7-Segment-Display”. Die monochromen Anzeigen gibt es für wenige Euro in den Farben Rot, Weiß, Blau, Gelb und Grün. Des Weiteren sind sie sowohl mit einem Doppelpunkt in der Mitte (Typ “Uhr”) als auch mit je einem Dezimalpunkt je Ziffer erhältlich.

Abbildung 1: Ein typisches 7-Segment-Display.
Allerdings liefern viele Anbieter (insbesondere auf Ebay) hier nicht immer die korrekten Daten. Oft findet man etwa die Beschreibung des Uhr-Typs, kombiniert mit einer Abbildung des Dezimalpunkt-Displays. Andere Anbieter zeigen gleich beide Typen, um sich vor Beschwerden über eine falsche Lieferung zu schützen. Sehen Sie hier also besser genau hin.
Ein weiterer Aspekt betrifft die Anschluss-Pins. Vorgelötete Exemplare wie in Abbildung 1 sind zwar praktisch für Experimente auf dem Breadboard, aber für den Einbau in ein Gehäuse wären von hinten angelötete Pins sinnvoller. Den perfekten Baustein zu finden, ist gar nicht so einfach.
TM1637-Displays benötigen neben Strom und Masse noch zwei Leitungen (CLK und DIO, Takt und Daten). Es handelt sich um ein abgespecktes I2C-Protokoll, das an beliebigen Pins funktioniert. Der Baustein verträgt 5 Volt als Eingangsspannung, die 3,3 Volt am RasPi sind aber völlig ausreichend.
In diesem Projekt kommen die Displays an GPIO6 und GPIO13 (linkes Display, CLK beziehungsweise DIO) sowie die Pins GPIO12 und GPIO16 zum Einsatz. Abbildung 2 zeigt zur Orientierung den kompletten Aufbau mit der Verkabelung.

Abbildung 2: Fritzing-Ansicht der Verkabelung.
Weckerklingel
Als Alarmgeber dient ein Summer (engl. Buzzer). Hier sollten Sie zu einem aktiven Exemplar greifen; bei den passiven Varianten müssten Sie den Ton über PWM-Signale selbst erzeugen. Typischerweise gibt es die Buzzer mit zwei oder drei Pins. Im ersteren Fall genügt das Anlegen einer Spannung (GPIO auf High setzen), bei der Alternative gibt es neben Spannung und Masse noch einen Steuer-Pin. Bei den Exemplaren, die der Autor in seinem Beispiel verwendet hat, war es notwendig, den Steuer-Pin auf Low zu ziehen, damit der Buzzer losgeht.
Das Weckerprogramm erwartet den Steuer-Pin auf GPIO26. Die Funktionsweise testen Sie mit den Zeilen aus Listing 1. Die erste schaltet GPIO26 als Ausgabe-Pin, die zweite aktiviert den Buzzer. Die dritte Zeile schaltet ihn wieder aus. Beim Hochfahren ist GPIO26 ein Eingangs-Pin, und Sie hören eventuell kurzzeitig einen Ton. Wenn das stört, hilft ein schwacher Pullup-Widerstand.
Listing 1
$ gpio -g mode 26 out $ gpio -g write 26 0 $ gpio -g write 26 1
Umschalter
Zum Bearbeiten der Alarmzeiten müssen Sie zwischen den beiden Displays umschalten können. Dazu verwenden Sie einen Slider, einen Button mit zwei Zuständen. Von seinen drei Anschlüssen kommt der mittige auf Masse, und je nach Position des Schalters liegt dann entweder der linke oder der rechte Anschluss auf Masse.
Im Projekt sind nur der linke Anschluss (GPIO20) und Masse verkabelt. Außerdem wird der interne Pullup von GPIO20 eingeschaltet. Wenn der Schalter also rechts liegt, dann ist GPIO20 High, ansonsten Low. Das Programm in Listing 2 dient zum Test. Den Befehl in der dritten Zeile wiederholen Sie bei verschiedenen Schalterstellungen; je nach Position gibt der Befehl zum Lesen eine 0 oder eine 1 aus.
Listing 2
$ gpio -g mode 20 in $ gpio -g mode 20 up $ gpio -g read 20






