WordClock24h

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Es geht um eine minutengenaue "WordClock" bzw. "WortUhr" mit 24-Stunden-Modus.

Einleitung

Es geht hier um den Bau einer Wand- bzw. Tischuhr, bei welcher auf einer quadratischen Frontplatte die jeweils aktuelle Uhrzeit als Text durch Hinterleuchtung der entsprechenden Wörter angezeigt wird. Die Hinterleuchtung der Wörter erfolgt durch farbige RGB-LEDs (Farbeinstellung mittels Fernbedienung wählbar), welche durch einen mit der Uhrzeit synchronisierten Mikrocontroller angesteuert werden.

Im Unterschied zu der bekannten QlockTwo Wortuhr, welche die Uhrzeit im 12 Stunden-Wiederholungsrhythmus in Fünf-Minuten-Schritten anzeigt, liegt dieser Wortuhr ein Konzept zu Grunde, welches eine minutengenaue Zeitanzeige für 24 Stunden ermöglicht. Um den unterschiedlichsten regionalen und persönlichen Gewohnheiten gerecht zu werden, verfügt diese minutengenaue 24 Stunden-Wortuhr über mehrere Betriebsarten, mit welchen sich über die allgemein üblichen Standard-Zeitanzeigen hinaus per Voreinstellung auch verschiedene, regional übliche Wortfolgen konfigurieren lassen (viertel nach ..., dreiviertel ..., viertel vor ... ,...).

Für Diskussionen der "Insider" gibt es den Thread "Minutengenaue 24 Stunden-Wortuhr - wer will mitbauen?".

Neu-Einsteiger, die diesen Artikel gelesen haben, stellen Ihre Fragen gern im Thread "WortUhr/WordClock: Minutengenau, 24h, RGB für Neu-Einsteiger".

Dieser Artikel wird schrittweise ausgebaut und soll zur Zeit nur zur Sammlung von Ideen dienen.

LEDs

Bei der 18 x 16 Matrix (Standardversion mit allen Texten) werden insgesamt 288 LEDs benötigt, bei der 16 x 16 Matrix (abgespeckte Version mit weniger Texten) insgesamt 256 LEDs. Vorzugsweise sollen WS2812 oder WS2812B zum Einsatz kommen. Um Lötarbeit zu sparen, sollen entweder fertige LED-Matrizen (gibt es bei eBay) oder LED-Stripes verwendet werden. Vorzugsweise werden für die 18 x 16 Matrix WS2812B RGB-LED-Stripes mit 60 LEDs/lfm, für die 16 x 16 Matrix 2 Stück 16 x 8 WS2812B RGB-LED-Matrizen (LED-Abstand horizontal und vertikal jeweils 20mm) verwendet.

18 x 16 Matrix

Da die Buchstaben höher als breit ist, sieht es besser aus, wenn der Buchstabenabstand in der Waagerechten geringer ist als in der Höhe. Dies kann man mit einer 18x16-Matrix erreichen - bei quadratischem Umfang der kompletten Matrix.

Wenn man Stripes verwendet, welche 60 LEDs/m haben, dann ist die Breite aller 18 Buchstaben exakt 30cm. Bei 16 Zeilen kommt man auf eine Komplett-Höhe bei einem senkrechten Buchstaben-Abstand von 30/16 = 1,875cm.

Also: Abstand in der Breite: 1,667cm, in der Höhe 1,875cm. Dann besteht bei einer 45cm x 45cm großen Frontplatte ein einheitlicher Rand von je 7,5cm. Das Schriftbild ist durch den geringeren waagerechten Buchstabenabstand dann leichter lesbar.

Die WS2812-LEDs werden dabei folgendermaßen verdrahtet:

 1  2  3  4  ...                              18
 O--O--O--O--O--O--O--O--O--O--O--O--O--O--O--O---
                                                 |
 36                                       20  19 |
 O--O--O--O--O--O--O--O--O--O--O--O--O--O--O--O---
 |
 |
 O--O--O--O--O--O--O--O--O--O--O--O--O--O--O--O--
 37 38 ....

Das heißt, dass jeder zweite Streifen "auf dem Kopf" steht. Die LEDs müssen sowohl in der Horizontalen als auch in der Vertikalen einen Abstand von jeweils 2cm haben. Damit kommt man dann auf ein Quadrat mit den Maßen 32cm x 32cm. Bei einer Frontplatte von 45cm x 45cm verbleibt dann jeweils ein schwarzer Rand von 6,5cm auf jeder Seite.

