Und Noch Eine Wordclock

72,451

75

59

Introduction: Und Noch Eine Wordclock

Hallo Leute,

ich will hier heute mal eine erneute Kopie einer Wordclock vorstellen. Mir hatte diese Uhr schon beim aller ersten Anblick das Nerdige "Will-Ich-Haben"-Gefühl geweckt.

Das schöne an dieser Uhr ist sie stellt die Zeit in Worten dar also "Es ist viertel nach sieben".

Diese Uhr ist immer ein netter Blickfang im Wohnzimmer und führt immer wieder zu erstaunten Gesichtern bei den Gästen und man kann diese Uhr "richtig" lesen.

So habe ich vor zwei Jahren miene erste Wordclock gebaut mit einem leider nur mäßig zufriedenstellendem Ergebnis. Die LEDs waren einfach zu dunkel durch das Multiplexing das mit Hilfe von zwei Multiplextreibern (MAX7221) geschah. Also musste eine neue Idee her.

Da die WS2812B LEDs immer billiger wurden, war dadurch dieses neue Projekt geboren.

Die Uhr sollte nachher "Berührungslos" eingestellt werden können deswegen sind hinter der Frontplatte Reedkontakte die man mit Hilfe eines Magneten ausgelöst werden und dadurch kann die Uhr gestellt werden bzw der Modus geändert werden.

Da ich aus der Automatisierungsbranche komme bin auch ein Fan des keep it clear as possible. Deswegen habe ich mit auch zu einem minimalistischen Bedienkonzept entschieden.

Alles wird auf einem Arduino Nano (wahlweise auch einem Pro Mini und ein ISP -Programmer) mit der Arduino IDE realisiert.

Die Acrylplatte auf den Fotos sieht im Moment noch nicht so schön aus, da sich noch die Schutzfolie auf der Oberseite befindet. Diese wird erst entfernt wenn die Uhr sich vor Ort befindet um die Front zu schützen.

Step 1: Materialliste

  • 1*Arduino Nano oder kompatibel
  • 1*DS3231 RTC Modul zum beibehalten der Zeit
  • 1* Acryl Wordclock Frontplatte von mikrocontroller.net (füher gab es die Platte hier zu kaufen *)
  • 114* WS2812B auf 10mm-Platine
  • 4* Reed Kontakte zum Stellen bzw. Modus ändern der Uhr
  • 1* MDF Zwischenplatte nach verändert bzw. angepassten Maße laut dem o.g. Artikel
  • div Lochstreifen
  • geregeltes 5V Netzteil mit 3A

Die Gesamtkosten für die Uhr belaufen sich auf 70-80 €

Edit:
(* Nach einer Unterlassungserklärung kann man dort "nur" noch die CAD bzw Plotterdateien bekommen)

Step 2: Grundplatte

Die Grundplatte wurde gefräst nach Anpassungen der Maße von dem "originalen" Vorgaben plus 4 Taschen zum verstauen der Elektronik und zusätzlichen Kanälen zum verkabeln. Auf der Frontseite befindet sich noch ein zusätzlicher Kanal zu verstauen der Reedkontakte

An den Rückseite sind Aussparungen zum Einsetzten der LEDs. Dort werden alle 114 LEDs platziert und dann mit etwas Uhu fixiert. Danach kommt die Fleißarbeit alle LEDs müssen verdrahtet werden nach dem Prinzip. Erste Reihe von Links nach Rechts dann weiter zweite Reihe von Rechts nach Links durch alle 10 Reihen und am Ende werden die 4 Ecken verkabelt. Die Stromversorgung der Reihen werden an jeder Seite "Anfang" und "Ende" aller Reihen Parallel geschaltet da pro LED bis 60mA fließen können d.h. 660mA für jeder Reihe.

Der absolut maximale Strom wäre rein rechnerisch 6,8A bei allen LEDs an und Volle Werte bei R,G,B. Im Normalbetrieb kommt man nicht über 2-2,1A. Selbst ein Feuereffekt (Fire2012 aus der Examples der Lib) kommt man auf 3,5A-4A

Step 3: Zusamenbauen Und Programmieren

Nach dem zusammenbauen kommt das Programmieren.

Die Library die hierfür Notwendig findet man hier: Klick

Die anderen Libraries sind Bestandteil der Arduino IDE also braucht man nix zusätzliches

