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.

54 Kommentare zu „Word Clock v2 Teil 3: Der Code“

  1. Arduino: 1.8.2 (Windows 10), Board: „Arduino Nano, ATmega328“

    In file included from C:\Users\Z\Desktop\Wordclock_WS2812-Wordclock_WS2812\Wordclock_WS2812-Wordclock_WS2812.ino:1:0:

    C:\Users\Z\Documents\Arduino\libraries\DS3232RTC-master/DS3232RTC.h:136:26: error: ‚tmElements_t‘ has not been declared

    static byte read(tmElements_t &tm);

    ^

    C:\Users\Z\Documents\Arduino\libraries\DS3232RTC-master/DS3232RTC.h:137:20: error: ‚tmElements_t‘ has not been declared

    byte write(tmElements_t &tm);

    ^

    In file included from C:\Users\Z\Desktop\Wordclock_WS2812-Wordclock_WS2812\Wordclock_WS2812-Wordclock_WS2812.ino:4:0:

    C:\Users\Z\Documents\Arduino\libraries\FastLED-master/FastLED.h:17:21: note: #pragma message: FastLED version 3.001.006

    # pragma message „FastLED version 3.001.006“

    ^

    C:\Users\Z\Desktop\Wordclock_WS2812-Wordclock_WS2812\Wordclock_WS2812-Wordclock_WS2812.ino: In function ‚void setup()‘:

    Wordclock_WS2812-Wordclock_WS2812:76: error: ’setSyncProvider‘ was not declared in this scope

    setSyncProvider(RTC.get);

    ^

    Wordclock_WS2812-Wordclock_WS2812:77: error: ‚timeStatus‘ was not declared in this scope

    if(timeStatus() != timeSet) {

    ^

    Wordclock_WS2812-Wordclock_WS2812:77: error: ‚timeSet‘ was not declared in this scope

    if(timeStatus() != timeSet) {

    ^

    Wordclock_WS2812-Wordclock_WS2812:79: error: ‚timeNeedsSync‘ was not declared in this scope

    }else if(timeStatus() != timeNeedsSync){

    ^

    C:\Users\Z\Desktop\Wordclock_WS2812-Wordclock_WS2812\Wordclock_WS2812-Wordclock_WS2812.ino: In function ‚void CheckDST()‘:

    Wordclock_WS2812-Wordclock_WS2812:375: error: ‚day‘ was not declared in this scope

    Tag = day();

    ^

    Wordclock_WS2812-Wordclock_WS2812:376: error: ‚month‘ was not declared in this scope

    Monat = month();

    ^

    Wordclock_WS2812-Wordclock_WS2812:378: error: ‚weekday‘ was not declared in this scope

    WochenTag = (weekday()-1);

    ^

    C:\Users\Z\Desktop\Wordclock_WS2812-Wordclock_WS2812\Wordclock_WS2812-Wordclock_WS2812.ino: In function ‚void loop()‘:

    Wordclock_WS2812-Wordclock_WS2812:403: error: ‚minute‘ was not declared in this scope

    Minute = minute();

    ^

    Wordclock_WS2812-Wordclock_WS2812:404: error: ‚hour‘ was not declared in this scope

    int Std = hour();

    ^

    exit status 1
    ’setSyncProvider‘ was not declared in this scope

    Dieser Bericht wäre detaillierter, wenn die Option
    „Ausführliche Ausgabe während der Kompilierung“
    in Datei -> Voreinstellungen aktiviert wäre.

    Das ist die Fehlermeldung die ich beim Kompilieren bekomme. Auch wenn ich deine Version des Codes kompiliere. Ich habe alle Librarys verknüpft. Auch wenn ich versuche die Beispieldatei von der DS3232RTC-master.zip SetSerial versuche zu kompilieren werden die oben genannten Attribute nicht gefunden.
    Über Hilfe bei diesem Problem würde ich mich sehr freuen.

    Liebe Grüße Tom

    Gefällt mir

  2. Hallo Arne,

    Ich habe ein Problem ich hoffe du kannst mir helfen. Undzwar leuchten bei mir nach hochladen des Codes nur die LEDs des ersten Streifens. Ich habe einmal alle Kabel durchgepiepst (5V, GND; Data Leitung). Funktioniert alles. Hast du eine Idee an was das liegen könnte?

    Schöne Grüße

    Gefällt mir

    1. Hallo zusammen,

      @Tom und Mike: probiert es doch mit der angegebenen DS3231 library. Vielleicht klappt es damit. Und die vielen Probleme mit „not declared in that scope“ liegen wohl am Code. Ladet den einfach mal neu ohne inputs von euch auf den arduino und schaut ob es geht. Sonst ist vielleicht was mit den Librarys nicht in Ordnung.

      @Lukas: manchmal ist es einfacher als gedacht. Hast du allen „zahlen“(Eins, zwölf etc) die richtige LED Position angegeben? Wenn du einfach nur schauen möchtest ob deine LEDs funktionieren kann ich dir die „DemoReel“ Bibliothek von FastLED empfehlen die auch Arne in seinem Block verwendet. Einfach den Code aus der FastLED library unter examples den Code öffnen, deine Anzahl an LEDs eintragen und auf den ARduino laden. Wenn dann alle LEDs bunt leuchten liegt es nicht an der Verkabelung. Hat es funktioniert?

      Gefällt mir

      1. Hallo Felix,

        vielen Dank für deine Antwort, tatsächlich funktionieren nur die ersten 2 Reihen mit dem Test Programm. Jedoch kommen auch nur 3,3V in der dritten Reieh an. Ich habe ein 5V 4A Netzteil, dass müsste doch eigentlich genügen oder nicht?

        Gefällt mir

      2. Hallo Felix, ich habe jetzt alle Streifen zum leuchten gebracht, jedoch blinken die, die nicht angesteuert werden, blinken wie wild in allen Farben. Der fehler war, dass tatsächlich eine 5V Leitung mit einer Datenleitung kurzgeschlossen war. Ich denke dass tat den bestimmt nicht gut. Eventuell sind sie dadurch kaputt gegangen?

        Gefällt mir

      3. Okay tut mir Leid, dass ich so viel schreibe – jedoch funktioniert nun alles bei mir. Das einzige Problem ist die Reihe „Es ist“. Die LED Streifen leuchten alle. Aus diesem Grund sind die Buchstaben dazwischen auch beleuchtet. Was mach ich falsch?

        Gefällt mir

  3. Hallo hat mir jemand den code für 110 LED nicht wie oben beschrieben mit 165 LED gesammt wie die richtige Aufteilung ist danke . Danke

    Gefällt mir

  4. Hallo,
    Hast du eventuell einen Code damit ich meine LED Farbe per knopfdruck ändern kann? dann müsste man nicht jedes mal wenn man lust auf eine andere Farbe hat den Arduino am PC anschliesen.

    Grüsse von Mathias

    Gefällt mir

    1. Hey Lukas, perfekt dass es geklappt hat! (Ich hatte auch so ein Problem mit dem flakern und hatte auch eine Leitung übersehen) Die LED bei „es ist“ sind genau richtig so . du musst nur die beiden Buchstaben dazwischen ( die nicht leuchten sollen) unter dem weißen Blatt abkleben. Ich habe einfachen Karton genommen.

      @Frank: ich verstehe deine Frage nicht wirklich.. Wenn du nur 110 LEDs nimmst, dann musst du selber eine aufteilung für die Buchstaben machen. Den Code kann man einfach auf die gesamt Zahl anpassen.

      @Matthias: Eine super Idee! Dazu müsste man am besten ein spreadboard benutzen wo der Taster aufgesetzt wird. Den Code habe ich nicht. Im Februar setzte ich mich mal ran. ( ich will zur vollen Stunde noch ein Farbenspiel einbauen. Siehe Arnesblog : https://arnes-elektronik.blogspot.nl/) Vielleicht ist Arne da schneller.

      Gefällt mir

      1. Ja danke alles klar hätte ja sein können es hätte jemand schon 110 led s verbaut und die beste Lösung parat wie. beste Aufteilung für die Worte sind . Bzw der Code schon geschrieben ist .

        Gefällt mir

      2. Hallo Felix, du hast Recht, ein Button für den Farbwechsel ist bei mir noch auf der Liste. Bin bisher nicht dazu gekommen und erste schnelle Versuche waren nicht von Erfolg gekrönt. Muss ich mich noch mal dransetzen…😁
        Farbenspiel siehe auch mein Blog (https://arnes-elektronik.blogspot.de).
        Viele Grüße, Arne

        Gefällt mir

  5. Hi Matthias, das ist ein nettes Beispiel für einen Button.
    Den kann man bestimmt einbauen, das Problem wird eher sein, ob der Speicher im Arduino nano dafür auch noch reicht.
    Nehme ich auf meine Liste…
    Viele Grüße, Arne

    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: