Word Clock v2 Teil 3: Der Code

Nun geht es weiter mit dem Arudino und dem Code der darin läuft. Als erstes besorgt man sich wieder einen Arduino UNO oder Nano (Klon oder Original). Bei den Klons sollte man darauf achten, dass der USB Controller ein explizit ein Original FTDI Chip oder ein CH340 Chip ist.

Die DATA-Leitung des aller ersten LED Streifen aus der Daisy-Chain Kette schließt man dann per Jumper Wire an den Digital Pin 3. Das ist dieser hier:

Arduino Pin 3.jpgDamit die Uhr auch ordentlich läuft und auch bei Stromausfall die Uhrzeit behält brauchen wir auch noch ein Real Time Clock Modul (RTC). Auch hier gibt es viele verschiedene Chips/Versionen und allerlei Klone. Ich benutze das RTC Modul DS3231 und bin mit der genauigkeit sehr zufrieden! Allerdings muss man auch hier den Widerstand herauslöten, da sonst die Batterie explodieren kann. Angeschlossen wird es so:

arduino-ds3231.jpg

Also VCC und GND an 5V und Masse. SCL auf A5 und SDA auf A4.

Falls noch nicht geschehen, sollte man spätestens jetzt die offizielle Arduiono IDE (ACHTUNG!: DIE AKTUELLE VERSION FUNKTIONIERT MIT DEN BENÖTIGTEN LIBRARIES NICHT MEHR: BITTE VERSION 1.6.5 ODER 1.6.9 BENUTEZEN!) herunterladen und installieren. Für die Klon Arduinos mit CH340 Chip muss man noch diesen Treiber herunterladen und installieren.