16 x 16 Matrix

Bei der 16 x 16 Matrix kommen 2 Stück 16 x 8 LED-Matrizen mit einem horizontalen und vertikalen Abstand der LEDs von jeweils 20mm zum Einsatz. Dementsprechend betragen die Außenabmessungen der Matrix 32cm x 32cm. Bei einer 45cm großen Frontplatte bleibt rundherum ein 6,5 cm freier Rand bestehen.

Die 16x8 LED-Matrizen sind ebenfalls mit WS2812B RGB-LEDs bestückt, die Ansteuerung erfolgt wie bei den Stripes seriell.

Frontplatten

Es sind sowohl gefräste Holz/Edelstahl-Frontplatten als auch im Siebdruck hergestellte Acrylglasplatten vorgesehen.

ukw hat sich bereit erklärt, analog zur 10x11-WordClock-Sammelbestellung Plexiglas eine Sammelbestellung für die WordClock24h anzubieten. Die Kosten pro bedruckter Platte belaufen sich auf voraussichtlich 38 EUR. Dabei wird eine extra Farbschicht als Diffusor verwendet.

Elektronik

Als Mikrocontroller ist ein STM32 vorgesehen. Mit dem STM32F4-Discovery-Board hätte man für wenig Geld (ca. 17 EUR) ein leistungsfähiges System. Es wird aber auch noch nach kleineren Alternativen (wie zum Beispiel STM32F103C8T6) gesucht...

oder Arduino/Atmel als 1284p

jar hat erst mal 6 Platinen bestellt

andere Möglichkeit

oder kleiner als mega328p

Arduino-PRO-MINI-ATMEGA328

brauchen Programmieradapter

oder ohne Programmieradapter

Komponenten:

  • STM32F4-Discovery-Board oder alternativ Arduino mega1284p, ggffs. abgespeckt m328p als Arduino nanoV3 oder mini/micro PRO mit m328p
  • 288 WS2812-LEDs auf Stripes (18x16 Matrix, 60Stk. pro Meter)
  • I²C-RTC DS3231
  • LDR zur automatischen Helligkeitssteuerung
  • TSOP für die Bedienung/Konfiguration mittels IR-Fernbedienung (IRMP)

Optionale Komponenten:

  • Anschlussmöglichkeit eines DCF77-Moduls (optional)
  • Anschluss eines WLAN-Modules (ESP8266), darüber Zugriff auf NTP-Server
  • Bedienung/Konfiguration mittels Android-App bei WLAN-Konnektivität (s.o.)

Software-Komponenten

Software-Module für STM32F4-Discovery:

  • Tools zur Pflege/Erstellung der Wort-Tabellen (tables.h usw.)
  • Ansteuerung der WS2812-Stripes per DMA
  • Benutzer-Interaktion mittels IRMP (Anlernen, Farbe & Uhrzeit stellen usw.)
  • Debugging-Monitor mit MCURSES (insb. Display Front, Logging usw.)
  • I²C-Routinen zur Ansteuerung der DS3231
  • I²C-Routinen zur Ansteuerung eines I2C-EEPROMS zur Speicherung der Einstellungen
  • Anpassung der Helligkeit an die Umgebung mittels LDR oder I²C Ambient-Light-Sensor
  • Anbindung von diversen DCF77-Modulen
  • Anbindung eines WLAN-Moduls ESP8266
  • Zugriff auf NTP-Server via WLAN

CooCox Projekt

Download Version 0.4.4 vom 17.12.2014: Wclock24h.zip

Software für Windows

Hardware

Versuchsaufbau mit STM32F4 Discovery Board
  • STM32F4 Discovery Board
  • TSOP31238
     Anschlüsse: TSOP-Pin1 an Disco-Board GND, TSOP-Pin2 an Disco-Board 5V, TSOP-Pin3 an Disco PC14
     (Diese befinden sich alle am oberen Ende von Steckerleiste P2)
  • WS2812 LED-Streifen, pro Zeile 18 LEDs. Zum Test reicht erstmal ein Streifen mit 18 LEDs
     Anschlüsse: Stripe +5V an externe Stromversorgung +5V
                 Stripe DI an Disco PC6
                 Stripe GND an externe Stromversorgung GND und an Disco GND (neben PC6)
     (PC6 und GND befinden sich am unteren Ende von Steckerleiste P2)

Start

