WordClock24h
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
oder kleiner als mega328p
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.3.5 vom 10.12.2014: Wclock24h.zip
Software für Windows
- CooCox IDE, siehe STM32_CooCox_Installation
- ST-Link zum Flashen (Download steht in obigem Artikel)
- STM32 Virtual COM Port Driver: http://www.st.com/web/en/catalog/tools/PF257938
- PuTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) oder andere Terminal-Emulation
Hardware
- 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
- 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. Die nächsten geplanten Punkte sind:
- Sanftes Überblenden der Uhrzeiten auf den LEDs
- Farbprogramme (Wählen der Farbe, optional automatisches Wechseln)
- Einstellen des Anzeigemodus ("Sprache") per FB
- Speichern aller Einstellungen in externem EEPROM
- Anbindung der DS3231-RTC
Mechanik
- Gehäuse (sofern man nicht den 50x50 Ribba-Rahmen nehmen möchte):
ein Vorschlag wäre der Aufbau auf einer 45 x 45cm großen, 16mm starken MDF-Platte aus dem Baumarkt mit 8mm Bohrungen im Rastermaß der Matrix, welche nach vorne hin auf 14mm aufgebohrt sind und einerseits zur Lichtabdichtung gegenüber den benachbarten LEDs dienen, wobei die einzelnen Kammern - weiß spritzlackiert - als Reflektoren für die LEDs dienen. Die Kante der MDF-Platte kann mit einem Kantenumleimer in beliebiger Farbe versäubert werden (im Baumarkt gleich mitbestellen!).
- Grundplatte für LED-Matrix inkl. Verkabelung
- gefräste MDF-Platte zur optischen Abgrenzung der LEDs mit Neodym-Magneten zur Frontplattenbefestigung (sofern man keinen Ribba-Rahmen verwenden möchte)
- Platzierung von Platinen, LDR, Buchse für PC-Anschluss, ggf. Lautsprecher;
- Dimmbare, färbige Hintergrundbeleuchtung mit LED-Stripes?
- Stromversorgung, Zuleitungen und Befestigung: Drahtseile zum Abhängen von der Decke? Netzteil in der Deckenbefestigung?
- Verdrahtungsplan
- Frontplatte
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
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.
- WC24h_16x16_Test.html auf GitHub
- WC24h_18x16_Test.html auf GitHub
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?
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. Hinweis: Download mit Click auf den "Raw" Button, dann "speichern unter".
- Codegenerator-Funktion bei GitHub
- tables.h (Von-Neumann) bei GitHub
- display.h (Von-Neumann) bei GitHub
Downloads
- Datei:WC24h16x16.zip 16x16 Matrix, MS Office 2007/2010-Dateien, Update 28.11.2014
- Datei:WC24h16x16 Office 2003.zip 16x16 Matrix, MS Office 2002/2003-Dateien, Update 28.11.2014
- Datei:WC24h 18x16 V2 Office 2010.zip 18x16 Matrix, MS Office 2007/2010-Dateien, Update 09.12.2014
- Datei:WC24h 18x16 V2 Office 2003.zip 18x16 Matrix, MS Office 2002/2003-Dateien, Update 09.12.2014
- Datei:WC24h Frontplatte Futura Lt 18x16 45x45cm.zip Frontplatte "Futura Light" 18x16 45cm x 45cm pdf-Datei
- Datei:WC24h16x16 Bohr & Positionierschablone 32x32cm.zip Bohr- und Positionierungsschablone für 16 x 16 Matrix (20mm x 20mm Raster)
- Datei:WC24h18x16 Bohr & Positionierschablone 30x30cm.zip Bohr- und Positionierungsschablone für 18 x 16 Matrix (16,67mm x 18,75mm Raster)