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

190 Comments

Magnus .A · 07/04/2026 at 17:47

Vielen Dank für das Teilen dieses Projektes. Habe es erfolgreich nachbauen können und hat drei Monate super funktioniert. Seit paar Tagen allerdings geht die Uhr von selbst aus und sofort wieder an, was zum Wechseln der Farben bringt. Hätte jemand eine Idee was es sein könnte?

    Techniccontroller · 08/04/2026 at 19:01

    Hallo Magnus,

    danke für deinen Kommentar. Ich hatte dieses Verhalten mit der Uhr und dem Arduino Nano noch nicht beobachtet. Wie häufig passt das? Ich kann mir nur zwei Möglichkeiten vorstellen. Entweder stürzt der Arduino-Microcontroller aufgrund eines SW-Fehlers oder zufällig ab (hatte ich bisher noch nicht), oder die Stromversorgung bricht kurzzeitig zusammen. Hast du ein ausreichend großes Netzteil (3 A) verwendet? Falls zu einer bestimmten Uhrzeit zu viele LEDS angehen, könnte die Netzteilspannung womöglich zusammenbrechen und der Arduino startet neu.
    Es würde helfen, die serielle Ausgabe aufzuzeichnen, wenn der Fehler auftritt.

    Viele Grüße
    Edgar

      Magnus A. · 09/04/2026 at 11:23

      Danke für die Antwort. Es passiert öfters am Tag rein zufällig. Könntest du mir kurz erklären wie ich das auslese? Bin da ein Anfänger 😊
      Grüße Magnus

        Techniccontroller · 11/04/2026 at 19:52

        Hallo Magnus,

        Um die Ausgabe auszulesen, am besten die Uhr nur über USB des Arduinos von einem Computer betreiben (vermeiden, dass der Hintergrundmodus aktiv ist, bei dem alle LEDs leuchten, da dann eventuell zu viel Strom fließt). Dann einfach in der Arduino IDE den Seriellen Monitor öffnen. Du solltest dann regelmäßige Textausgaben der Uhr sehen. Sobald der Fehler auftritt, den Text im seriellem Monitor kopieren und in einer Textdatei abspeichern.

        Viele Grüße
        Edgar

Rainer · 03/04/2026 at 20:43

Hallo
Da ich nicht so gut im Programmierung bin
Wie kann ich das Programm umschreiben auf
Schwäbischen Sprachgebrauch.
Also bei 12:15 sagen wir es sich Viertel eins.
Wie kann ich dem Programm sagen das ab Viertel er
Eine Stunde weiter stellen muss
Vielen Dank für Ihre Bemühungen
MFG
Rainer

    Techniccontroller · 04/04/2026 at 10:53

    Hallo Rainer,
    vielen Dank für deinen Kommentar. Das kannst du sehr einfach machen.

    Einfach die folgenden Zeilen ( 493 bis 497) löschen:

    Serial.print("NACH ");
    gridAddPixel(7,3);
    gridAddPixel(8,3);
    gridAddPixel(9,3);
    gridAddPixel(10,3);
    

    und Zeile 676 in Folgendes abändern:

    if(minutes >= 15)
    

    Viele Grüße
    Edgar

Rainer · 16/03/2026 at 7:44

Hallo
kann man die Uhr auch ohne RTC Module betreiben ?
Wenn ich ein DCF 77 Empfänger verbaut ist.

MFG Rainer

    Techniccontroller · 16/03/2026 at 22:40

    Hallo Rainer,

    danke für deinen Kommentar. Theoretisch lässt sich die Uhr ohne RTC betreiben, allerdings nur nach Änderungen am Code. Zudem verliert man die Möglichkeit durch kurziges Aus/Einschalten die Farbe zu wechseln. Nach jedem Neustart der Uhr müsste zudem auf den Empfang der Uhrzeit über den DCF gewartet werden.

    Wenn dir die Einschränkungen egal sind, kannst du den Branch “dcf_only” mal testen, da hab ich die RTC rausgenommen.

    Viele Grüße
    Edgar

Andre · 14/03/2026 at 13:59

Hallo Edgar,

die Schaltung habe ich bereits komplett aufgebaut, aber ich scheitere an dem Aufspielen auf die Nanos. Zum Verzweifeln. Hier mal die Maßnahmen die ich versucht habe, bevor ich hier einfach stumpf wegen Kleinigkeiten poste:

ArduinoIDE auf der letzten Version installiert ✅
Arduino AVR Boards unter Boardverwalter hinzugefügt und Arduino nano ausgewählt ✅
die benötigten Bilbiotheken heruntergeladen und durch deine bibliotheken unter
“C:\Users\********\Documents\Arduino\libraries” ersetzt ✅
kompillieren klappt ✅

nur das hochladen klappt nicht. Da gibts einfach keine Kommunikation zu den Chips. Ich habe jetzt shcon ca. 8 Stunden mit Google Gemini an der Problemlösung gearbeitet. Folgendes haben wir versucht:

USB Micro Kabel mit funktionierender Datenleitung (von meinem DVD Laufwerk) ✅
3 verschiedene Chips ausprobiert, alle funkionieren nicht ❌
USB C Kabel mit funktionierender Datenleitung (mit dem Handy Fotos auf den Laptop gezogen) ✅
2 USB C nanos bestellt und ausprobiert ❌