Die Uhr kann wie auf dem ersten Bild Links in die verschiedenen Modi geschaltet werden nach folgendem Ablauf

  • Mode 1: Stunden stellen (die linken Eck-LEDs leuchten)
  • Mode 2: Minuten stellen (die rechten Eck-LEDs leuchten)
  • Mode 3: Farbe einstellen Farbe ROT
  • Mode 4: Farbe einstellen Farbe GRÜN
  • Mode 5: Farbe einstellen Farbe BLAU

Die Farbe kann selbst bestimmt werden bei dem Farbe einstellen.

In dem Farbmodus werden die obersten beiden Reihen genutzt um den aktuelle Höhe des einstellbaren Farbwertes einzustellen. Es sind pro Farbe (Rot,Grün,Blau) 22 Stufen die man einstellen kann. Die unteren beiden Reihen zeigen das Ergebnis der Summe der drei Farben, also das Endgültige Ergebnis mit der die Wörter nachher angezeigt werden. Die Werte sind im EEPROM gespeichert also die Farbe bleibt nach Stromausfall etc. erhalten genauso wie die Uhrzeit die im DS3231 gespeichert wird und weiter läuft.

Noch offen:

  1. eine Adaptive Helligkeitsregelung mittels LDR
  2. "Wlan" Anschluss via ESP8266 mit der NTP Firmware zur echten Funk Uhr

Bei Fragen ich bin auch unter dem Usernamen im arduino.cc Forum zu finden.

! Achtung bei der ersten Inbetriebnahme sind im EEPROM die Werte 0 für die drei Farben gespeichert was zu einer "dunklen" Uhr führt.

Vor dem ersten Laden einfach einen leeren Sketch und in die ersten drei Adressen Werte 22 schreiben und zwar so:

#include <EEPROM.h> 
void setup() {
    EEPROM.write(0, 22);
    EEPROM.write(1, 22);
    EEPROM.write(2, 22);
    }
 
 void loop(){
 }

Diesen Sketch einmal Hochladen. Dann stehen die Werte im EEPROM. Jetzt kann der Uhrensketch hochgeladen werden.

Update:

Ich habe eine Automatik eingebaut die das EEPROM tested und die passenden Werten speichert

Viel Spaß

4 People Made This Project!

Recommendations

  • Make it Glow Contest

    Make it Glow Contest
  • Baking Contest

    Baking Contest
  • Block Code Contest

    Block Code Contest

59 Comments

0
Torsten85
Torsten85

Question 4 years ago

Hallo Zusammen!
Meine Uhr läuft auch Super alle Einstellungen Funzen leider Zeigt und Zählt meine nur die Sek.!!
Nach 20 Sek kommt für 1 Sek die lesbare Uhrzeit!!!! Wo und wie kann ich das im Code ändern???
Vielen Dank

0
cmp44
cmp44

Answer 18 days ago

Ich habe anstatt der Reedkontakte Taster verwendet und diese falsch verdrahtet. Die Pins waren immer mit Gnd verbunden. Das führte zum gleichen Fehler.

0
volvodani
volvodani

Answer 4 years ago

Hallo Torsten,
ich denke du hast den "Fehler" gemacht und die Taster zwischen Input und +5V geschaltet. Diese müssen aber in zwischen Input und GND. Im Programm sind die als PullDown Schaltung ausgewertet d.h. in einem offenen nicht geschalteten Zustnd liest das Programm 5V => also HIGH wenn der Taster gedrückt ist 0V => LOW. Diese Schaltung ist zuverlässiger da intern ein PullUp Widerstand verbaut ist nutz man die Schaltung gegen 5V braucht man Pull Down Widerstände die man extern verbauen muss da intern sowas nicht gibt.
Einfach mal Suchmascheine nach Pull Up/ Pull Down mit Arduino suchen da wird es noch ausfühlicher erklärt.
Gruß
DerDani

0
adremia31
adremia31

2 months ago

Hello All electrican
The word clock is good but else you don't make the first update to your eeprom. cause it member your colour and you can change it only you reprogammed your uP
Let it life ich habe eine cnc fräse mache eventuell wenn es geht

0
UlrichR
UlrichR

Question 1 year ago on Introduction

Hi ich wollte mir ebenfalls eine Uhr bauen. Aber beim Sketch komme ich nicht weiter.
Ich hebe den Fehler 'TimeRead' was not declared in this scope. Was meiner Meinung nach an der fehlenden Libary avr/wdt.h liegt. Die ich nirgens wo finden kann irgendwelche Tipps oder Ideen würde mich echt freuen hab die Sachen alle hier und zum Großteil schon verlötet.

