Eigene Word-Clock bauen

Hier zeige ich euch, wie man günstig und einfach eine eigene Wort-Uhr bauen kann.

Einige von euch haben die bestimmt schonmal gesehen – die Word-Clocks oder Wort-Uhren. Anstatt die Uhrzeit in Zahlen auszudrücken, zeigen die Word-Clocks die Uhrzeit (wer hätte es auch anders gedacht) in Wörtern. Dazu wird kein Display verwendet, sondern eine Platte mit ausgestanzten Buchstaben, die von hinten mit LEDs beleuchtet wird. Verbaut wird die Uhr in einem 23×23 RIBBA-Bilderrahmen von IKEA.

Das Projekt befindet sich aktuell noch ziemlich am Anfang (zumindest was die Software angeht). Die Hardware kann man jedoch selbst einfach nachbauen. Das man jedoch benötigt ist ein Laser-Cutter. Dazu muss man keinen eigenen besitzen, sondern kann entweder einen der zahlreichen Dienstleister anfragen oder nach einem MakerSpace oder FabLab o.ä. in der Nähe suchen. Also einfach in der Suchmaschine eurer Wahl z.B. „MakerSpace [MEINE_STADT]“ eingeben und schauen ob was in der Nähe ist.

Die Vorlagen für die Platte und das Gerüst habe ich auf GitHub bereitgestellt. Was ihr zusätzlich benötigt wären ein Wemos D1 mini (oder eine Alternative) und ein LED-Band mit 60 LEDs pro Meter mit WS2812b LEDs. Ich verlinke euch hier mal einige Quellen:

Word-Clock – Die WLAN Wort-Uhr zum selber bauen

Wie das dann montiert wird habe ich in einem Video zusammengefasst.

Den Quellcode zum Flashen stelle ich demnächst auch im GitHub-Repository bereit.

Die aktuelle Uhrzeit bezieht die Uhr über einen NTP-Server. Geplant ist jedoch ein RTC-Modul (bereits bestellt 🙂 ) um die Uhr auch ohne Internet-Anbindung synchron zu halten. Über MQTT kann man die Farbe der LEDs anpassen.

Vorstellbar für die Zukunft wären auch Animationen. Es lässt sich quasi jede Grafik im Format 11×11 Pixel darstellen. Vielleicht kann man das verwenden um z.B. Notifications darzustellen.

Was habt ihr noch für Vorschläge und Anregungen? Schreibt es mir in die Kommentare.