im Meldungsfeld habe ich diese meldung bekommen:
Der Sketch verwendet 22608 Bytes (73%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 1135 Bytes (55%) des dynamischen Speichers, 913 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x21
bis 10 von 10

nichtmal ein einfach “blink programm” bekomme ich auf die arduinos

Prozessor “ATmega328P” oder “ATmega328P (Old Bootloader) getestet ✅
den immer wieder selbst updatenden 2024er CH340 Treiber unter “Dieser PC/Verwalten/Gewätemanager” deinstalliert und durch den älteren “old_ch341ser.exe” von 2011 ersetzt (das Problem war schon von den Wemos D1 minis bekannt) ✅
Natürlich den richtigen COM-Port ausgewählt ✅
Auf dem nano leuchten die PWR Led dauerhaft und die “L” Led pulsiert im sekundentakt nach anschließen ✅
nochmal andere Micro und USB C Kabel gestetet ✅
nur den nackten Nano am USB Port ohne Breakoutboard ✅

selbst beim reinen Kommunikationstest kommt nix zurück: Im ArduinoIDE rechts oben auf die Lupe, 11520 Baud oder 9600 baud ausprobiert, bei der Eingabe kommt nix zurück.

Mit Gemini habe ich versucht dann über einen Wemos als Brücke (Bootloader-Brennen via ISP) über die TX & RX Ports einen Bootloader drauf zu bringen, ohne Erfolg.
Adapter TX -> Nano RX
Adapter RX -> Nano TX
oder auch mal anders herum getestet
Adapter GND -> Nano GND
Adapter 5V -> Nano 5V

Auch das Flashen eines ESP32 über einen TTL Adapter habe ich schon durchgeführt, auch der Adapter hat hier nicht geholfen.

Direkt über USB: Tot (0x00).
Über Wemos als ISP (Brennen): Fehlgeschlagen (exit status 1).
Über Wemos als Bridge (Seriell): Er antwortet mit Müll (0x30, 0x20).

Was es jetzt noch sein könnte: alle 3 Micro USB und alle 2 USB C Nanos die ich bei aliexpress gekauft habe sind Müll?
Ich habe für andere Projekte schon über 120 Stück WEMOS-MINI-D1 ESP8266 bei aliexpress gekauft und verarbeitet. Kann mir kaum vorstellen dass ich bei den Nanos 5x Schrott gekauft habe.

Als nächste würde ich wohl mal von Amazon von AZdelivery einen 8€ nano bestellen.

Oder gibts noch etwas triviales was ich/die KI übersehen hat?

    Techniccontroller · 15/03/2026 at 21:35

    Hallo Andre,

    puh, du hast schon sehr viel ausprobiert. Das sind meine Gedanken dazu:

    – blink.ino funktioniert auch nicht -> kein Fehler an meinem Code, oder Libraries
    – CH341 Treiberfehler -> vermutlich auch nicht, da COM-Port des Boards im Gerätemanager sichtbar (vielleicht einmal checken, ob es wirklich der richtige COM-Port ist)
    – Nano mit USB-C oder Micro-USB -> Kenn ich nicht, sind vermutlich neuerartige Clones -> haben vielleicht Probleme. (Der Arduino Nano gibt es normalerweise nur mit Mini-USB)
    – Funktioniert es auf einem anderen Computer? Ich hatte manchmal das Problem, dass es an einem Computer nicht funktioniert (Firewall, Settings, …?)

    Mehr dazu kann ich auch nicht sagen.

    Viele Grüße
    Edgar

      André · 16/03/2026 at 11:17

      1. der Comport wurde im ArduinoIDE erst nach dem Einstecken aktiv. Sollte nicht der Grund gewesen sein.
      im gerätemanager passt es zum IDE überein.
      2. hatte mich mit Mini/Micro vertan. Die ersten 3 Nanos die ich probiert hatte waren mit USBminiB.
      3. Ohne Firewall hatte ich getestet, hat keinen Unterschied gemacht. die plopplt normalerweise auf wenn etwas kommunizieren will. Anderen PC/Laptop hatte ich auch getestet, aber vergessen oben zu schreiben.

      habe jetzt nochmal weiterversucht und das ArdunioIDE hat mit einem Popup gemeldet: es möchte weitere Bibliotheken aktualisieren. Habe das dann nochmal auf “manuell” gemacht, damit ich deine Time / RTClibraries Libraries nicht überschreibe. Es hatte dann die Bibliotheken Adafruit_BusIO / GFX_Library / NeoMatrix / NeoPixel aktualisiert. Danach ging es dann auf einmal mit den USBC Nanos (mit dem 2024er Treiber und dem alten Bootloader). Die USBminis wollen immer noch nicht.
      Komisch dass es jetzt ging. Beim Kompillieren vorher lief es sonst auch problemlos durch. Für mich macht es keinen Sinn, warum es jetzt mit den neueren Adafruit libraries funkioniert und vorher nicht.

      wo kaufst du deine Nanos?

        Techniccontroller · 16/03/2026 at 19:32

        Ja, stimmt, das Verhalten ist irgendwie nicht nachvollziehbar.
        Ich nutze nicht mehr so häufig Arduino Nanos, aber ich bestelle sie normalerweise über ebay bei einem Händler mit Lager in Deutschland (z.B. MAKERSHOP).

Add a Comment

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