WordClock24h in PuTTY
  • Disco-Board und PC mit Mini-USB-Kabel verbinden (zum Flashen und Debuggen)
  • Disco-Board und PC mit Micro-USB-Kabel verbinden (dient als COM-Schnittstelle)
  • Projekt compilieren und flashen
  • PuTTY starten
  • PuTTY einstellen: Auswahl "Serial", Serial Line: COM11 (kann abweichen, s.u.), Speed: 115200
  • Einen Session-Namen eingeben, z.B. "Disco"
  • Auf SAVE klicken, dann kann man die Session später wieder auswählen
  • Open anklicken

Es sollte nun im Terminal "Press any key to start" erscheinen. Nach Tastendruck erscheint dann das nebenstehende Bild. Ausserdem sollten nun die LEDs für "ES IST" in rot leuchten.

Sollte man Probleme mit dem Finden der richtigen COM-Schnittstelle haben, hilft der Geräte-Manager aus der Systemsteuerung weiter. Wichtig: Die COM-Schnittstelle wird nur dann angezeigt, wenn das Programm auf dem Disco-Board auch läuft! Bei manuellen Resets des Disco-Boards muss die Terminal-Emulation zuvor geschlossen und anschließend neu geöffnet werden. Sonst erhält man keine neue Verbindung.

Folgende Tasten werden ausgewertet:

  • x/X Anzeigemodus wechseln
  • h/H Stunden einstellen
  • m/M Minuten einstellen
  • r/R Helligkeit für Rot
  • g/G Helligkeit für Grün
  • b/B Helligkeit für Blau

Drückt man innerhalb von 5 Sekunden keine Taste, springt die Uhrzeit um eine Minute weiter.

Man kann den MCURSES-Monitor auch abschalten: Dazu muss USE_MCURSES_MONITOR in wclock24h-config.h auf 0 gestellt werden. Dann ist kein Micro-USB-Kabel und auch kein Terminal-Programm nötig. Allerdings muss dann die IR-Fernbedienung zur Zeit noch "blind" programmiert werden, d.h. ohne Interaktion. Es ist jedoch geplant, dafür auch die LEDs einzusetzen.

Wenn man nun die blaue Taste auf dem Disco-Board drückt, kann man eine Fernbedienung anlernen. Im Terminal wird man dann aufgefordert, die FB-Tasten für

  • Decrement Mode (LED1 leuchtet dabei)
  • Increment Mode (LED2)
  • Decrement hour (LED3)
  • Increment hour (LED4)
  • Decrement minute (LED5)
  • Increment minute (LED6)
  • Decrement red brightness (LED7)
  • Increment red brightness (LED8)
  • Decrement green brightness (LED9)
  • Increment green brightness (LED10)
  • Decrement blue brightness (LED11)
  • Increment blue brightness (LED12)

zu drücken. Sind die FB-Tasten angelernt, kann man die Uhrzeit und den Anzeigemodus auch per IR-Fernbedienung einstellen.

Es sind nur die gebräuchlichsten IR-Protokolle aktiviert, nämlich:

  • SIRCS (Sony)
  • NEC (Viele Hersteller, sehr verbreitet)
  • SAMSUNG
  • MATSUSHITA
  • KASEIKYO

IRMP "versteht" jedoch bis zu 40 Protokolle. Braucht man weitere - wie RC5 oder RC6 - kann man sie in irmp/irmp-config.h freischalten. Bei Problemen empfiehlt sich die Lektüre des IRMP-Artikels.

Weitere geplante Features

Die Software wird ständig weiterentwickelt. Folgende Punkte sind bereits erledigt:

  • Anbindung IR-Fernbedienung mittels [IRMP]]
  • Einstellen des Anzeigemodus ("Sprache") per IR-FB
  • Einstellung der Farbe mit IR-Fernbedienung
  • Anbindung LED-Stripes WS2812
  • Sanftes Überblenden der Uhrzeiten auf den LEDs

Die nächsten geplanten Punkte sind:

  • Speichern aller Einstellungen in externem EEPROM
  • Anbindung der DS3231-RTC
  • Anbindung DCF-Modul
  • Farbprogramme (Wählen der Farbe, optional automatisches Wechseln)

Mechanik

Gehäuse (sofern man nicht den 50x50 Ribba-Rahmen des schwedischen Möbelhauses nehmen möchte):

Eine preisgünstige Variante wäre der Aufbau auf einer 45 x 45 cm großen, 16mm starken MDF-Platte aus dem Baumarkt. Die Kanten kann man in der Regel gleich beim Zuschnitt mit Kantenumleimern versäubern lassen.

