V2

V1

Ziel des Projekts

Eine Uhr welche die Zeit in Worten anzeigt. Dies soll realisiert werden durch LEDs, die hinter einer Folie angebracht sind. Die Schnittlöcher der Folie dienen als Buchstaben. Die Zeitbestimmung erfolgt über einen 16MHz Quarzoszillator. Die Ansteuerung der LEDs wird durch Schieberegister realisiert, da der verwendete ATMEGA 328 Chip nicht ausreichend Ausgangspins besitzt um jedes Wort einzeln anzusteuern.

Konstruktion der Uhr

Auf einen Ikea Bilder Rahmen (33cm x 33cm) wurde eine Laser geplottete rote Folie aufgebracht.

So weit, so gut.

Platine für die Ansteuerung der LEDs. Der ATMEGA 328 wird zum Schluss in die Halterung gesetzt. Dieser wird über einen Arduino Uno programmiert. Der Helligkeitssensor oben rechts ist an dieser Position nur zu Testzwecken und wird im weiteren Verlauf außerhalb des Uhren Gehäuses platziert. Um Alle LED-Wörter zu erreichen werden 4 Schieberegister, sowie 4 Darlington Arrays benötigt (um eine ausreichende Stromversorgung sicherzustellen).

Verkabelung der LEDs.

Spätestens hier wäre ein Integrated Circuit von Vorteil :)

Erster Funktionstest. Die LEDs sind allerdings noch zu Hell und das Licht strahlt zu fokusiert.

Anbringen von Abtrennungen und durchsichtigem Papier um das Licht zu begrenzen und zu diffusieren.

Das Anzeigen der Zeit funktioniert und die Buchstaben werden gleichmäßig hell beleuchtet.

Das fertige Ergebnis.

Der Helligkeitssensor ist hinter dem Rahmen befestigt und regelt die Helligkeit der LEDs abhängig von der Umgebungshelligkeit. So ist die Uhr bei jeder Helligkeit gut zu lesen und blendet in dunklen Räumen nicht.

Zwei Knöpfe zum Einstellen der Zeit ( +1 Stunde und +5 Minuten)

Da ich nach der Fertigstellung der ersten Uhr viele Ideen zur Verbesserung hatte, habe ich eine zweite Uhr gebaut, als Geschenk für meine Eltern.

Bei dieser Uhr habe ich Einiges verbessert, wie die Trennung der LEDs, die Befestigung der LEDs, sowie das Kabelmanagement, welches nun einem Farbschema folgt. (Dies macht die Fehlersuche wesentlich leichter). Desweiteren konnte ich durch die direkte Verwendung eines Arduinos als Controller das Design kompakter halten. Der Helligkeitssensor ist bei dieser Uhr im Inneren angebracht und kann durch einen unbenutzen Buchstaben die Helligkeit messen.

Die nächste Uhr wird einen IC erhalten. Versprochen.

Fertig. (Das E der Zahl Drei wurde natürlich noch behoben)

Software