0
UlrichR
UlrichR

Answer 1 year ago

Hab es hinbekommen alle Dateien in einen Ordner kopieren und die Haupt Datei öffnen.
Danke für die Anleitung und Codes

0
Muffi01
Muffi01

2 years ago

Hallo
Sehr gut beschrieben das Projekt. Da ich absolut nicht der Programierer bin habe ich ein Problem mit einer Lib. Ich bekommen den Sketch nicht geladen , stopt mit der Meldung:

qlocktwoWS2812REED:17:21: error: avr/wdt.h: No such file or directory
#include <avr/wdt.h>
compilation terminated.
exit status 1
avr/wdt.h: No such file or directory
no protocol:

0
maxi.zwinger
maxi.zwinger

Reply 1 year ago

Hallo, Ich habe gerade das gleiche Problem und wollte fragen ob du inzwischen eine Lösung gefunden hast. Bitte um Antwort brauche es dringend für mein Abschlussprojekt.
Danke
lg Max

0
Stefansexauer
Stefansexauer

Question 2 years ago

Hallo volvodani,

danke für die super Anleitung, ich hab das ganze in einem IKEA Ribba Rahmen umgesetzt, die Frontplatte hab ich mit schwarzer 3M Folie selbst gelasert und die Buchstaben nicht entfernt, so dass man nur die Outlinekonturen sieht, wenn sie beleuchtet werden, ansonsten ist die komplette Front schwarz.
Ich hab aber noch eine Frage, ob Du mir bei einer Erweiterung des Codes behilflich sein könntest.
Ich hab in der Front noch eine Nachricht versteckt, vertikal in meheren Spalten angeordnet,die ich in einem Zeitraum, sagen wir zwischen 10:00 Uhr vormittags und 22:00 Uhr Abends zu einer zufälligen Zeit anzeigen lassen möchte.
Leider bin ich was das Programmieren angeht nicht der große Held, kannst Du mir das weiterhelfen

Gruß und vielen Dank im Voraus

Stefan

YDRD5794.JPG
0
volvodani
volvodani

Answer 2 years ago

Ich wollte das Programm eignetlich nicht mehr anpacken da ich mitterweile an einer neuen Verison in Edelstahl mit einem ESP8266 und WLAN und wesentlich edlern Optik dran bin. Zwischenplatte ist gedruckt und die "LED" sind LED Streifen. Die ecken bestehen aus 3 LED die die ganze Platte einfassen.
Evtl mal im Arduino Forum nachfragen. Aber es erklärt sich im Code ja vieles selber.


Gruß
DerDani

0
Meister_der_Lampe
Meister_der_Lampe

2 years ago

Habe einen "Es ist Eins Uhr" Fehler! Die Software sollte das ja abfangen, tut es aber nicht!
Mir fehlen da jetzt die Feinheiten von C++, wo ist der Fehler?

eins.jpg
0
volvodani
volvodani

Reply 2 years ago

Das schein mit aber ein bisschen seltsam da ich ja noch eine Uhr auf der Arbeit mit genau diesem Problem habe und genau mit diesem Abschnitt gecoverd wird.
Das ist der Auschnitt aus meinem Code.
if (hhdisplay==1&&mm5er==0) H_EIN(); // Bei Voller Stunde ohne Minute "Ein" Uhr
else if (hhdisplay==1||hhdisplay==13) H_EINS(); // Normale "Stunden" Auswahl
else if (hhdisplay==2||hhdisplay==14) H_ZWEI();
else if (hhdisplay==3||hhdisplay==15) H_DREI();
else if (hhdisplay==4||hhdisplay==16) H_VIER();
else if (hhdisplay==5||hhdisplay==17) H_FUENF();
else if (hhdisplay==6||hhdisplay==18) H_SECHS();
else if (hhdisplay==7||hhdisplay==19) H_SIEBEN();
else if (hhdisplay==8||hhdisplay==20) H_ACHT();
else if (hhdisplay==9||hhdisplay==21) H_NEUN();
else if (hhdisplay==10||hhdisplay==22) H_ZEHN();
else if (hhdisplay==11||hhdisplay==23) H_ELF();
else if (hhdisplay==12||hhdisplay==24||hhdisplay==0) H_ZWOELF();
}

Gruß
DerDani

0
Meister_der_Lampe
Meister_der_Lampe

