ESPWortuhr / Multilayout-ESP-Wordclock

Software for an ESP8266 based word clock with support of different layouts and languages
85 stars 45 forks source link

Große Wortuhr #211

Open Yrrah1960 opened 1 year ago

Yrrah1960 commented 1 year ago

Hallo zusammen, erstmal vielen Dank für das tolle Wortuhr-Projekt. Ich baue auch gerade eine Wortuhr im Format 1 x 1 m. Für die Beleuchtung der einzelnen Buchstuben (außer den Minuten) verwende ich 2 LED´s (Matrix [DE10x11.nero.hpp]). Ich habe mich mal daran versucht die Matrix abzuändern. Das Anzeigen der Uhrzeit klappt, aber alle anderen Funktionen nicht. Da reichen meine Programmierkenntnisse noch nicht aus. Bisher habe ich die Software von "panbachi" verwendet, die aber leider nicht diese Funktionsvielfalt hat. Bei panbachi ist die Eingabe der Leistung des Netzteiles möglich und dadurch wird die maximal zulässige Helligkeit der LED´s gesteuert. Vielleicht eine Anregung für eine neue Programmerweiterung.

Könnt ihr mir weiterhelfen?

Gruß

dbambus commented 1 year ago

Hallo @Yrrah1960,

ja sehr cool, eine große Uhr ist auch noch auf meiner Bucketliste :-). Wenn du fertig bist kannst du ja mal paar Bilder zeigen.

ich hätte es wahrscheinlich so implementiert, dass ich zwei Stripes parallel verlege und die beiden DI Pins des Stripes parallel am Node anschließe. Ist aber nicht getestet, vielleicht klappt es ja. Nun zu deinem Problem.

Ich bin grad am umbauen des Backends innerhalb der Uhr, um tatsächlich genau solche Problemstellungen einfach zu triggern, evtl auch über das Webinterface, aber deswegen kann ich grade nur bedingt helfen, weil ich die neue Struktur schon im kopf habe.

Vielleicht wäre einfacher Workaround in der Led.hpp die folgende Funktion:

void Led::setPixel(uint8_t rr, uint8_t gg, uint8_t bb, uint8_t ww, uint16_t i) {

    if (G.Colortype == Grbw) {
        strip_RGBW->SetPixelColor(i, RgbwColor(rr, gg, bb, ww));
    } else {
        strip_RGB->SetPixelColor(i, RgbColor(rr, gg, bb));
    }
}

so abzuändern:

void Led::setPixel(uint8_t rr, uint8_t gg, uint8_t bb, uint8_t ww, uint16_t i) {

    if (i < 110) {
    i *= 2;
         if (G.Colortype == Grbw) {
            strip_RGBW->SetPixelColor(i, RgbwColor(rr, gg, bb, ww));
            strip_RGBW->SetPixelColor(i+1, RgbwColor(rr, gg, bb, ww));
         } else {
             strip_RGB->SetPixelColor(i, RgbColor(rr, gg, bb));
             strip_RGB->SetPixelColor(i+1, RgbColor(rr, gg, bb));
         }
    }
    else
    {
    i *= 2;
        if (G.Colortype == Grbw) {
             strip_RGBW->SetPixelColor(i, RgbwColor(rr, gg, bb, ww));
        } else {
            strip_RGB->SetPixelColor(i, RgbColor(rr, gg, bb));
        }
    }
}

Man müsste dann allerdings auch noch die numPixel in der UhrTypeDef, also der DE10x11Nero.hpp, auf die neue Gesamtzahl and LEDs (inclusive Minuten) anpassen.

Yrrah1960 commented 1 year ago

image

Die Uhr 1x1 ist schon fertig. Da ich auch schon eine in 50 x 50 cm gebaut und deine Software aufgespielt habe möchte ich auch gerne den Leistungsumfang für die große Uhr. Ich versuche mich mal an deinem Vorschlag.

echo1483 commented 1 year ago

Hallo Yrrah1960, woraus besteht dein Buchstaben-Layout. Für einen Freund habe ich auch eine große Uhr gefertigt 850x850 mm. Das Layout wird in Stahlblech gelasert. Das Problem mit den LED´s habe ich gelöst indem ich LED-Streifen 30 pro Meter verwende und jede 2. ausgelötet habe. War eine doofe Arbeit, weil ja noch die Brücken einlötet werden musste. LG echo

dbambus commented 1 year ago

@Yrrah1960

Das sieht ja richtig stark aus. :-) Wie hat denn mein Vorschlag geklappt?

@echo1483

Ich arbeite für genau diesen Fall an der Software. Ich habe hier vor eine 400x400mm Wordclock zu bauen und will dafür 74 LED/m Stripes verwenden, davon aber nur jede zweite in Benutzung. Dafür will ich eine Softwarelösung entwickeln, die auch mit allen Funktionen kooperiert.