Die Software auf dem ATMEGA328 muss folgende Aufgaben erfüllen:

  • Zuweisen der Schieberegister Ausgänge
  • Umschalten der Zeit zu jeder vollen Minute und Stunde
  • Überprüfen ob einer der beiden Knöpfe gedrückt wurde
  • Helligkeit der LEDs regeln
  • Die Zuweisung der LEDs muss mit der späteren Verschaltung der Schieberegister übereinstimmen. Bei einem Fehler ist es jedoch leichter den Code zu ändern als die Kontakte umzulöten.

    Nun werden Variablen für die aktuelle Zeit, sowie für die Ausgangspins des Arduinos gewählt. Diese können frei gewählt werden, jedoch muss auf eine passende Zuweisung des Helligkeitssensors auf einen der 5 analogen Ein/Ausgänge geachtet werden. Die Zuweisung der Zeit bestimmt die Zeit, die nach einem Reset der Uhr angezeigt wird.

    In der Setup Methode werden nun die Pins passend zur vorherigen Belegung als Ein - oder Ausgang eingestellt. Die Funktion millis() liefert die vergangene Zeit, seit dem Start des Controllers in Millisekunden.
    Die Funktion ledsoff schaltet alle LEDs aus und die Funktion WriteLEDs schreibt die Werte von Display 1 bis 4 in die Schieberegister, sodass die passenden LED Wörter leuchten.

    In der displaytime Methode wird die Bestimmung der Zeit vorgenommen. Dies kann durch simple If Statements realisiert werden. Bei Uhren mit deutscher Schrift sind Kleinigkeiten wie "Es ist Ein Uhr" oder auch das doppelt belegte N von Zehn und Neun in der untersten Reihe zu beachten.

    Die loop Methode wird in einer Dauerschleife ausgeführt. Hier wird die Helligkeit der LEDs festgelegt. Das von mir implementierte Helligkeitsprofil ist an die Lichtgegebenheiten eines sehr hellen Raumes angepasst. Da das Licht oftmals direkt auf die Uhr trifft, ist die Helligkeit generell etwas heller eingestellt. Dies kann nach Bedarf verändert werden. Der Photoresistor liefert Werte zwischen 0 und 1024 und muss auf Werte zwischen 0 und 255 skaliert werden.
    Zudem wird hier der Überlauf von Minuten und Stunden überwacht.
    Als letztes werden noch die Beiden Knöpfe auf einen High-Pegel untersucht, um in diesem Fall +5 Minuten bzw. +1 Stunde auf die aktuelle Zeit zu addieren.

    Fazit

    Beim Bau der beiden Uhren konnte ich viel über die Funktionsweise der einzelnen elektronischen Bauteile lernen. Für zukünftige Uhren werde ich auf jeden Fall ICs verwenden, da dies eine noch kompaktere und vor allem übersichtlichere Bauform ermöglicht. Zudem kann die Fehlersuche (vorrausgesetzt der IC funktioniert einwandfrei) minimiert werden.

    Die Genauigkeit der Uhr ist auf Grund des 16Mhz Oszillators beschränkt. Es ist mit einer 1 Minute Abweichung pro Monat zu rechnen. Um dies zu beheben habe ich Funkuhrmodule bestellt, welche sich mit dem Arduino verbinden lassen. Sobald diese eintreffen (Lieferung aus China), werde ich diesen Beitrag updaten.

    Update:
    Mittlerweile sind die Sensoren in beiden Uhren verbaut und liefern zuverlässig die aktuelle Funkzeit.

    Der DCF Empfänger wird an eine 3,3V Spannungsquelle angeschlossen, und liefert über einen Pin des Arduinos die Zeit. Das umwandeln der Zeitdaten wird von der Time.h Bibliothek, die Arduino zur Verfügung stellt, übernommen.

    Ziel des Projekts

    In V2 der Wordclock soll diese auf RGB LEDs umgestellt werden, welche jeden Buchstaben einzeln ansteuerbar machen. Dies ermöglicht nicht nur das Ändern der Farben, sondern auch Effekte beim Übergang von einer Zeit zur Nächsten. Auch in dieser Version wird ein DCF-77 Empfänger verbaut. Durch die Verwendung von WS2812B LED Strips soll der Lötaufwand (in zukünftigen Varianten) minimiert werden.

    Konstruktion der Uhr

    Die Glaspatte mit Folie von V1 wurde beibehalten

    Es wurden WS2812B LEDs verwendet. Diese können ├╝ber SPI angesteuert werden und so in Reihe geschaltet trotzdem voneinander unabhängig agieren.

    Da die bereits vorhandene Glasplatte ink. Folie verwendet wird, passt der Abstand der LEDs des Strips leider nicht auf die Buchstabenöffnungen der Folie. In zukünftigen Versionen wird die Folie angepasst, sodass der LED Strip nicht in einzelne LEDs aufgeteilt werden muss.

    In diesem Fall bedeutete dies jedoch das Setzen von 684 Lötpunkten, sowie das Anlöten von 339 Kabeln. Eine schöne Übung, jedoch kann ich bei der nächsten Version gerne darauf verzichten :)

    Hier das fertige Ergebnis, inklusive Kabel.

    Um die Lichtausbreitung zu den Seiten zu minimieren, wurde eine schwarze Maske verwendet.

    Hierbei habe ich die Rückstände der Löcher bewusst erhalten, um die seitliche Lichtabgabe zu minimieren.

    Die Maske wird mittels beidseitigem Klebeband befestigt

    Das innere Gestell wurde aus Pappe gefertigt. Hier besteht noch Verbesserungspotential. In zukünftigen Versionen soll dies durch eine 3D gedruckte Lösung erreicht werden.

    Der Helligkeitssensor wurde bei dieser Uhr in den Rahmen eingelassen und ist somit nicht direkt sichtbar. Dennoch liefert er zuverlässige Helligkeitswerte, die durch die LEDs im Inneren nicht beeinflusst werden.

    Der Arduino Nano, welcher die Steuerung der LEDs übernimmt wird im Inneren befestigt. Durch eine Öffnung an der Seite der Uhr kann dieser stets per USB geupdatet werden.

    Ein Erster Test der Uhr. Die Helligkeitskennlinie der LEDs muss noch angepasst werden.

    Eine erste Anwendung der RGB LEDs ist das Wechseln der Farbe durch das kurze Abdunkeln des Helligkeitssensors. Weitere werden in Kürze folgen, da die Software des Arduinos durch den USB Anschluss problemlos geupdatet werden kann.

    Software

    Der Code unterscheidet sich durch hauptsächlich durch die Ansteuerung der LEDs, sowie durch die Erweiterung um das Farbmanagement von V1. Es wird die FastLED SPI Bibliothek verwendet, um die LEDs anzusteuern. Zum Farbmanagement werden die globalen Variablen globalR, globalG und globalB verwendet, welche stets Vorrang vor dem vorigen Farbwert der LEDs haben, sofern sie nicht den Wert -1 halten. So kann die Farbe der LEDS für Übergangseffekte verändert werden und anschließend die zuvor ausgewählte Farbe wiederhergestellt werden.

    Die Inidizes der LEDS, um beispielsweise Buchstaben darzustellen wurden von Hand eingepflegt, da diese keinem Algorithmus folgen. Für die Illumination ganzer Zeilen/Spalten können natürlich Schleifen verwendet werden. Hierbei muss jedoch der Offset der Eck-LEDs berücksichtigt werden.