Die MDF-Platte erhält 288 Bohrungen im Rastermaß der LED-Matrix. Ein Bohrplan ist hier als Download im pdf-Format verfügbar. Die Bohrungen werden nach vorne hin auf 14mm Durchmesser aufgebohrt und dienen einerseits zur Lichtabdichtung gegenüber den benachbarten LEDs, andererseits als Reflektorkammern. Will man die Bohrungen selbst anbringen, eignet sich dafür ein 5mm Holzbohrer mit aufgesetztem 14mm Versenker. Die stirnseitigen Schneiden des Versenkers sind im Winkel von 45 ° abgeschrägt, dadurch ergeben sich am Boden der Kammern schöne Reflektorflächen. Da der Durchmesser der Bohrlöcher mit 5mm für die LEDs zu klein ist, muss man sie abschließend mit einem größeren Holzbohrer (8mm,..) auf den für die LEDs erforderlichen Durchmesser aufbohren (leider sind im Handel keine 14mm Versenker-Aufsätze für 8mm Bohrer erhältlich). Man kann auch gleich Löcher mit 8mm Durchmesser bohren und dann mit einem Versenker ohne Bohrer auf 14mm Durchmesser aufweiten. Für die Anbringung der Acrylglas-Frontplatte mittels Neodym-Magneten erhält die MDF-Platte am Rand 9 Ausnehmungen (Vertiefungen), welche den Abmessungen der Magneten entsprechen.

Nach Abschluss der Fräs- und Bohrarbeiten wird die MDF-Platte vorderseitig grundiert und weiß spritzlackiert. Wenn man über keine Farbspritzpistole verfügt, verwendet man dafür Spritzfüller und Acryllack aus der Dose - jedoch unbedingt lösungsmittelhaltig und nicht auf Wasserbasis, damit die MDF-Platte nicht aufquillt! Da sich der Farbnebel weiträumig verteilt und überall anlegt, sollten die Spritzarbeiten vorzugsweise im Freien oder in einem leeren, gut belüfteten Nebenraum durchgeführt werden. In geschlossenen Räumen muss mit Atemschutzmaske gearbeitet werden! Wer sich das nicht antun will, kann die MDF-Platte selbstverständlich auch mit Pinsel grundieren und lackieren.

Auf die Rückseite der MDF-Platte wird ein Rahmen aus Alu-U-Profil aufgeschraubt (Baumarkt, 2m Stange auf 4 Stk. mit je 40cm Länge auf Gehrung geschnitten). Er dient als Gehäuse für die Aufnahme der Elektronik und der Verdrahtung.

Weitere mechanische Arbeiten sind:

  • Aufkleben der LED-Streifen auf einer Grundplatte. Es werden horizontal 16 Streifen zu je 18 LEDs (60 LEDs/lfm) mit einem vertikalen Abstand von 18,75 mm auf eine Grundplatte aufgeklebt. Vorzugsweise verwendet man dafür Aluminiumblech zur Wärmeableitung. Die LED-Streifen müssen mäanderförmig - jede zweite Reihe um 180° gestürzt - angebracht werden, sodass sich eine schlangenähnliche Anordnung der LEDs ergibt.
  • In die Außenflächen der U-Profile werden LED-Strips zur Hintergrundbeleuchtung eingeklebt und zum Schutz vor Staub und mechanischer Beschädigung mit Milchglasstreifchen aus Acrylglas oder Weichplastik abgedeckt ( man kann selbstverständlich auch fertige LED-Kanäle aus dem Handel verwenden).
  • Die Platzierung von Platinen, Umgebungslicht-Sensor, Buchsen für Stromzufuhr und PC-Anschluss, ggf. Lautsprecher ist abzuklären;
  • Bei Deckenbefestigung wird an der Zimmerdecke das Netzteil der Uhr in einem unscheinbaren Kästchen angebracht. Daran wird die Uhr an 2 Drahtseilen (transparent isolierte Seile aus dem LED-Zubehörhandel) aufgehängt, welche gleichzeitig als Stromzuführung für die LEDs und die Elektronik dienen.
  • Die Acrylglas-Frontplatte wird mit magnetischen Pads versehen, mit welchen sie an den Magneten der Montageplatte haftet.

Wörter und Wortkombinationen

Die WordCLock24h stellt die Zeit in Form von Wörtern und Wortkombinationen dar. Dabei sind per Konfiguration verschiedene Darstellungsformen im 12h- und im 24h-Modus auswählbar. Die Auswahl der Darstellungsform sowie der jeweils angezeigten Wörter erfolgt über Tabellen (Arrays), welche untereinander nach Art einer Baumstruktur hierarchisch verknüpft sind.

