
Da ich ein Geschenk für meine Freundin zu Weihnachten brauche, kam ich auf die Idee eine Wordclock (Wortuhr) zu bauen. Sinn und Zweck dahinter ist es, die Zeit nicht mit Ziffern darzustellen, sondern mit Wörtern, und zwar so, wie man die Zeit auch tatsächlich ausspricht. Hier erst mal ein Bild von der fertigen Uhr, die Oberfläche ist noch mit einer Schutzfolie bedeckt. Sorry für das Chaos, aber wo gehobelt wird, fallen auch Späne
Für die Ungeduldigen unter euch, hier schonmal ein Video: Zu erstmal mussten die Rahmenbedingungen festgelegt werden: – 40×40 cm, damit man die Uhr auf eine größere Distanz gut lesen kann – Verspiegelte Frontplatte aus Glas bzw. Plexyglas – “Holzabschirmung” der Lichtkegel, um unerwünschtes Leuchten von Buchstaben zu unterbinden – Aluminium Rahmen um saubere Kanten zu haben – RGB Beleuchtung – Helligkeitssensor – Steuerung via Smartphone _________________________________________ LED Beleuchtung Da es sich hier um 100 Led’s hat, ist es naheliegen, eine 10×10 Matrix aufzubauen und diese mittels Multiplexing zu betreiben. Zufällig bekam ich aber ein RGB Lichtband in die Hand, mit welchem es Möglich ist, jede RGB-LED einzeln zu adressieren. Auf einem Band mit 100 LEDs befinden sich 50 HL1606 Controller. Ein Controller ermöglicht es jeweils, zwei LEDs zu steuern. Die Besonderheit ist dabei, dass man nicht nur die Möglichkeit hat, die drei Farben einer LED an und auszuschalten, sondern auch an- bzw. ausfaden möglich ist. Somit kann man sanfte Übergänge erzielen. Angesteuert wird so ein “RGB-Strip” via SPI. Das Protokoll ist denkbar einfach aufgebaut: Man hat ein Byte pro LED. Dort kann man wählen, wie schnell eine LED an-/ausfaden soll, und ob die jeweilige Farbe an, aus, an- oder ausfadet. Zuerst setzt man SlaveSelect auf 0 und dann wird das Byte gesendet. Dabei gibt jeder Controller die Information von einer LED an die nächste weiter. Man schiebt sozusagen Bytes durch den Strip. Sende ich z.b. Farbe Grün, und dann 100x “Licht aus”, so würde der Grüne Punkt den Strip entlanglaufen. Um effizienter ein “Bild” aufzubauen, gibt es noch ein Latchbit in dem Byte. Damit ist es möglich, gezielt Pixel an eine Stelle zu setzten, ohne die Vorhandenen “durchzuschieben”. NUN zur eigentlichen Aussage: Man kann aus einem Strip mit 100Leds eine 10×10 Matrix aufbauen:
Nahaufnahme: 

Damit es schön gleichmäßig leuchtet, wird eine Diffusorfolie verwendet:
Frontplatte: Die Frontplatte wurde über Inkscape erstellt und von der Firma “formulor” gefertigt. Das Material ist Acrylglas GS. Mittels Laser wurden die Lettern ausgeschnitten. Bevor die Frontplatte jedoch da war, musste ich trotzdem wissen, welcher Buchstabe zu welchem Loch gehört. Ich habe dazu einfach auf normalem Papier das Layout ausgedruckt, wobei alles, bis auf die Buchstaben, schwarz gedruckt wurde:
Rahmen Nachdem die MDF-Platte und die LED-Trägerplatte verschraubt wurden, habe ich einfach eine Alu-Winkelschiene mit 45Grad Winkeln abgeschnitten, und um das Holz herum angebracht. Dabei musste die MDF Platte auf ein exactes Maß zugeschnitten werden, damit die Frontplatte auch bündig abschließt.
Hier befinden sich die Kratzer auf der Schutzfolie