Als erstes müssen wir der RTC sagen wieviel Uhr wir gerade haben. Dazu brauchen wir ersteinmal die passende Library. Nämlich diese hier: DS3231 Library. Libraries installiert man ganz einfach. Man Navigiert zu C:\Users\Benutzername\Documents\Arduino\libraries und kopiert den Ordner dort einfach hinein. Nach einem Neustart von der Arduino IDE sind die Libraries installiert. Danach sucht man in den Beispielen dieses: „DS3231 Serial Easy“. Dort trägt man einfach das Datum, die Uhrzeit und den Wochentag ein (vorher noch die // vor den Zeilen wegmachen) und lädt dieses auf den Arduino (die RTC muss dabei natürlich am Arduino angeschlossen sein.

Hat man die RTC programmiert, lädt man sich noch meinen Wordclock Code herunter und öffnet diesen mit dem Arduino. Beginnen wir mir den ersten Zeilen. Damit der Code richtig funktioniert braucht man noch Libraries. 3 an der Zahl. Die Links für die jeweilige Library ist schon im Code. Einfach anklicken, herunterladen, entzippen und in den Arduino libraries Ordner legen. Hat man die Libraries installiert muss man noch ein paar Zeilen im Code anpassen.

Wordclock Code 1.jpg

In der Zeile „#define Num_LEDS“ trägt man seine Gesamtanzahl an LEDs ein. Bei mir sind das 164.

Darunter geht es an die Helligkeit. Auf der ersten Seite hatte ich schoneinmal den Fotoresistor bzw. die automatische Helligkeitsanpassung angesprochen. Je nachdem ob man das nun möchte oder nicht muss man den Code für sich anpassen.

Anpassungen mit Helligkeitsanpassung via Fotoresistor:
Bei „uint8_t maxBrightness“ trägt man die Helligkeit ein mit der die LEDs maximal leuchten sollen (bei heller Umgebung)
Bei „uint8_t minBrightness“ trägt man die Helligkeit ein mit der die LEDs minimal leuchten sollen (bei kompletter Dunkelheit)
Bei „uint8_t AmbientLightPin“ trägt man den Pin ein, an dem der Fotoresistor hängt. Dazu aber später mehr.
Die „unint_8t BRIGHTNESS“ Zeile kann man ignorieren bzw. einfach so lassen.

Anpassungen ohne Helligkeitsanpassung via Fotoresistor:
Um die automatische Helligkeitsanpassung auszuschalten trägt man bei „uint8_t maxBrightness“ eine 0 (null) ein.
Die zwei Zeilen darunter kann man so stehen lassen.
Bei der „unint_8t BRIGHTNESS“ Zeile trägt man seine gewünschte (dauerhafte) Helligkeit ein.

Damit wären die Helligkeitseinstellungen schon erledigt.

Weiter gehts mit viel Zählerrei: Es muss nun jedem Wort die passenden LEDs zugewiesen werden. Dafür gibt es für jedes Wort ein Array. Zwischen den {}-Klammern stehen bereits einige Zahlen. Diese sind nur Beispiele oder ein kleiner Anhaltspunkt, wie es später aussehen soll! Am besten geht man folgendermaßen vor:

Wordclock Code 2.jpg

Man Zählt die LEDs des ersten Steifen der an den Arduino angeschlossen ist (bei mir „Es ist“) beginnend mit 0 (Null)! Hat das Wort z.B. 12 LEDs trägt man zwischen die zwei Klammern {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; ein. Dann gehts weiter mit dem zweiten Streifen bzw. Wort, welches an dem DATA Ausgang des ersten Streifen hängt. Bei mir das Wort „Fünf“ (und zwar das „Minuten Fünf“) Also sucht man das Array „MFuenf“ und trägt in die Klammern wieder die LED Positionen ein z.B {12, 13, 14, 15, 16, 17, 18}; Und das einfach immer so weiter, man folgt immer der DATA Leitung und zählt die Anzahl der LEDs, welche ein Wort beleuchten. Ich habe im folgenden Bild mal meine DATA Leitung eingezeichnet. Wenn das bei dir auch so ist zählt man wie folgt:

nummerierung.jpg

Die letzte LED hat die Nummer 163. Die letzte Nummerierung sollte immer die Gesamtanzahl -1 sein, da wir ja mit 0 anfangen zu zählen. Passt bei mir also 😉 Etwas weiter unten im Code kann man auch die gewünsche Farbe eintragen (Standard = Warmweiß)

WCColor.jpg

Und das war auch schon alles! Auf der Rückseite kann man die RTC und den Arduino anschließen und einkleben o.ä. und an die 5V anschließen. Dann noch das Programm auf den Arduino übertragen und sich an der neuen Wordclock erfreuen! 😀

Hier gehts zu Teil 4.

38 Kommentare zu “Word Clock v2 Teil 3: Der Code”

  1. Hi Arne, hast du einen Fotoresistor für die Helligkeitsanpassung eingebaut? Bei mir funktioniert das irgendwie nicht. Wenn es heller wird, wird die Helligkeit reduziert und bei Dunkelheit strahlt die Uhr mit voller Helligkeit. Meiner Meinung kann es nicht an einem falschen Resistor liegen. Hast du ähnliche Probleme oder kennst du eine Lösung? Gruß felix

    Gefällt mir

    1. moin felix,
      ich habe bisher keinen Fotoresistor dran, da ich noch auf meine Lieferung aus China warte 😉
      Da es bei dir mit Logik funktioniert, bist du sicher, das dein Code richtig ist?

      Gefällt mir

      1. Moin,

        den Code habe ich eigentlich nicht verändert. Ich verstehe aber auch nicht komplett um einen Fehler zu finden. Kennst du dich da aus? Ich verstehe es so dass bei einer Änderung von 10% die Helligkeit verändert wird. Ich weiß aber nicht in welche Richtung . Wahrscheinlich steckt das in der BRIGHTNESS -Zeile..

        Hier der Ausschnitt:

        if(maxBrightness != 0){
        Ambient = analogRead(AmbientLightPin);
        //Nur bei größeren Helligkeitsänderungen soll die Helligkeit der LEDs angepasst werden:
        if((Ambient > LastAmbient*1.10) || (Ambient < LastAmbient*0.90)){
        BRIGHTNESS = map(Ambient, 0, 1023, maxBrightness, minBrightness);
        LastAmbient = Ambient;
        }

        Gefällt mir

  2. Für das RTC Modul DS3231 wird als Batterie eine aufladbare LIR2032 benötigt (!). Eine normale CR2032 ist nicht geeignet, zumindest nicht solange die Aufladfunktion nicht „rausgelötet“ wird. Die LIR2032 gibts auch bei Aliexpress…

    Arne

    Gefällt mir

  3. Hallo,
    vielleicht kann mir ja jemand helfen, ich verzweifel leider etwas an dem RTC.
    Verbunden ist alles richtig, aber irgendwie will der RTC code nicht.

    Wenn ich alles wie beschrieben starte tut sich nichts.
    Im com monitor stehen bei 115200 Baud: àààà … in einer ewig langen Reihe.
    Lese ich den com monitor für das word clock script aus (ich glaube es war bei 96000 Baud, bin aber gerade nicht Zuhause und kann es sicher nachschauen) ist dort zu lesen:
    Unable to sync with the RTC
    und von da an dann abwechselnd 12 und 0 in je einer Zeilt.

    Hat jemand eine Idee wie ich die Fehler aus der Welt kriegen kann?
    Bin für jede Hilfe dankbar.

    Vielen Dank!
    Philipp

    Gefällt mir

    1. Nach ein paar cholerischen Anfällen bin ich nun so weit:
      Uhrzeit des RTC wird nach dem Rüberladen des Scripts ausgegeben. Lese die Uhrzeit im Com Monitor unter 115200 Baud.
      Wednesday 24.05.2017 — 18:33:39
      Wednesday 24.05.2017 — 18:33:40
      Wednesday 24.05.2017 — 18:33:41
      Unter 9600 Baud sind wirre Schreibereien zu lesen, ohne Zeilenumbruch, einfach in einer Reihe.
      œÂý]AýõHÿØ9øž‚ù˜9øšœ”Jÿ˜BýôJÿœÂýZÉÿšœœNÿ]ñž‚ùØ=ø™9øõJÿõHÿœNÿ”Jÿ–FþõHÿ˜Jý’”™9ùž‚ùõJÿž‚ùž‚ù˜Jþ–FþšœZ5ñ]Qþš”Ø=ù”JÿZÉØ9ø™9øôNÿ™;ú

      Lade ich den Wordclock Code im Anschluss daran auf den Arduino steht unter 9600 Baud weiterhin für mich sinnlose Aneinanderreihung von Buchstaben.
      œÂý]AýõHÿØ9øž‚ù˜9øšœ”Jÿ˜BýôJÿœÂýZÉÿšœœNÿ]ñž‚ùØ=ø™9øõJÿõHÿœNÿ”Jÿ–FþõHÿ˜Jý’”™9ùž‚ùõJÿž‚ùž‚ù˜Jþ–FþšœZ5ñ]Qþš”Ø=ù”JÿZÉØ9ø™9øôNÿ™;ú

      Unter 115200 Baud erscheint eine Reihe ohne Zeilenumbruch mit à
      àààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààà

      Hat jemand eine Idee, was ich falsch mache? 😦 😦 😦

      Gefällt mir

      1. 192000 auslesen und man sieht auch was im ComMonitor

        þStarte Wordclock …
        RTC has set the system time
        vor 7
        53
        vor 7
        53

        So viele dumme Fehler – aber die LEDs werden noch immer nicht richtig angesteuert. Das Band leuchtet einfach statisch in verschiedenen Farben.

        Gefällt mir

  4. Danke für deine Arbeit! Ich bin fleißig dabei dir nachzueifern. Allerdings hake ich gerade bei den 3 libraries. Du schreibst „Die Links für die jeweilige Library ist schon im Code. Einfach anklicken, herunterladen, entzippen und in den Arduino libraries Ordner legen.“

    Wenn ich diese Links anklicke, dann werden mir eine Menge an Dateien angezeigt. Welche benötige ich denn genau? Danke schon mal für deine Hilfe!

    Gefällt mir

  5. Hi Arne,

    ich hab jetzt auch mit einer WordClock gestartet und habe direkt am Anfang ein Problem. Habe mir eine DS3231 RTC besorgt, die aber ganz anders aufgebaut ist. Ist ein viel kompakteres Modul wie im folgenden Link (http://bit.ly/2sgwJXX). Welcher Widerstand muss hierbei entfernt werden?

    Vielen Dank schonmal!

    Gefällt mir

    1. Hallo Anna,
      auf deinem Bild kann man von dem Modul gar nichts erkennen, insofern kann ich nichts dazu sagen…
      Alle RTCs über die ich gelesen und gesehen habe, hatten eine Laderoutine und die bedingt eine LIR2032 (aufladbar) als Batterie. Wenn du eine solche nimmst, brauchst du auch keinen Widerstand auslöten (gibts auch bei Aliexpress).
      ich hoffe du hast eine Art Datenblatt zu deiner RTC und evtl steht dazu was drin?
      Viele Grüße, Arne

      Gefällt mir

  6. Hallo
    Ich hab folgendes Problem meine Uhr lief bis jetzt ganz gut aber jetzt zeigt sie zwischen 1 Uhr und 2 Uhr die Wörter EINS und ZWEI nicht mehr an. Wo ran liegt das hab auch schon einen neuen NANO verbaut und es Funktioniert auch nicht?

    Gefällt mir

    1. Hallo Christoph,
      ich habe versucht das Problem zu beheben.
      Schau bitte mal in den Thread „http://forum.arduino.cc/index.php?topic=476000.0;topicseen“. Dort habe ich geschrieben, welche Änderungen ich im Code von dracarys vorgenommen habe. Diese Änderungen funktionieren bei mir.
      Die weiteren Vorschläge im Thread machen auch einen guten Eindruck, die habe ich aber noch nicht ausprobert.

      Gefällt mir

  7. Hi, kann man den Code so anpassen das man die Uhrzeit vom RTC mit Buttons einstellen kann, also wenn man Zeit umstellen will nicht gleich einen PC braucht?
    Noch eine Idee wäre mit einem Button die Farben durchzuwechseln, also auch wieder onhe PC.

    Gefällt mir

    1. Hallo Martin,
      Die RTC ist ja gerade deswegen dran, damit man die Uhrzeit nicht einstellen muß.
      Ich habe bei mir einen DCF Empfänger eingebaut, wenn ich dazu komme, erweitere ich das Tutorial hier.
      Arne

      Gefällt mir

  8. Hier ist ein Logischer Fehler im Code was die DST angeht. Deswegen geht das EINS etc nicht mehr, Ich hab nur noch keine Lösung. Sieht man im Serial Output das er 13 anzeigt und damit die Regel oben überschrieben wird

    Gefällt mir

    1. Hallo Sascha,
      der Fehler lässt sich mit folgendem Aufbau umgehen (nicht elegant, aber funktioniert): Bitte Anstelle des entsprechenden Eintrages verwenden.
      if(DST == true){
      if (Stunde 12)
      Stunde = Stunde-12+1;
      else if (Stunde == 12)
      Stunde = 1;
      else if (Stunde == 24)
      Stunde = 1;
      //Stunde += 1;

      Gefällt mir

      1. Danke für die Antwort ich ahbe es gestern aebnd wie folgt gelöst:
        void CheckDST(void){
        //Funktion zum Überprüfen ob Sommer oder Winterzeit
        Tag = day();
        Monat = month();

        WochenTag = (weekday()-1);
        int Hilf = Tag-WochenTag;
        if(Monat = 11)
        DST = false; // Winterzeit

        if(Monat >= 4 && Monat = 25))
        DST = true; // Beginn der Sommerzeit

        if((Monat == 10) && (Hilf >= 25))
        DST = false; // Beginn der Winterzeit
        }

        void loop() {
        CheckDST();
        Stunde = hour();
        Minute = minute();

        if(DST == true){
        Stunde += 1;
        }

        if(Stunde > 12)
        Stunde = Stunde-12;
        else if (Stunde == 0)
        Stunde = 12;

        displaytime();
        FastLED.delay(250);
        }

        Gefällt mir

  9. Jetzt habe ich nir noch das Problem, das ist es gerne noch deutlich heller hätte und KEINEN Sensor dran habe. Ich möchte es fest herr haben. Der ist uint8_t maxBrightness = 0; und der uint8_t BRIGHTNESS = 255; // Wenn kein Fotoresistor benutzt wird hier dauerhafte Helligkeit eintragen so, aber richtig hell wird es nicht 😦
    Noch Ideen ?

    Gefällt mir

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Hier stelle ich meine DIY Projekte vor!

%d Bloggern gefällt das: