Retroclock

Ausgangspunkt

Als ich mich mal wieder auf der Suche nach Vorlagen für meinen 3D-Drucker auf Thingiverse herumgetrieben habe, bin ich über die Retro 7 Segment Clock (Complete) von Daniel Cikic gestolpert. Diese Uhr besteht aus bis zu 6 riesigen Sieben-Segment-Anzeigen, die mit einem WS2812-LED-Strip beleuchtet werden. Im Vollausbau, also mit Sekunden Anzeige ist das Teil ca. 62 x 15cm groß. Als leicht LED-Verrückter Bastler war ich natürlich gleich schwer begeistert von dem Teil und habe gleich mit dem Nachbau angefangen. ✨

7Segment RetroClock

Der Ausdruck und der Zusammenbau der Teile war dank der ausführlichen Anleitung auf der Thingiverse-Seite kein Problem. Die Firmware, die zu dem Zeitpunkt (Version V6 von 06/2020) in dem Projekt hinterlegt war, sollte sich mit der Arduino IDE entweder für einen Arduino Nano oder den ESP8266 kompilieren lassen. Ich habe mir daraufhin die ESP8266-Version für das Nodemcu-Board gebaut und war dann ein bisschen enttäuscht, dass die Firmware nicht so richtig gut lief. Das Einlocken ins WLAN und die NTP-Synchronisation haben problemlos funktioniert, aber die Ansteuerung der LEDs hat stark geflimmert oder geblinkt etc. Alles Probleme, die mit denen ich schon in anderen Projekten mit dem ESP8266 und den WS2812-Leds auch schon zu tun hatte… 😒 Also habe ich angefangen die Elektronik und Firmware zu modifizieren.

Hardware-Modifikationen

Die WS2812-Leds brauchen eigentlich 5V-CMOS Logikpegel, damit sie stabil funktionieren. In vielen Fällen gehen (zumindest zeitweise…) auch 3.3V-CMOS-Pegel, wie sie der ESP8266 liefert. Um sicher zu gehen, dass das LED-Flackern nicht auf durch die falschen Signalpegel ausgelöst wird, habe ich einen einfachen Pegelwandler mit zwei hintereinander geschalteten 74HCT00-NAND-Gattern, in das Datensignal der LEDs eingeschleift. Hier der komplette Schaltplan:

Schaltplan ESP8266 plus Pegelwandler

Das war aber nicht alleine das Problem für das Flackern…

Neue Firmware

Das Hauptproblem der LED-Anzeige ließ sich aber auch sehr schnell löschen. Das Ursache dafür ist, dass der ESP8266 nur einen Prozessorkern hat und das Timing für die WS2812 sehr genau eingehalten werden muss. Entsprechend nutzt die verwendete FASTLED-Library alle möglichen Tricks auf dem ESP8266 um das Timing einzuhalten. Das klappt leider in Abhängigkeit von den unterschiedlichen Firmwareversionen der Library’s unterschiedlich gut. In diesem Fall war es ausreichend die Interupts während des Datentransfers zu sperren. Dazu musste man nur "#define FASTLED_ALLOW_INTERRUPTS 0" in die Sourcen eintragen und alles war eigentlich fertig.

Wo ich sowieso mich gerade durch den Sourcecode gewühlt habe, dachte ich mir, das eine Anmeldung am WLAN via WIFIManager ganz nett wäre. Außerdem wollte ich die Uhr an die Wand hängen, entsprechend fand ich das unpraktisch die Anzeigemodi per Tasten umzuschalten, besser wäre eine Umschaltung per Webinterface. Also habe ich diese Features zusätzlich in die Firmware eingebaut.

Hier das Ergebnis: Die Webseite zum Einstellen der Betriebsmodi und Zeitzone. Die Oberfläche ist nicht besonders schick oder benutzerfreundlich, aber dafür, dass ich zum ersten Mal eine HTML-Oberfläche mit Javascript-Unterstützung zusammengebaut habe, bin ich ganz zufrieden.

Webpage zur Konfiguration der Uhr

Die meine Version der Firmware inklusive der meisten verwendeten Libraries habe ich auf GITHUB abgelegt.

Hier der Link zu dem Repository.

In dem Repository befindet sich auch eine PDF-Version des Schaltplans und ein Binary der gebauten Firmware. Es is also nicht unbedingt nötig die Firmware nochmal zu compilieren.

Inzwischen hat Daniel Cikic auch eine neue Version der Firmware (v7) und eine weitere Version der Uhr veröffentlicht. Da ich aber mit den Funktionen meiner angepassten Version zufrieden bin, plane ich aber aktuell nicht, meine Anpassungen in die Firmware v7 einzuarbeiten. Hier die Links zu den aktuellsten Versionen: Retro 7 Segment Clock - the Final One(s) und die Firmware ClockSketch V7.

Fazit

Die Uhr läuft mit der Firmware stabil. Optisch gefällt mir die Uhr immer noch sehr gut! 😃 Außerdem habe ich dabei wieder ein paar Sachen über die verwinkelte Welt der ESP8266 Firmware-Libraries und Webseiten mit Javascript kennengelernt und wie man damit klar kommt.