Reply 2 years ago

Hab gerade meine Uhr mit extra USB buchse gepimmt, und mal folgendes geändert:

if (hhdisplay==1&&mm5er==0) H_EIN();
zu
if ((hhdisplay==1||hhdisplay==13)&&mm5er==0) H_EIN();

jetzt ist es gut!

0
Meister_der_Lampe
Meister_der_Lampe

Reply 2 years ago

Hi, hat doch noch etwas Zeit und bin etwas tiefer in deinen Code eingestiegen, finde den wirklich schön übersichtlich.
Das covern mag klappen für 1.00 Uhr, aber ich denke nicht für 13.00 Uhr, wozu man dann ja auch "Ein Uhr" sagt:
Du subtrahierst zwar oben im setmode=0 die 12h für die Zeiten>= 13Uhr, aber dann wird hhdisplay noch mal neu mit hh belegt, deshalb kann bei der Abfrage auch wieder der Fall hhdisplay=13 vorkommen:
.
.

hhdisplay=hh;
if (mm>=25){ // ab der 25 Minuten ist es immer "vor" der nächsetn Stunde
if (hh==0||hh==12){ // bei 12 Uhr vor "Ein" Uhr
hhdisplay=1;
}
else
hhdisplay=hh+1;
}
if (hhdisplay==1&&mm5er==0) H_EIN(); // Bei Voller Stunde ohne Minute "Ein" Uhr
else if (hhdisplay==1||hhdisplay==13) H_EINS(); // Normale "Stunden" Auswahl
......
Sollte da nicht statt dessen stehen:
if ((hhdisplay==1||hhdisplay==13)&&mm5er==0) H_EIN(); // Bei Voller Stunde um 1Uhr und 13Uhr ohne Minute "Ein" Uhr

Gruß
der Markus

0
alex.loesch57
alex.loesch57

Question 2 years ago on Introduction

hallo,

cooles Projekt und auch gut beschrieben. Eine frage habe ich jedoch in welche Größe wurde das ganze dimensioniert. habe damit noch Probleme mir das ganze bildlich vorzustellen wie groß das ist.

Danke für den Aufwand und die Tolle Idee
alex

0
Meister_der_Lampe
Meister_der_Lampe

Answer 2 years ago

die Empfehlung ist der Ikea Bilderrahmen 50x50cm; Die LEDs sind typischer 33 pro m auf der Rolle, also ein Buchstabenfeld von 36 cmx 33cm;

0
Jncls
Jncls

2 years ago

Hi,

cool beschrieben und super Anleitung. Eine Frage hätte ich aber zur Stromversorgung. Auf dem Schaltplan am Nano ist schon der VIN gemeint, also die Spannungsversorgung für den Arduino, der mit der Spannungsversorgung aus dem Netzteil verbunden wird und nicht der +5V-Ausgang, oder? Die ganze Matrix über den +5V des Arduino zu versorgen, wird vermutlich aufgrund der benötigten Ampere-Zahl pro Reihe nicht gehen, oder versorgt das Netzteil nur den Arduino direkt und der dann über den +5V die LED-Streifen?

Grüße und Danke für deine Mühe!
Jonas

0
gerdyonnet
gerdyonnet

3 years ago

Super Projekt, habe gleich die Teile bestellt, habs nun zusammengebaut, bekomms aber nicht hin die EEprom Werte zu speichern, wenn ich im Uhrensketch die Werte per Hand eintrage, funktioniert es, aber kanns nicht speichern, auch wenn ich den leeren sketch mit den EEprom.write werten aufspiele, leuchtet nichts, kanns auch nicht blind speichern.
Funktioniert nur wenn ich die Werte manuell eingebe, sind halt dann nicht änderbar.
Wäre für Hilfe dankbar.

Gruß

gerdyonnet

0
pnhann
pnhann

3 years ago

Hallo, welche Maße hat die Uhr? 45cm x 45cm x 22cm wie im Orginal? Hast du eine Rückwand oder ist die Uhr hinten offen? Ich überlege LED Strips zu verwenden und suche nach einemTrägermaterial für die LEDs. Danke

0
Eulerius
Eulerius

Question 3 years ago

Hallo, woher hast Du die Frontplatte? Der Link funktioniert nicht und auf der Seite mikrocontroller.net finde ich auch nichts. Wäre sehr froh über einen Link, wo ich die Frontplatte kaufen kann! Vielen Dank