In this post, I will build a super cool word clock with Arduino and Neopixel LEDs. Such word clocks cost several hundred euros in the trade, but with a little skill, they are also fast self-built. I show you how it works. The electronic base is similar to that of my LED-Matrix.

UPDATE 2022: I built version 2.0 of the Word clock. This time with WiFi and some games to play on it (Pong, Tetris, Snake). Find my blog post about it here.

Material for the word clock

You need the following material for the word clock. Overall they cost less than 100 EURO.

  • deep wooden picture frame 24x30cm (or similar size, amazon.de*)
  • black adhesive foil (amazon.de*)
  • NeoPixel LED Strip with 114x WS2812b LEDs (60LEDs/m) (amazon.de*)
  • Arduino Nano V3.0 (amazon.de*)
  • Real-Time-Clock Modul DS3231 (amazon.de*)
  • power supply 5V/3A (amazon.de*)
  • DC power jack 5.5×2.1 (amazon.de*)
  • two sheets of black cardboard
  • one sheet of white paper
  • some cables, one 470 Ohm resistor, one 1000uF capacitor, one small DIP switch, one ON/OFF switch

Optionally you can upgrade the Word Clock with these components:

* The links are affiliate links. The offers do not come from me, however, I receive a commission through the reference, if then a purchase takes place, but without you incurring additional costs.


Step-by-Step instructions

  1. The first step is to stick the adhesive foils onto the glass pane of the picture frame. Tip: Here it helps to spray the glass pane with detergent water first so that the bubbles can be easily pushed out of the foil afterward.
  2. The most complex task is cutting out the individual letters from the black adhesive foil. The best way to do this is to print out a template with the letters and fix it on the glass pane with adhesive tape. Now the letters can be cut out with a sharp cutter knife.
Cut out letters from the adhesive foil
  1. To avoid reflections, it is recommended to paint the back panel with spray paint.
Painted backboard
  1. Now you divide the LED strip into 10 strips of 11 LEDs each and glue them in a zigzag pattern on the back of the picture frame. It helps to mark the desired position on the back panel.
LED strip on the backboard
  1. To reduce stray light from the individual LEDs, we now create a grid structure from the black cardboard. To do this, we cut 2 cm wide strips from the cardboard and cut them 11 or 12 times up to the middle. Afterward, the strips can be put together as grids as shown in the picture below.
The black cardboard grid structure
  1. Now, it goes to the electronics. We solder the Arduino Nano with the LED strips and the real-time clock (RTC) module, as shown in the image below. Whether you use a hole board or solder the cables directly doesn’t matter. As an add-on, you can add the radio clock receiver module DCF77 and/or the light sensor LM393 module for automatic brightness control, but this is optional. The RTC module with its battery always keeps the current time. However, without using the DCF77 radio receiver, you have to flash the Arduino again when changing the battery of the RTC module.
Schematic of the word clock
Back panel with electronics
techniccontroller / think_wordclock

Arduino source code for the Wordclock on GitHub

  1. The next step is to flash the software to the Arduino. The complete source code can be found here on GitHub. It also describes which additional libraries need to be installed in the Arduino IDE. While connecting to a computer via USB, the small switch (DIP switch) must be turned off (to prevent damage to the Arduino due to the high current drawn by the LEDs).
  2. So that the letters shine as a whole and not the individual LEDs are visible, we now stick a simple sheet of white paper on the back of the glass plate. Then we fix the grid with hot glue on the glass plate.
Grid structure inside the picture frame
  1. The last step is to insert the glass plate and back panel into the picture frame. You can also add an on/off switch in the picture frame.
The word clock at day
The word clock at night

You can extend the project as desired: As some of you might have noticed in the pictures above, a built-in light sensor allows automatic adjustment of the brightness of the LEDs to the environment. I placed the light sensor inside the first “K” and connected it to an analog input (A6) of the Arduino.

Have fun rebuilding it.

Share this post

126 Comments

Kurt · 15/01/2025 at 12:45