Die Inhalte und Verknüpfungen der Tabellen können beispielhaft aus der Access Datenbank WC24h.accdb entnommen werden. Die Datenbank enthält auch ein Formular frm_Anzeigestrings, mit welchem man eine gewünschte Darstellungsform auswählen und die 1440 Wortkombinationen eines 24-Stunden-Tages (24 Std. x 60 Min.) in Listenform anzeigen kann.

Über die Tabelle tbl_modes der obersten Hierarchieebene können folgende Darstellungsformen ausgewählt werden:

 1 ES IST HH UHR MM (12)
 2 ES IST HH UHR MM (24)
 3 ES IST HH UHR UND MM MINUTEN (12)
 4 ES IST HH UHR UND MM MINUTEN (24)
 5 ES IST MM MINUTEN NACH HH UHR (12) NACHTS
 6 ES IST MM MINUTEN NACH HH UHR (24)
 7 OSSI  - ES IST MM NACH HH (12) 
 8 OSSI - ES IST MM NACH HH UHR (12) NACHTS 
 9 OESI - ES IST MM NACH HH UHR (12) - OESI
10 OESI - ES IST MM NACH HH UHR (12) NACHTS 
11 RHEIN/RUHR - ES IST MM MINUTEN NACH HH (12) 
12 RHEIN/RUHR - ES IST MM MINUTEN NACH (12) NACHTS 
13 SCHWABEN - ES IST MM MINUTEN NACH HH (12) 
14 SCHWABEN - ES IST MM MINUTEN NACH (12) NACHTS 
15 WESSI - ES IST MM MINUTEN NACH HH (12) 
16 WESSI - ES IST MM MINUTEN NACH (12) NACHTS 
17 COUNTDOUWN MM MINUTEN VOR MITTERNACHT

Eine Erweiterung um Modi mit anderen Wortkombinationen ist jederzeit möglich.

Die Tabelle tbl_modes greift auf die Datensätze der Tabellen tbl_hours und tbl_minutes zurück, in welchen die Referenz-Indizes für die jeweils für die Stunden und Minuten zu verwendenden Wortkombinationen enthalten sind.

Diese Referenz-Indizes beziehen sich ihrerseits auf die Indizes der Tabelle tbl_words der untersten Hierarchieebene, in welcher die Position und Anzahl der für die Darstellung der jeweiligen Wörter einzuschaltenden LEDs festgehalten ist.

Aus dieser Tabelle (Array) werden nacheinander die Bitmuster für die Wörter der anzuzeigenden Uhrzeit ausgelesen und seriell in die Schieberegister der Leuchtdioden eingespeist.

Die zip-Dateien WC24h_18x16_V2_Office_2003.zip und WC24h_18x16_V2_Office_2010.zip enthalten jeweils eine Excel und eine Access-Datenbank-Datei, in welchen ein Layout der Frontplatte sowie Tabellen mit den Positionsnummern der den einzelnen Wörtern zugeordneten LEDs enthalten sind.

Verifikation, Validierung, Code-Generator

Mock-up

Bevor Frontplatten erstellt werden, erfolgt eine Prüfung der Buchstabenanordnung und der Tabellen für alle oben genannten Modi mit einer Simulation (Mock-up in C#.net, siehe Bild).

Der aktuelle Stand der Steuer-Tabellen kann auch online anhand von exemplarischen Uhrzeiten überprüft werden.

Auf diesen statischen HTML-Seiten gibt es für jeden Modus 60 Exemplarische Uhrzeiten:

 00:00, 01:01, 02:02, …, 23:23, 00:24, 01:25, 02:26, …, 11:59

Verifikation: Sind die Formulierungen und Wort-Anordnungen wie gewünscht?

Validierung: Sind die Steuer-Tabellen fehlerfrei?

Interaktive WordClock24h

Hier kann man sich interaktiv durch die Uhrzeiten klicken:

Der Stand des Frontplatten-Layouts ist hier 08.12.2014.

Im Mock-up in C#.net ist auch ein Code-Generator integriert. Für µCs mit Von-Neumann-Architektur und Havard-Architektur werden unterschiedliche Dialekte benötigt, z.B. mit "progmem" für einige gcc-Toolketten.

Downloads

  • Wordclock 16 x 16 LED-Matrix, 32 cm x 32 cm :*
  • Wordclock 18 x 16 Matrix, 30 cm x 30 cm:*