34 Antworten auf „Eigene Word-Clock bauen“

  1. Gefällt mir, sehr einfach gehalten. Will mir auch eine bauen, jedoch will ich eine möglichst flache, größere Uhr (45x45cm) mit Glasfront.
    Die zu bauen ist kein Problem, aber von der Software verstehe ich nichts. Glaubst du der Wemos funktioniert auch mit einem anderen Layout?

    1. Seitens der Software wäre das mit dem Wemos auf jeden Fall möglich auch ein anderes Layout anzusprechen. Es müsste in der Software nur angegeben werden welche LED zu welcher Uhrzeit leuchten sollen.

      1. Ich werde es mal versuchen 🙂 Als Anregung könnte man das Holz noch schwarz lackieren und vielleicht eine Batterie als Stromversorgung verwenden damit die Uhr komplett kabellos ist. Und den Wemos finde ich echt genial da man mit dem echt viel rumspielen kann..

  2. Hallo,

    ich habe auch Interesse an einer Wortuhr.

    Allerdings auch in einer Größe von etwa 45×45 cm.

    Die Front könnte man auch aus einem Edelstahlblech machen.

    René K., bist du mit deiner Wortuhr schon angefangen?

  3. Hi!
    ich baue auch hin und wieder mal Wordclocks. Ich habe für meine letzten auch den WS2812B benutzt.
    Kann man die komplette Kette an den Wemos anschließen? Also bei voller Helligkeit sind es bei 100 LEDs schon 6 Ampere.
    Ich nutze immer einen MSP430 als Controller, und habe die Helligkeit auf unter 2A begrenzt. Zusätzlich habe ich eine Schmelzsicherung eingebaut, falls mal durch einen Fehler die komplette Matrix auf 100% geht.
    Wie stellst Du sicher, dass dir da nichts abbrennt?
    Gruß, Steffen

    1. Hi, ich nutze nur 15% der Helligkeit und habe höchstens 22 LEDs gleichzeitig an. Dürfte (gerechnet und nicht gemessen) bei etwa 200mA sein. Wenn alle LEDs (bei mir 121) an sind, komme ich auf etwas über 1A. Für mich reichen die 15% Helligkeit vollkommen aus. Eine Sicherung (außer der softwareseitige Begrenzung) habe ich nicht verbaut.

      Mit dem MSP430 habe ich bislang noch nichts gemacht. Mit dem Wemos hatte ich noch keine Probleme bis jetzt. Das komplette LED-Band über den Wemos laufen zu lassen würde ich nicht machen. Die Stromversorgung des LEDs würde ich seperat machen und über wen Wemos nur die LEDs steuern.

  4. Hi, tolles Projekt und es klingt ja so einfach 🙂

    Allerdings ist es da wohl doch nicht ganz. Ich bekomme ständig folgende Fehlermeldung :
    homie.h: No such file or directory

    Wie binde ich denn diesen Ordner korrekt ein?
    Meine Ordnerstruktur sieht momentan wie folgt aus:
    wordclock(ordner) {
    wordclock(sketch) + data(ordner) {
    homie(ordner) {
    config(json) + ui_bundle(gz)
    } } }

    Kannst du mir da nochmal einen Tipp geben?

    P.S. ich bin totaler Anfänger und bin schon froh, dass ich es es mittlerweile (nach ca. 4 Wochen) geschafft habe, die config Datei inklusive MQTT aufzuspielen 😉

    Danke dir!

  5. Tolles Projekt, Super erklärt!!

    Meine Frage zu dem ganzen… Wo kann man sich so ein gerüst bauen oder besser kaufen??
    Das mit der Ribba ist echt toll, will jetzt auch so ein project anstarten allerdings mit eoner 45*45 cm Ribba.

    Welche Batterie oder Akku kann man da einbauen?

    Will ein bisschen mobil sein 🙂

    Danke nochmal für die tolle Anleitung

    1. Hi,

      freut mich, dass Dir das Projekt gefällt. Das Gerüst habe ich mit einem Lasercutter gemacht. In jeder größeren Stadt gibt es ein Makerspace in dem man für kleines Geld den Lasercutter verwenden kann. Einfach mal nach „Makerspace [STADT]“ oder „Fablab [STADT]“ googeln. Mit Batterien oder Akku habe ich dahingehend noch nichts gemacht. Du kannst aber z.B. eine Powerbank verwenden. Die kosten auch nicht mehr soo viel.

  6. Hallo!
    Super Tutorial!! Habe jetzt vor mir diese Uhr nachzubauen.
    Die Platten bekomme ich auf Blech gelasert 😉
    habe nur leider ständig Probleme beim Upload des Sketches. Hoffe mir kann da jemand helfen…
    Fehler:

    WARNUNG: Unberechtigter Ordner .circleci in der Bibliothek ‚Homie‘
    In file included from C:\Users\dirkl\Documents\Arduino\libraries\homie-esp8266-master\src/Homie.hpp:13:0,

    from C:\Users\dirkl\Documents\Arduino\libraries\homie-esp8266-master\src/Homie.h:4,

    from C:\Users\dirkl\Desktop\Arduino\wordclock-master\wordclock-master\src\wordclock\wordclock.ino:1:

    C:\Users\dirkl\Documents\Arduino\libraries\homie-esp8266-master\src/Homie/Boot/BootConfig.hpp:9:31: fatal error: ESPAsyncWebServer.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    Fehler beim Kompilieren für das Board LOLIN(WEMOS) D1 R2 & mini.

    LG Dirk

  7. Hallo!
    Super Tutorial!! Habe jetzt vor mir diese Uhr nachzubauen.
    Die Platten bekomme ich auf Blech gelasert 😉
    habe nur leider ständig Probleme beim Upload des Sketches. Hoffe mir kann da jemand helfen…
    Fehler:

    WARNUNG: Unberechtigter Ordner .circleci in der Bibliothek ‚Homie‘
    In file included from C:\Users\dirkl\Documents\Arduino\libraries\homie-esp8266-master\src/Homie.hpp:13:0,

    from C:\Users\dirkl\Documents\Arduino\libraries\homie-esp8266-master\src/Homie.h:4,

    from C:\Users\dirkl\Desktop\Arduino\wordclock-master\wordclock-master\src\wordclock\wordclock.ino:1:

    C:\Users\dirkl\Documents\Arduino\libraries\homie-esp8266-master\src/Homie/Boot/BootConfig.hpp:9:31: fatal error: ESPAsyncWebServer.h: No such file or directory

    #include

    ^

    compilation terminated.

    exit status 1
    Fehler beim Kompilieren für das Board LOLIN(WEMOS) D1 R2 & mini.

    LG Dirk

    1. Hallo Dirk,

      die Warnung (.circleci) kann ignoriert werden. Der Kompilierungsfehler wird aber wohl damit zusammenhängen, dass nicht alle Bibliotheken, die Homie benötigt installiert wurden. Unter https://homieiot.github.io/homie-esp8266/docs/stable/quickstart/getting-started/ gibt es eine Übersicht aller Bibliotheken und eine Anleitung wie diese installiert werden können. Dazu gibt es auch ein Video auf Youtube: https://www.youtube.com/watch?v=bH3KfFfYUvg

      Ich hoffe, dass dir das weiterhelfen konnte 🙂

      Beste Grüße

  8. Guten Morgen,
    ich habe alle Libaries mit den passenden Versionen installiert .
    Bekomme jetzt aber endlose Fehlermeldungen mit der Aduinojson.
    Hatte das schon jemand oder kann mir noch jemand tipps geben?
    Liegts an der Arduino IDE 1.8.5? Oder sollte ich am besten alles noch mal neu installieren???

    LG Dirk

  9. Hi. Also diese Fehlermeldung kommt:

    Arduino: 1.8.5 (Windows 10), Board: „LOLIN(WEMOS) D1 R2 & mini, 80 MHz, Flash, Disabled, 4M (no SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 921600“

    WARNUNG: Unberechtigter Ordner .circleci in der Bibliothek ‚Homie‘
    In file included from C:\Users\dirkl\Documents\Arduino\Projects\wordclock-master\src\wordclock\wordclock.ino:2:0:

    C:\Users\dirkl\Documents\Arduino\libraries\FastLED/FastLED.h:14:21: note: #pragma message: FastLED version 3.002.006

    # pragma message „FastLED version 3.002.006“

    ^

    In file included from C:\Users\dirkl\Documents\Arduino\libraries\FastLED/FastLED.h:65:0,

    from C:\Users\dirkl\Documents\Arduino\Projects\wordclock-master\src\wordclock\wordclock.ino:2:

    C:\Users\dirkl\Documents\Arduino\libraries\FastLED/fastspi.h:110:23: note: #pragma message: No hardware SPI pins defined. All SPI access will default to bitbanged output

    # pragma message „No hardware SPI pins defined. All SPI access will default to bitbanged output“

    ^

    C:\Users\dirkl\Documents\Arduino\libraries\homie-esp8266-develop\src\Homie\Config.cpp: In member function ‚bool HomieInternals::Config::load()‘:

    C:\Users\dirkl\Documents\Arduino\libraries\homie-esp8266-develop\src\Homie\Config.cpp:71:56: error: no matching function for call to ‚ArduinoJson::JsonObject::containsKey(const __FlashStringHelper*)‘

    if (parsedJson.containsKey(F(„device_stats_interval“))) {

    ^

    C:\Users\dirkl\Documents\Arduino\libraries\homie-esp8266-develop\src\Homie\Config.cpp:71:56: note: candidate is:

    In file included from C:\Users\dirkl\Documents\Arduino\libraries\ArduinoJson\src/../include/ArduinoJson/JsonObject.hpp:148:0,

    from C:\Users\dirkl\Documents\Arduino\libraries\ArduinoJson\src/../include/ArduinoJson/JsonArray.ipp:11,

    from C:\Users\dirkl\Documents\Arduino\libraries\ArduinoJson\src/../include/ArduinoJson/JsonArray.hpp:175,

    from C:\Users\dirkl\Documents\Arduino\libraries\ArduinoJson\src/../include/ArduinoJson.h:9,

    from C:\Users\dirkl\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:14,

    from C:\Users\dirkl\Documents\Arduino\libraries\homie-esp8266-develop\src\Homie\Config.hpp:5,

    from C:\Users\dirkl\Documents\Arduino\libraries\homie-esp8266-develop\src\Homie\Config.cpp:1:

    C:\Users\dirkl\Documents\Arduino\libraries\ArduinoJson\src/../include/ArduinoJson/JsonObject.ipp:47:13: note: bool ArduinoJson::JsonObject::containsKey(ArduinoJson::JsonObjectKey) const

    inline bool JsonObject::containsKey(JsonObjectKey key) const {

    ^

    C:\Users\dirkl\Documents\Arduino\libraries\ArduinoJson\src/../include/ArduinoJson/JsonObject.ipp:47:13: note: no known conversion for argument 1 from ‚const __FlashStringHelper*‘ to ‚ArduinoJson::JsonObjectKey‘

    exit status 1
    Fehler beim Kompilieren für das Board LOLIN(WEMOS) D1 R2 & mini.

    Dieser Bericht wäre detaillierter, wenn die Option
    „Ausführliche Ausgabe während der Kompilierung“
    in Datei -> Voreinstellungen aktiviert wäre.

    1. Hast du es mit der aktuellsten 5er Version probiert? Also der 5.13.2? Ich hab aktuell nicht im Kopf welche Version ich verwendet habe, werde das aber heute Abend einmal prüfen und posten.

  10. Kommen jetzt noch mehr Fehler.

    C:\Users\dirkl\Documents\Arduino\libraries\ESPAsyncTCP-c8ed544fd867361c4620889b4a582246a16a9913\src\ESPAsyncTCP.cpp:66:31: error: invalid conversion from ‚int8_t (*)(void*, tcp_pcb*) {aka signed char (*)(void*, tcp_pcb*)}‘ to ‚tcp_poll_fn {aka long int (*)(void*, tcp_pcb*)}‘ [-fpermissive]

    tcp_poll(_pcb, &_s_poll, 1);

    ^

    In file included from C:\Users\dirkl\Documents\Arduino\libraries\ESPAsyncTCP-c8ed544fd867361c4620889b4a582246a16a9913\src\ESPAsyncTCP.cpp:27:0:

    C:\Users\dirkl\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.0/tools/sdk/lwip2/include/lwip/tcp.h:421:18: error: initializing argument 2 of ‚void tcp_poll(tcp_pcb*, tcp_poll_fn, u8_t)‘ [-fpermissive]

    void tcp_poll (struct tcp_pcb *pcb, tcp_poll_fn poll, u8_t interval);

    ^

    C:\Users\dirkl\Documents\Arduino\libraries\ESPAsyncTCP-c8ed544fd867361c4620889b4a582246a16a9913\src\ESPAsyncTCP.cpp: In member function ‚bool AsyncClient::connect(IPAddress, uint16_t)‘:

    C:\Users\dirkl\Documents\Arduino\libraries\ESPAsyncTCP-c8ed544fd867361c4620889b4a582246a16a9913\src\ESPAsyncTCP.cpp:81:22: error: ‚ip_route‘ was not declared in this scope

    netif* interface = ip_route(&addr);
    …..

  11. Es sieht so aus als ob die Kompelierung mit der 1.2 Version geklappt hat. 😊
    D.h. jetzt den Sketch hochladen und die Daten mit der geänderten config hochladen? Ich bin so gespannt.

    1. Ja genau. Ich werde es evtl. schaffen an den Ostertagen eine neue Version zu programmieren, die dann auch etwas simpler zu installieren ist und auch ohne MQTT auskommt.

  12. OK. Da bin ich dann mal gespannt. Ist das denn normal das jetzt der wemos D1 Mini am blinken ist?
    Auf dem Router ist ja auf jeden Fall angemeldet, da zeigt er sich schon.

    1. Guten Morgen, MQTT und Hassio ist im Prinzip ganz simpel. Wenn du den MQTT-Broker von Hassio noch nicht aktiviert hast musst du in deiner configuration.yaml bloß folgenden Code hinzufügen:

      mqtt:
        password: HIER_DEIN_GEWÄHLTES_PASSWORT

      Nach einem Neustart starten Hassio einen MQTT-Broker auf den du dich dann mit dem Benutzernamen „homeassistant“ und dem gewählten Passwort anmelden kannst. Dazu nutzt du dann die IP-Adresse von Hassio und den Port 1883.

      Wenn du die Daten dann in der Wordclock-Konfiguration eingegeben und hochgeladen hast verbindet sich die Wordclock mit dem MQTT-Broker.

      Ob das funktioniert hat kannst du dann im Hassio testen. Dazu gibt es im linken Menü von Hassio unten ein Icon (bei mir das zweite von rechts). Von dort aus kannst du Pakete an die Uhr senden.

      Dazu sind zwei Werte aus der Wordclock-Konfiguration wichtig. Die „device_id“ und „base_topic“.

      Du kannst dann im Hassio bei „topic“ folgendes eingeben: [base_topic]/[device_id]/offset/offset/set (standardmäßig wäre das wordclock/c01/offset/offset/set) und als Payload dann die Anzahl an Stunden, die verstellt werden sollen, z.B. 1

      Dadurch kannst du dann schonmal testen ob die Stunden angepasst werden können.

      Sollte das geklappt haben kannst du mit dem Topic: wordclock/c01/color/rgb/set und einem Hexadezimalen Farbcode als Payload die Farbe ändern. Für weiß wäre das z.B. ffffff

      Ich hoffe ich konnte dir einwenig weiterhelfen.

  13. Super. . hab es jetzt über den Mosquitto Broker geschafft. World Clock ist verbunden. Nur leider läuft es nicht mit dem setzern der Farben:
    Node color: rgb property not settable

    Wie hast du es eigentlich mit dem RTC Modul vor? Kommen da noch Buttons zu, für Einstellungen?

    1. Ach, mein Fehler. Das Topic müsste wordclock/c01/color/color/set lauten. Aber genau, wenn ich das RTC Modul integriere wollte ich Buttons für die Zeiteinstellung und evtl. Farbwahl einbauen. Muss mir da noch was genaueres überlegen. 🙂

  14. Das ist sehr gut. Dann ist sie Uhr auch völlig unabhängig vom Internet. Nicht jeder hat einen homeserver…
    Habe es jetzt mit der genannten topic versucht. Bekomme aber immer noch die gleiche fehlermeldung. Woran kann das liegen?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.