Binär-Uhr mit dem Kniwwelino basteln

Seite 2: Code-Optimierungen

Inhaltsverzeichnis

Wesentlich eleganter und viel kürzer wird der Code, wenn man die Zehner- und Einerstellen mit Modulo und Division durch Zwei bearbeitet. Dafür brauchen wir wieder zwei Funktionsblöcke. Das Zerlegen der Zeitangabe in vier Ziffern bündeln wir zunächst im Block zu get time. Für die Umrechnung in binäre Werte nutzen wir den Block zu to binary. Darin teilen wir die Ziffern (als Variable solution) solange durch 2, bis eine 0 herauskommt. Der Rest (Modulo) ist bei dieser Division immer 1 oder 0. Diesen Rest (nextDigit) schreiben wir uns in einen Puffer (old). Danach wird der ganzzahlige Rest der Operation erneut durch zwei geteilt und der Rest bestimmt, und so weiter.

5:2 = 2, Rest 1
2:2 = 1, Rest 0
1:2 = 0, Rest 1

Wenn wir bei 0 als Ergebnis unserer Division angekommen sind, testen wir, ob wir 5 Stellen zum Puffer old hinzugefügt haben. Wenn das nicht der Fall ist, füllen wir die fehlenden Stellen mit 0 auf, sodass wir jede LED pro Spalte berücksichtigen. Im Hauptprogramm wiederhole dauerhaft rufen wir unsere Unterprogramme nun abwechselnd auf und schreiben die errechneten Binärwerte in einen weiteren Puffer (buffer). Zwischen Stunden und Minuten hängen wir noch 00000 an, um eine Trennung zu erzeugen: Die ersten beiden Spalten der LED-Matrix stellen die Stunden dar, die Mitte bleibt leer und rechts sind die Minuten zu sehen.

Als erste Stelle des Buffers setzen wir ein B, da der Kniwwelino Icons immer als eine Zeichenkette von 26 Zeichen verarbeitet, die mit B beginnt, gefolgt von 25 Einsen oder Nullen. Das sieht man auch, wenn man sich den generierten Arduino-Code für den Block zeige ein Icon auf der Matrix ansieht. Dazu kann man im Kniwwelino-Editor rechts auf den grünen Button Quellcode klicken. Auf der LED-Matrix wird die Uhr schließlich angezeigt (zeige ein Icon auf der Matrix buffer). In der untersten Zeile beginnt der Kniwwelino dabei mit der letzten Stelle jedes Binärwertes.

Diese Version der Binär-Uhr ergibt schon mal eine schöne kleine Variante für den Schreibtisch, aber wir spielen auch gerne mit WS2812-LED-Streifen und haben immer Reste davon herumliegen. Also haben wir noch etwas gebrainstormt und im Netz gestöbert. Da sind wir auf die City Clock gestoßen – eine Binäruhr in einem Holzgehäuse, das an Pariser Architektur angelehnt ist. Weil die Architektur bei uns in Luxemburg ähnlich ist, haben wir uns auf die Suche nach einer typischen Skyline gemacht und die Fassaden etwas an unsere Bedürfnisse angepasst.

Entwurf der luxemburgischen Skyline

(Bild: Tim Schmitz)

So wurden der Palais du Luxembourg schmaler und das Rathaus bekam einfach zwei extra Stockwerke. Nur die Kathedrale Notre-Dame, deren Fassade jetzt von einem "riesigen" Kniwwelino verziert wird, ist weitgehend dem Original nachempfunden. Die einzelnen Teile für die Uhr haben wir zunächst aus Karton gelasert und nach einem kurzen Probesitzen der LED-Streifen noch einmal aus Sperrholz gefertigt (hier sind die Schnittdaten zum Herunterladen ).

Umsetzung im Lasercutter

(Bild: Tim Schmitz)

Der Kniwwelino wird am besten in einer 3D-gedruckten Hülle montiert. Damit der Streifen in die Uhr passt, haben wir ihn in einen Abschnitt mit 2 LEDs und drei Abschnitte mit 4 LEDs zerschnitten. Anschließend haben wir die Abschnitte wieder mit dünnen Kabeln verlötet, sodass der Pin Din eines Streifens am Pin Dout des vorhergehenden Nachbarn hängt sowie 5V mit 5V und Gnd mit Gnd verbunden ist. An den Kniwwelino wird der Zweierstreifen über einen der digitalen Pins D5, D6 oder D7 angeschlossen. Wir haben außerdem ein Micro-USB Beakout-Board verwendet, um den Streifen mit Spannung zu versorgen, da der Kniwwelino nur 3,3 Volt und damit zu wenig bereit stellt. Wir betreiben die Uhr nun mit einem ausgedienten USB-Netzteil.

Für die Uhr sind nur ein LED-Streifen und eine Platine zur USB-Spannungsversorgung nötig.

Der Code für diese Variante unterscheidet sich nur gering zum Vorhergehenden. Wir schreiben nicht mehr alle Nullen und Einsen der Zeit in einen Buffer, sondern geben sie direkt an die LED-Streifen weiter (setze Pixel index auf Farbe). Dabei ist index eine Variable, die unsere LEDs durchzählt. Alle Einsen werden auf grün geschaltet, während die Nullen blau angezeigt werden. Um alle LEDs leuchten zu lassen, werden die übrigen Pixel einfach in rot aufgefüllt. Allerdings haben wir pro Spalte höchstens 4 LEDs verbaut, während auf der Matrix jeweils 5 waren), sodass wir auch nur 4 Stellen abfragen müssen. Der Kniwwelino schließlich darf – für alle, die noch über die Uhrzeit rätseln – die Zeit ganz herkömmlich als durchlaufende Dezimalzahl anzeigen.

An dieser Stelle haben wir aufgehört, aber durch die Verwendung von MQTT-Nachrichten ließe sich das Programm noch um viele Extras erweitern. So könnte man die zwei Knöpfe auf dem Kniwwelino nutzen, um Aktionen in der Heimautomatisierung zu steuern oder man könnte die mit einem Sensor die Temperatur von einem Gewächshaus anzeigen lassen. (hch)