Treppenbeleuchtung, unterschiedlich breite Stufen

nein. 1700 mit einem UNO geht nicht. mein Fehler. es braucht mindestens 8kB RAM.
Wemos D1 mini wäre dann passend. Es ist 4x schneller und hat 32kB RAM

Hier, guck selbst:

#include <FastLED.h>
FASTLED_USING_NAMESPACE

#define DATA1_PIN    4
#define DATA2_PIN    5
#define LED_TYPE    WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS1    1000
#define NUM_LEDS2    700
CRGB leds1[NUM_LEDS1];
CRGB leds2[NUM_LEDS2];

#define BRIGHTNESS          96
#define FRAMES_PER_SECOND  120
uint8_t gHue = 0; // rotating "base color" used by many of the patterns

void setup() {
  delay(3000); // 3 second delay for recovery

  FastLED.addLeds<LED_TYPE, DATA1_PIN, COLOR_ORDER>(leds1, NUM_LEDS1).setCorrection(TypicalLEDStrip);
  FastLED.addLeds<LED_TYPE, DATA2_PIN, COLOR_ORDER>(leds2, NUM_LEDS2).setCorrection(TypicalLEDStrip);

  FastLED.setBrightness(BRIGHTNESS);
  FastLED.setBrightness(BRIGHTNESS);
}


void loop() {
  fill_solid( leds1, NUM_LEDS1, CHSV (gHue, 255, BRIGHTNESS));
  fill_solid( leds2, NUM_LEDS2, CHSV (gHue, 255, BRIGHTNESS));
  FastLED.show();
  FastLED.delay(1000 / FRAMES_PER_SECOND);
  EVERY_N_MILLISECONDS( 20) gHue++;  // slowly cycle the "base color" through the rainbow
}

das hier? :
https://www.amazon.de/ARCELI-ESP8266-Entwicklungsboard-kompatibel-UNO-Programm/dp/B07J2QKNHB/ref=sr_1_2?__mk_de_DE=ÅMÅŽÕÑ&crid=2PL18JJPXX1NL&keywords=Wemos+D1&qid=1651061003&s=books&sprefix=wemos+d1%2Cstripbooks%2C179&sr=1-2-catcorr

Auch 1000 bis 1200 übersteigen bei weitem die beim UNO vorhandene RAM-Menge. etwas zwischen 400 und 500 wäre realistischer. Die reale max Möglichkeit hängt vom Speicherverbrauch des Sketches ab.

Jedes Pisel braucht 3 Byte, darum sind 1700 Pixel schon 5100 Byte RAM. Ein MEGA könnte gehen aber auch nicht.

Grüße Uwe

Hallo Uwe, wie ist das mit dem Timing bei WS2812, gibt es da nicht auch eine Obergrenze von ca. 1000 Pixeln?

Ich plädiere anstelle ESP8266 für einen ESP32, weil der die WS2812 per DMA mit Daten versorgen soll.

Mal eine kleine Demo für drei Stufen, getestet mit WS2815 und UNO:

#include <Adafruit_NeoPixel.h>
#define PIN        8
#define NUMPIXELS 35
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

const uint16_t erstesPixel[] = {0, 10, 25, NUMPIXELS}; // vier Werte, drei Stufen
uint32_t jetzt;

void setup() {
  pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
  pixels.show();   // Send the updated pixel colors to the hardware.
}

void loop() {
  jetzt = millis();
  static byte schritt = 0;

  switch (schritt)
  {
    case 0:
      if (treppe(0, 0xFF0000)) schritt++;
      break;
    case 1:
      if (treppe(1, 0x00FF00)) schritt++;
      break;
    case 2:
      if (treppe(2, 0x0000FF)) schritt++;
      break;
    case 3:
      pixels.clear();
      pixels.show();
      schritt = 0;
      break;
  }
}

bool treppe( byte stufe, uint32_t farbe)
{
  static uint32_t vorhin = 0;
  const uint32_t intervall = 100;
  static uint16_t pixel = 0;
  bool fertig = false;

  if (jetzt - vorhin >= intervall)
  {
    vorhin = jetzt;
    pixels.setPixelColor(erstesPixel[stufe] + pixel, farbe);
    pixels.setPixelColor(erstesPixel[stufe + 1] - pixel - 1, farbe);
    pixels.show();
    if ( pixel < ((erstesPixel[stufe + 1] - erstesPixel[stufe]) / 2) )
    {
      pixel++;
    }
    else
    {
      pixel = 0;
      fertig = true;
    }
  }
  return fertig;
}

Im Feld erstesPixel[] werden die unterschiedlich breiten Stufen repräsentiert, die dann von der Funktion treppe() rechnerisch verarbeitet werden. Die Animation muß also nur einmal programmiert werden und kann dann für jede Stufe benutzt werden.

Danke!
habe gerade den Controller bestellt.
Melde mich sobald ich es probiert habe.