Mit freundlichen Grüßen David

echo1483 commented 1 year ago

Ist schon echt groß, wenn die Uhr fertig ist stelle ich mal ein Foto ein. LG echo 1678516292753 1678516292758 1678516292761

Yrrah1960 commented 1 year ago

Hallo zusammen,

meine Blende besteht auch aus einer Stahlplatte, die ich mit Salz/Essigwasser eingesprüht habe, damit sich eine Rostschicht bildet. Beim Innenleben der Uhr habe ich eine einfache Lösung gewählt. Platte / Leisten aus dem Baumarkt und einen Rahmen gebaut. Danach noch das Raster aus dem 3D-Drucker.... Innen Dadurch bin ich mit meiner Anzahl an LEDs (30/m) bei 2 Stück pro Buchstaben gelandet.

Das mit dem anpassen der Software hat noch nicht geklappt. Habe die vorgeschlagene Änderung vorgenommen und noch in der DE10x11nero die LEDs die zusätzlich leuchten sollen eingefügt.

Heute widme ich meinem anderen Hobby VeloSolex

Gruß und ein schönes Wochenende

echo1483 commented 1 year ago

So die Metallplatte ist schon mal angepasst. Word01 Word02

dbambus commented 1 year ago

@echo1483

Wo hast du denn die Metallplatte machen lassen ? Ich hätte auch an so etwas Interesse :-)

echo1483 commented 1 year ago

Kann ich dir gar nicht sagen, die Metallplatte hat der Arbeitskollege meines Sohnes im Auftrag gegeben. Er ist gerade im Urlaub werde aber mal fragen. Ist schon irre wie sauber das Teil gelasert wurde. LG

Yrrah1960 commented 1 year ago

@dbambus Komme ohne deine Hilfe nicht weiter. Wo ist dem im Programmcode die Anzahl der LEDs versteckt, bzw. wo wird die Anzahl berechnet aus Zeilen und Spalten?

Gruß aus der Pfalz

dbambus commented 1 year ago

@echo1483

ich hätte noch immer Interesse an Esoterik einer Stahlplatte :-) Falls sich da was ergibt, wäre es cool.

Wenn du planst einen neunen Nachbau der Uhr zu machen habe ich etwas cooles in der Software implementiert. Man kann nämlich angeben, dass jeded zweite LED übersprungen werden soll :-)

@Yrrah1960

Ich werde noch an einer Version arbeiten die auch zwei LEDs pro Buchstabe unterstützt.

Mit freundlichen Grüßen David

echo1483 commented 1 year ago

@dbambus Ich denke das war eine einmalige Aktion, trotzdem wäre es super wenn man selbst die LED-Streifen anpassen könnte. Das auslöten und die Brücken einfügen macht schon viel arbeit. Für das lasern hat er mit Material 1mm Stahlblech etwa 50,00€ und das Pulverbeschichten noch einmal 50,00€ bezahlt. Es war kein Freundschaftsdienst.

LG echo1483

Yrrah1960 commented 9 months ago

@dbambus Erstmal vielen Dank, dass du an der Software weiterarbeitest. Ich verfolge interessiert alle Neuerungen. Arbeitest du noch an einer Version, die 2 LED´s pro Buchstabe unterstützt?

Ein schönes Wochenende

dbambus commented 9 months ago

Hallo @Yrrah1960,

Ich habe in der kürzlich veröffentlichten Version implementiert, dass jede zweite LED aufleuchten kann. Außerdem wollte ich versuchen, zwei LEDs pro Buchstabe zu realisieren. Das habe ich probiert, aber aus undokumentierten Gründen hat es damals nicht funktioniert und ich habe es mangels Priorität sein lassen.

Zu ändern wäre diese Passage in der Uhrtype.hpp:

virtual const uint16_t getFrontMatrixIndex(const uint8_t row, uint8_t col) {

        uint8_t newColsWordMatrix = colsWordMatrix();
        uint16_t numPixelsWordMatrix = rowsWordMatrix() * colsWordMatrix();

        if (G.buildTypeDef == BuildTypeDef::DoubleResM1) {
            newColsWordMatrix = 2 * colsWordMatrix() - 1;
            numPixelsWordMatrix = rowsWordMatrix() * newColsWordMatrix;
            col *= 2;
        }
        if (row % 2 != 0) {
            col = newColsWordMatrix - col - 1;
        }
        uint16_t returnValue = col + (row * newColsWordMatrix);

        if (returnValue > numPixelsWordMatrix) {
            Serial.println(
                "[ERROR] getFrontMatrixIndex() returnValue out of Bounds");
        }

        return returnValue;
    };

Hier müsste man noch einen Wert BuildTypeDef::DoubleRes mit entsprechender Logik hinzufügen.

Mal sehen, vielleicht komme ich noch dazu.

Mit freundlichen Grüßen David