Da ich natürlich mein Steckbrett nicht hergebe, muss ein Platine her, welche die Elektronik trägt. Sie ist keine Schönheit geworden, aber sie soll schließlich Zweckdienlich sein, wie Tony Stark sagen würde. Layout in der Entwicklungsphase:
Ätzvorgang:
Fertig bestückt und bereits eingebaut:
Nachdem nun soweit alles Vorhanden war, wurde ein Stück aus der MDF Platte gesägt, die 4 LEDs integriert und die Elektronik eingebaut. Das Stromkabel wurde hinten rausgeführt, um die Alu-Profilschienen nicht Bohren zu müssen, dass würde das Design stören. Die Frontplatte sollte ohne Verschraubungen befestigt werden, deswegen wurden dazu einfach Magnete auf die Rückseite der Platte geklebt. Das fertige Produkt sieht so aus, wobei ich die Schutzfolie noch nicht abziehen kann. Die kommt erst an Weihnachten runter, wenn meine Freundin das Geschenk bekommt, danach gibt es Fotos mit der spiegelnden Oberfläche:
Zur Funktion: Alle Einstellungen werden per Android Smartphone verändert. Dabei können Uhrzeit, Farbe und Übergangseffekte eingestellt, sowie die Minuten Leds ein- und ausgeschaltet werden. In einem der Löcher befindet sich ein LDR (Light Depending Resistor), der die Helligkeit der Umgebung misst, und ab einer gewissen Schwelle in den Nachmodus schaltet. Da der HL1606 kein echtes PWM bietet, musste ich etwas tricksen: Ich schalte das PWM vom µC aus, somit hat der HL1606 keine Taktquelle mehr, nach der sich die Fadegeschwindigkeit richtet. Somit bleibt er auf seinem Startwert sitzen. Dann setzte ich alle aktiven LEDs auf anfaden, und erreiche somit, dass die LEDs auf der niedrigsten Stufe leuchten. Um ein Flackern der Uhr zu verhindern, wenn jemand beim Vorbeigehen den Sensor abdunkelt, wird 3 Sekunden gewartet, und überprüft ob in der Zeit die Helligkeit konstant war, erst dann wird die Helligkeit der LEDs verändert. Der Lichtsensor ist im vierten Loch von rechts unten aus zu sehen. Zudem sieht man die Magnete an der Frontplatte rechts, und jeweils an den Ecken in der MDF Platte. Für Details, Bild anklicken:
Update: 21.04.2012 Pläne: Ich hoffe der Schaltplan ist so in Ordnung, da ich das Projekt damals nur als Layout erstellt hatte. Zwei Fehler sind leider bei dem Projekt entstanden. Es wurde vergessen, die LEDs auch dimmbar zu machen (wer das Projekt nachbaut, sollte die Zuleitung zu den LEDs mittels PWM steuern, Transistor oder FET aber nicht vergessen
Sourcecode:
Da der Code nicht gerade übersichtlich ist und sehr unsauber geschrieben, werde ich ihn vorerst nicht veröffentlichen. Aufgrund der knappen Zeit wurden diverse Timerroutinen durch _delay_ms ersetzt, was in meinem Fall nicht schlimm ist, da der µC seine Zeit immer von der RTC liest. Allerdings wollte ich ursprünglich die Abfrage der Zeit, von der RTC auf alle 60sekunden begrenzen. Im Moment wird alle 200ms abgefragt. Da die Uhr aber schon seit Dezember durchgehend läuft und keine Anomalien aufweist, bleibt der Code vorerst so. Es ist zwar in manchen Augen “schlecht” programmiert, wenn man Takte abwartet, an denn nichts gemacht wird, bzw. die RTC ständig abfragt, aber wenns läuft ![]()
Das hex File für den Atmega8535 ist hier herunterzuladen DOWNLOAD