Nein, da gibt es keine Obergrenze.
Die Obergrenze liegt in der Zeit die es braucht die Daten zu versenden. Man will ja die Daten in einer gewissen Zeit übertragen um mehrere Bilder nacheinander darstellen zu können oder eine Fläche mit neuen Daten zu füllen.

Jedes Pixel leitet nicht die Daten einfach durch sondern erzeugt sie wieder neu, sodaß kein Qualitätsverlust des Signals passiert.

Im Datemblatt werden 1024 Pixel genannt aber um eine Bildwiederholfrequenz von 30 fps zu garantieren:
"When the refresh rate is 30fps, cascade number are not less than1024 points"

Der Bus funktioniert mit 800kHz also 1,25µS für ein Bit. Wenn wir jetzt eine Bildwiederholfrequenz von 30 Hz wollen ( weil da das Bildflimmern bei bewegten Animationen nicht mehr auffällt) haben wir:
102438*1,25µS = 30720µS also 30,7mS. Das kann man ca 30 mal in der Sekunde neue Daten senden.

Grüße Uwe

1 Like

Ach, nur die Refresh-Rate. Danke!

@neuewelt: Dann weißt Du jetzt, was "langsam" bedeutet. Da die 800 kHz fix sind, nützt auch ein schnellerer µC nichts. Dann kannst Du den µC auch am Kopf oder Fuß der Treppe positionieren.

Die Notwendigkeit des größeren Speichers bleibt aber davon unberührt.

Andere LED Controller haben ein anderes Interface.
zB der WS2801 https://cdn-shop.adafruit.com/datasheets/WS2801.pdf
Dieser hat ein Clock und ein Datensignal und der Clock kann bis zu 25MHz sein.
Da geht das Datenübertragen über 30 mal schneller.
Als Nachteil ist halt daß man 2 Signalleitungen hat und nicht nur 2. Ein Verdrehten macht 1/4 mehr Aufwand.
Grüße Uwe

WS2812 ist technisch die schlechteste Wahl. Aber dem, der die Streifen schon verlegt hat, möchte ich das eigentlich nicht mehr schreiben :shushing_face:

für die Zukunft, was wäre den besser geeignet?

  • WS2815 nutzt 12 V und in Reihe(!) geschaltete LEDs, damit maximal 10 mA (gemessen) je Pixel gegenüber 60 mA bei WS2812. Das Timing ist gleich. Wenn ich die 12 V runterdrehe bis auf 8 V, sehe ich keine Farbveränderung.

  • WS2801 (auch APA102, Takt und Daten an zwei Pins) nutzen einen variablen Takt und erreichen damit deutlich höhere Frameraten. Vom Strom wie WS2812.

Ideal wäre die Vermischung beider Typen, die konnte ich aber noch nicht finden :roll_eyes:

Für eine Treppenbeleuchtung mit einfacher Animation würde ich wegen der einfacheren Stromversorgung zu WS2815 raten.

Benötigt man Interrupts oder eine höhere Framerate, muß man halt dicke Leitungen so wie Du verlegen.

Bezüglich Kabeldurchmesser:
Man kann auch 24V Netzteil nehmen und jeder Stufe einen DC/DC Wandler auf 5V spendieren. So kann man zwischen Netzteil und Stufen dünnere Kabel verwenden bzw der Spannungsabfall zwischen den Stufen ist inexistent. Jeder Streifen wird mit 5V versorgt unabhängig vom Spannungsabfall entlang der 24V Verteilung. Es bleibt der Spannungsabfall entlang eines Streifens.
Diese Konfiguration ist aber nur bei geeignetem Raum neben oder unterhalb der Stiege realisierbar. Die Spannungswandler müssen vor den Putzanfällen des Raumpflegers ( hier spare ich mir bewußt das gendern :innocent: ) sicher verbaut sein.

Grüße Uwe

So, der Controller ist da aber lässt sich nicht mit dem Rechner verbinden.
für gewöhnlich kommt ja beim Anschließen von irgendwas ein ton von windows oder man sieht es im Geräte Manger, hier passiert nichts.
habe auch schon den cp210 treiber installiert, nichts.

beim Controller leuchtet nur eine LED rot, ist er vlt kaputt?

Ich kann nicht auf Deinen Schreibtisch schauen, welcher?

Ich hatte schon mal kaputte ESP32 von AZ-Delivery, da standen ein paar Bauteile chaotisch auf der Platine, konnte man also sehen. Der Umtausch war erfolgreich.

ESP32S von AZ-Delivery
Wie gesagt der Rechner Reagiert nicht auf den.
Bauteile sehen ordentlich verlötet aus.
werde wohl einen weiteren bestellen

Link zum Controller oder Foto des Controller würden da helfen.
Es gibt nicht nur einen ESP32S.

Das sieht mir nicht nach einem CP210 Treiber, sondern nach einem CH340/341 aus. da solltest du mal den richtigen USB-Treiber installieren.
Steht übrigens auch in der Beschreibung zum Artikel.