Bis auf den Buzzer definiert das Programm alle Pins als Input (Zeilen 64 bis 71). Fehlen dem verwendeten Schalterbaustein die Pullups, dann müssen Sie die Zeilen 64 bis 68 analog wie in Zeile 69 ergänzen. Die Zeilen 73 bis 79 weisen den Pins jeweils eine Methode zu, die das Programm beim Drücken ausführt.
Beim letzten Parameter in Zeile 79 handelt es sich um die Entprellzeit – hier 200 Millisekunden. Die anderen Buttons haben Kondensatoren für das Entprellen und benötigen diese Verzögerung nicht. Verfügt der verwendete Baustein nicht über Kondensatoren, dann fügen Sie in den Zeilen 73 bis 77 den dritten Parameter ebenfalls hinzu.
Mehr Anpassungen sollten nicht nötig sein. Wenn Sie das Projekt mit nur einem Display nachbauen wollen, schließen Sie lediglich das linke Display (GPIO6/GPIO13) an, verzichten auf den Slider und verbinden GPIO20 mit Masse. An der Software sind dafür keine Änderungen erforderlich.
Unabhängig von den notwendigen Anpassungen bietet der Code die Möglichkeit, diverse Dinge nach Ihren Vorlieben zu konfigurieren. So hört der Alarmton des linken Weckers nach 10 Sekunden automatisch auf, während der rechte unbegrenzt weiterläuft. Selbst die maximale Helligkeit des Displays können Sie steuern (Werte zwischen 0 und 7). Zu guter Letzt dürfen Sie die Belegung der Pins frei wählen.
Haben Sie alles richtig verkabelt und eingerichtet, dann aktivieren und starten Sie den Service mit den Befehlen aus den Zeilen 8 und 9 von Listing 4.
Systemoptimierungen
Das Projekt wäre hier im Prinzip beendet, aber ein paar Optimierungen am System runden das Ganze noch ab. Wer eine Steckdose übrig hat und den Wecker durchgehend betreibt, der braucht sich um den Punkt Systemstart nicht zu kümmern. Wer den Wecker jedoch nur bei Bedarf anwirft, merkt schnell, dass das Booten lange dauert und das Warten nervt. Hier gibt es aber Tricks, um die Wartezeit deutlich zu verkürzen [2].
Eine weitere Optimierung betrifft das Herunterfahren: Dem Wecker fehlt ein Bedienelement dafür. Das ließe sich zwar in Form eines zusätzlichen Tasters nachrüsten, aber im Eifer des Gefechts vergisst der Koch nicht nur das Salz. Besser ist es, das System als sogenanntes Read-Only-System aufzusetzen. Linux schreibt dann nicht mehr auf die SD-Karte, und statt herunterzufahren ziehen Sie einfach den Stecker. Eine Anleitung für diesen Modus lesen Sie in einer früheren Ausgabe [3].
In unserem Spezialfall funktioniert außerdem eine deutlich simplere Methode. Sie greift allerdings nur deshalb, weil das Programm noch nicht einmal temporäre Dateien schreibt und alle anderen Programme auf dem RasPi keine Rolle spielen. Dazu kommentieren Sie in der Datei /etc/fstab einfach sämtliche Zeilen aus. Dadurch hängt der Kernel das Wurzeldateisystem beim Start zwar ein, aber im Nur-Lese-Modus, und das Boot-Dateisystem ist für den Normalbetrieb unnötig.
Neben den inneren Werten sollte das Äußere stimmen. Für den Wecker bietet sich ein schickes Gehäuse aus dem 3D-Drucker an, denn ein Breadboard mit Jumperkabeln hat in der Küche nichts zu suchen. Da die Luft dort eher feucht ist, sollten Sie statt auf das verbreitete PLA auf PETG als Material setzen. Der Autor hat bereits ein Gehäuse in Arbeit, daher lohnt sich der Besuch der Projektseite [1]: Bis zum Erscheinen des Artikels ist es vielleicht schon fertig.
Allerdings sollten Sie den Zeitaufwand für den Weg vom Breadboard zum fertigen Wecker, den Sie dann jeden Tag in der Küche sehen möchten, nicht unterschätzen. So hängen vier Bausteine an 3,3 V, der RasPi bietet aber nur zwei Pins dafür. Ohne Zusatzplatine geht also nichts. Platz für die Kabel sollte es ebenso geben, ohne dass das Gehäuse überdimensioniert ausfällt.
Außerdem stellt sich noch die Frage der Befestigung, bei der zumindest der Stromanschluss von außen noch zugänglich sein soll. Die Montage der kleineren Bauteile, etwa des einzelnen Schalters oder des Sliders, ist keineswegs trivial. Sie brauchen festen Halt, denn im Alltag müssen sie Kräften senkrecht zum Gehäuse standhalten.
Fazit
Eigene Projekte mit günstiger Hardware lassen sich mit einem Breadboard und ein paar Jumperkabeln schnell zusammenstecken. Die Software macht meist etwas mehr Arbeit, aber dank der vielen Beispiele im Internet reduziert sich der Programmieraufwand.
Ausgehend von diesem Beispiel sind nun Sie am Zug, eigene Ideen zu verwirklichen. Läuft der Wecker durch, böte es sich an, bei Nichtgebrauch auf den beiden Displays Uhrzeit und Datum anzuzeigen. Der Autor nimmt entsprechende Pull-Requests gerne entgegen. Eine andere Idee wäre es, den Wecker zu einer elektronischen Schachuhr umzubauen. Hier setzen zwei Taster die Uhren wechselseitig in Gang. Die Möglichkeiten des RasPi sind bekanntlich (fast) grenzenlos.
Der Autor
Bernhard Bablok arbeitet bei der Allianz Technology SE als SAP-HR-Entwickler. Wenn er nicht Musik hört oder mit dem Rad respektive zu Fuß unterwegs ist, beschäftigt er sich mit Themen rund um Linux, Programmierung und Kleincomputer. Sie erreichen ihn unter mailto:[email protected].
Infos
- Projektseite des Doppelweckers: https://github.com/bablokb/doubleclock
- Boot-Zeiten verkürzen: Bernhard Bablok, “Schnellstart”, RPG 06/2020, S. 22, https://www.raspi-geek.de/44059
- Softkill: Bernhard Bablok, “Finger weg!”, RPG 08/2018, S. 76, https://www.raspi-geek.de/41075