Hallo Edgar
Vielen Dank für dieses coole Projekt! Bin voller Elan am nachbauen. Als ehemaliger Elektroniker/Informatiker hat es mich wieder mal gepackt etwas in dieser Richtung zu “werkeln”.
Du hast zwei Schemas publiziert, eines auf der deutschen (ohne LM393 Modul) das andere auf der englischen Seite (mit LM393 Modul). Bei diesen Schemas ist der Schalter nicht an gleicher Stelle positioniert.
Du schreibst: Während der Verbindung mit einem Computer über USB muss der kleine Schiebeschalter (switch) ausgeschaltet werden, da ansonsten der Arduino durch den großen Strom der LEDs beschädigt werden könnte.
Wenn ich das richtig verstehe, muss während der USB-Verbindung mit dem Computer die Leitung (+5V) zwischen dem Arduino und dem LED-Strip getrennt sein. Auf dem Schema mit dem LM393 Modul ist der Schalter nicht eingezeichnet. Kannst du mir da kurz auf die Sprünge helfen?
Besten Dank und liebe Grüsse
Kurt

    Techniccontroller · 15/01/2025 at 21:43

    Hallo Kurt,

    vielen Dank für deinen Kommentar und dem Hinweis mit dem inkonsistentem Schaltplan. Tatsächlich habe ich zwei Schalter verbaut, einen kleinen DIP switch auf der Platine, und einen Ein/Auschalter am Rahmen. Bei den beiden Schemas habe ich jeweils einen vergessen. Ich habe das Schema und den Text jetzt entsprechend angepasst.

    Der DIP Switch ist dafür das, damit der Arduino nicht die LEDs mit 5V versorgt, wenn er an USB angeschlossen ist. Das geht mit ein paar LEDs gut aber weil die Wortuhr über 100 LEDs hat kann der Strom zu groß für den Arduino werden.

    Ich hoffe jetzt ist der Schaltplan verständlicher. Bei weiteren Fragen, gerne melden.

    Viele Grüße
    Edgar

    PS: Vielen Dank für deine Spende 😉

wolfgang · 15/12/2024 at 14:06

Hallo, diese Fehlermeldung bekomme ich beim Kompilieren:

DCF77.cpp:160:21: error: ‘now’ was not declared in this scope

Jemand eine Idee?

Gruß, Wolfgang

    Techniccontroller · 15/12/2024 at 15:41

    Hallo Wolfgang,

    vielen Dank für deine Kommentare. Aufgrund deiner Frage und auch ein paar anderen Nachfragen bezüglich der Installation der Software auf dem Arduino, habe ich die README auf GitHub mit einer eine detailierten Installationsanleitung ergänzt: https://github.com/techniccontroller/think_wordclock

    Ich hoffe das hilft dir weiter. Ich würde einfach genau diese Schritte nochmal von vorne durchführen.
    Falls du noch weitere Fragen hast, gerne nochmal melden.

    Viele Grüße
    Edgar

      wolfgang · 15/12/2024 at 17:21

      Hallo Edgar, dank deiner Hilfe hat es jetzt geklappt

      Werde dann mal die LEDs anschließen und schauen was rauskommt

      Gruß, Wolfgang

      wolfgang · 15/12/2024 at 18:11

      Hallo Edgar,

      habe jetzt 5V angeschlossen und es leuchten nur 2 LEDs am Arduino: die mit POW dauernd, die L blinkt nur.
      Die LED Kette geht nicht! Hatte aber keine Batterie im RTC, muss die rein?
      Verträgt die Funkuhr 5V ? Habe alles nach deinem ersten/Deutschen Schema verdrahtet

      Bin ratlos, sorry für die vielen Fragen

      Gruß, Wolfgang

        Techniccontroller · 15/12/2024 at 18:38

        Hallo Wolfgang,

        am besten testest du dein Setup (ob alles richtig verdrahtet ist) mit einem Beispielprogramm von der Neopixel library (Datei-> Beispiele -> Adafruit NeoPixel -> simple). Einfach auf den Arduino laden, die ersten 16 LEDs sollten nacheinander grün leuchten. Bitte darauf achten, den ON/OFF Schalter einzuschalten um Spannung auf die LEDs zu geben. Wichtig ist auch das der GND Pin des Arduino mit dem Minus (GND) der LEDs verbunden ist (eben genau wie im Schaltplan gezeigt). Ja der Arduino und LEDs müssen mit 5V betrieben werden. Wenn die L LED blink sieht es mir so aus als hättest du nur das Blink.ino Beispiel auf dem Arduino geladen -> noch prüfen ob wirklich der wordclock code hochgeladen wurde (“Hochladen erfolgreich” Meldung).

        Viele Grüße
        Edgar

          wolfgang · 15/12/2024 at 20:24

          Hallo Edgar,
          jetzt läuft alles! Hatte noch 2 kalte Lötstellen gefunden. Manchmal sitzt das Problem auch vor dem Lötkolben und nicht nur vorm PC.
          Mit Hilfe des seriellen Monitors hatte ich gesehen das das RTC nicht gefunden wurde…………….
          Jetzt kann ich fertigbauen und prüfen ob die Wörter stimmen

          Gruß, Wolfgang

          wolfgang · 17/12/2024 at 17:29

          Hallo Edgar,
          habe die Uhr jetz in einem schönen Rahmen (Holz) eingebaut, alles gut bis auf das die Uhr permanent um 5 bis 10 Minuten nachgeht. RTC drin, Funkuhr drin, ich bin ratlos.
          Sketch neu aufgespielt, keine Fehlemeldungen, läuft auch, aber eben ca. 5 min nach.
          Hast du eine Idee?

          Gruss, Wolfgang

          Techniccontroller · 17/12/2024 at 20:22

          Hallo Wolfgang,

          siehst du die Uhrzeit auf dem Seriellen Monitor? Erkennst du ob das DCF erfolgreich die Uhrzeit empfangen hat (suche nach “Got new time from DCF:” im der seriellen Ausgabe)?
          Der DCF77 ist sehr empfindlich bezüglich Orientierung und kann häufig die Uhrzeit nicht empfangen. In diesem Fall zeigt die Uhr immer die Uhrzeit des Rechners an mit welchem der Aduino geflasht wurden.
          Falls zwischen flashen und Betrieb ein stromloser Zustand war, kann es sein, dass die Uhrzeit nachgeht. Sobald die Uhrzeit über DCF empfangen wurde sollte sie aber wieder richtig gehen.

          Am besten einmal prüfen wie gut die Signalstärke des DCF ist (wird beim Starten im Seriellen Monitor angezeigt) und unter Umständen die Antennenausrichtung korrigieren.

          Viele Grüße
          Edgar

wolfgang · 15/12/2024 at 12:43

Hallo Edgar, evtl. hab ich mein Probleme eben gelöst: genügt es den Sketch wordclock_german.ino auf das board zu laden? Hab ich eben mit Arduino geöffnet, da steht glaube ich alles drin

Gruss, Wolfgang

    Sönke · 15/12/2024 at 13:12

    Hallo Wolfgang, du musst in der arduino.ide den Code übersetzen. Wenn dann der arduino über USB verbunden ist kannst Du den Sketch auf den arduino laden!
    Viel Spaß mit der wortuhr!! Ich bastele auch grad an einer mit Steuerung der Farbe über besondere Ereignisse: Geburtstage rot, Sonntage grün, Wochentage in blau…..
    Grüße aus Lübeck

      wolfgang · 15/12/2024 at 13:19

      Hallo Sönke, danke erst mal
      Das Übersetzen in der IDE startet und bringt dann einen Fehler mit “time” now not declared. Vielleicht hab ich aber nicht das richtige time Programm. Muss das von Stoffregen separat einspielen.
      Ich geb Bescheid wenn es funzt.

      Gruss, wolfgang

wolfgang · 15/12/2024 at 12:35

Hallo, nachdem ich die hardware für dein tolles Projekt, Version1 mit 11×10 LEDs fertig habe scheitere ich am aufspielen des sketches auf das Arduino NANO V3.
Den Code habe ich runtergeladen, von Github, aber ich weiß nicht was davon alles und wie ich das mit dem Arduiono IDE auf das board bekomme.
Leider bin ich “Schlosser” und mit der Software/Anwendung leicht überfordert.
Vielleicht kannst Du helfen in dem eine Anleitung für nicht so bewanderte Anwender erstellt wird.
Ich möchte die Uhr auf jeden Fall fertigstellen und zum Laufen bringen

Gruss, Wolfgang

Sandro · 11/12/2024 at 9:39

Hallo Edgar,

Ist es möglich in der Wordclock Version 1 die Matrix auf 11×11 und +1 für die Minuten zu erweitern.

#define WIDTH 11 // Breite der LED-Matrix
#define HEIGHT (11+1) // Höhe der LED-Matrix + zusätzliche Reihe für Minuten-LEDs

Die Koordinaten “gridAddPixel” habe ich auch angepasst, funktioniert nicht richtig. Was wäre noch zu berücksichtigen?

    Techniccontroller · 12/12/2024 at 22:05

    Hallo Sandro,

    ja, die Erweiterung sollte problemlos möglich sein. Wie du gesagt, hast nur die HEIGHT anpassen und die Koordinaten der Minuten LEDs, weil die jetzt vermutlich die Koordinaten ( 10, 11), (9,11), (8,11) und (7,11) haben.

    Ich weiß nicht was du mit “es funktioniert nicht richtig” meinst. Mehr Details zu dem Fehler wären hilfreich um noch weiter zu helfen.

    Vielen Grüße
    Edgar

      Sandro · 13/12/2024 at 22:29

      Hallo Edgar,

      Es leuchten keine LED wenn ich bei #define HEIGHT (10+1) auf #define HEIGHT (11+1) ändere.
      Die Koordinaten der Minuten habe ich angepasst.
      Wäre es möglich dir den Code zur Analyse per E-Mail zu senden?

      Gruss
      Sandro

        Techniccontroller · 13/12/2024 at 23:29

        Hallo Sandro,

        okay, seltsam. Es könnten noch an einem Speicherbedarfproblem liegen. Du kannst mir gerne den Code per mail senden (siehe Impressum), dann kann ich es mir mal ansehen.

        Viele Grüße
        Edgar

Add a Comment

Your email address will not be published. Required fields are marked *