ARTNET Möglichkeiten (Led)

Halllo,

ich habe folgenden Aufbau :

  • Ethernet Shield w5100
  • Arduino UNO
  • Programm Arena 5

Mőchte damit Digitale LEDs steuern. Dies funktioniert auch.
Habe gelesen ,dass es auf den RAM, die Länge und Strom ankommt, wie viele Leds man auf einen Pin ansteuern kann.

Liege ich richtig das das Mega den meisten RAM besitzt ?

Wie viele Leds könnte man damit betrieben? Und wie sieht es aus wenn man zwischen den Leds eine gewisse Kabelänge hat ( zb. 60leds->2mKabel->60leds-> 2mkabel usw.) . Mit dem Datapin 5V kann ich mir nicht viel vorstellen.

Besteht die Möglichkeit mehrere Datenpins zu deklarieren um die Menge der LEDs zu erhöhen oder brauche ich dann mehrere Bords ?

Wegen der Spannungsquelle würde ich mich danach richten wie viele Leds ich Max. betrieben kann.

Und noch eine letzte Frage: wie sieht es aus wenn ich noch ein Dmx Shield einbaue und neben den Leds noch andere Dmx Geräte betreibe? Dauert das dann zu llange?

Danke schon mal für die Interesse.

Gruß Peter

Poste mal Links zu deinen Leds und dem Sketch.
Du solltest an einen Pin max. eine Led direkt anschließen.
Für mehrer verwendest du einen Transistor.
Oder du verwendest Led-Stripes mit eigenem Controller. Z.B. ws8212 o.ä.
Dagehen dann auch mehr Leds an einem Pin, auch 60.
Dann brauchst du aber auch ein kräftiges Netzteil.
Zum DMX shield kann ich nichts sagen.

Du verheimlichst wichtige Infos: Welche LEDs willst Du verwenden?

Normale LED bei 20mA 10 Stück
LEDs mit Kontroller hängt dann vom RAM und der gewünschten Bildwiederhilfrequenz bei gegebener max oder verwendeter Datenübertraggeschwindigkeit ab und vom Netzteil.

Grüße Uwe

Hallo Peter,
alle meine folgenden Angaben ohne Ethernet Shield w5100 und Arena 5 und DMX!

Peter_A4600:
Mőchte damit Digitale LEDs steuern. Dies funktioniert auch.

Dann hast Du schon welche, welche?

Peter_A4600:
Liege ich richtig das das Mega den meisten RAM besitzt ?

Ich habe einen teensy 3.2 mit 300 Lichtpunkten (RGB+IC) auf 5 m im Einsatz. APA102 an SPI. Maximal nötiger Strom 300 x 0,06A = 18 A, wegen "gedimmter" Helligkeit nur mit einem 4 A Netzteil versorgt. Die Bibliothek FastLED unterstützt die Strombegrenzung.

Peter_A4600:
Wie viele Leds könnte man damit betrieben? Und wie sieht es aus wenn man zwischen den Leds eine gewisse Kabelänge hat ( zb. 60leds->2mKabel->60leds-> 2mkabel usw.) . Mit dem Datapin 5V kann ich mir nicht viel vorstellen.

R, G und B brauchen je ein Byte, also ein Lichtpunkt drei Bytes Minimum. Dann kommt es auf die Animation an, ob weiterer Speicher notwendig ist. Faustregel: Der Anfänger braucht mehr Speicher, also ein x-faches des Minimums!

"Kabellänge" und WS2812 sind keine Freunde, nimm besser APA102 mit Datenpin und Taktpin getrennt, mit 5V und GND also vier Anschlüsse. WS2812 sendet mit fester Frequenz und ein Datenpaket darf nicht unterbrochen werden, blockiert also den Arduino. Andere zeitkritische Anwendungen werden das nicht mögen. Ein Konzept mit getrennter Hardware könnte tatsächlich sinnvoll sein, auch mit APA102: Der Animations-Arduino holt sich als I2C-Master Informationen vom Ethernet-Arduino als I2C-Slave, wenn es in die Animation zeitlich paßt.

Würde wahrscheinlich die WS2801 verwenden.
Hierder Sketch:

#include <Artnet.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SPI.h>
#include <Adafruit_NeoPixel.h>

// Neopixel Einstellungen
const int numLeds = 10; // Test mit 10 Stück 
const int numberOfChannels = numLeds * 3; // 1 led = 3 channels
const byte dataPin = 2; // Ausgabe PIN
Adafruit_NeoPixel leds = Adafruit_NeoPixel(numLeds, dataPin, NEO_GRB + NEO_KHZ800);

// Artnet Einstellungen
Artnet artnet;
const int startUniverse = 1; // CHANGE FOR YOUR SETUP most software this is 1, some software send out artnet first universe as 0.

// Check if we got all universes
const int maxUniverses = numberOfChannels / 512 + ((numberOfChannels % 512) ? 1 : 0);
bool universesReceived[maxUniverses];
bool sendFrame = 1;
int previousDataLength = 0;

// Change ip and mac address for your setup
byte ip[] = {192, 168, 1, 179}; 
byte mac[] = {0x04, 0xE9, 0xE5, 0x00, 0x69, 0xEC};

void setup()
{
  //Serial.begin(115200);
  artnet.begin(mac, ip);
  leds.begin();
  initTest();
  // this will be called for each packet received
  artnet.setArtDmxCallback(onDmxFrame);
}
void loop()
{
  // we call the read function inside the loop
  artnet.read();
}
void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data)
{
  sendFrame = 1;
  // set brightness of the whole strip 
  if (universe == 15)
  {
    leds.setBrightness(data[0]);
    leds.show();
  }

  // Store which universe has got in
  if ((universe - startUniverse) < maxUniverses)
    universesReceived[universe - startUniverse] = 1;

  for (int i = 0 ; i < maxUniverses ; i++)
  {
    if (universesReceived[i] == 0)
    {
      //Serial.println("Broke");
      sendFrame = 0;
      break;
    }
  }

  // read universe and put into the right part of the display buffer
  for (int i = 0; i < length / 3; i++)
  {
    int led = i + (universe - startUniverse) * (previousDataLength / 3);
    if (led < numLeds)
      leds.setPixelColor(led, data[i * 3], data[i * 3 + 1], data[i * 3 + 2]);
  }
  previousDataLength = length;     
  
  if (sendFrame)
  {
    leds.show();
    // Reset universeReceived to 0
    memset(universesReceived, 0, maxUniverses);
  }
}

void initTest()
{
  for (int i = 0 ; i < numLeds ; i++)
    leds.setPixelColor(i, 127, 0, 0);
  leds.show();
  delay(500);
  for (int i = 0 ; i < numLeds ; i++)
    leds.setPixelColor(i, 0, 127, 0);
  leds.show();
  delay(500);
  for (int i = 0 ; i < numLeds ; i++)
    leds.setPixelColor(i, 0, 0, 127);
  leds.show();
  delay(500);
  for (int i = 0 ; i < numLeds ; i++)
    leds.setPixelColor(i, 0, 0, 0);
  leds.show();
}

Zuerst wollte ich wissen wie viele Leds ich betreiben kann ohne große Verluste in der Übertragung zu haben. Danach würde ich mir ein entsprechend großes Netzteil besorgen.

Gruß Peter

Hallo agmue,

zu deinen Fragen noch. Welche das bei dem Test waren kann ich nicht genau sagen. Es waren welche von einem Kumpel (10Stück). Zumindestens befindet sich der Controller in der SMD drin.

Kann ich mit den APA102 meinen Sketch verwenden bzw. was müsste daran geändert werden?

Mit WS2801 habe ich keine praktische Erfahrung. Auf einem Bild sehe ich DI und CI, also Daten und Takt getrennt.

Dein Kumpel hat wohl WS2812.

Peter_A4600:
Kann ich mit den APA102 meinen Sketch verwenden bzw. was müsste daran geändert werden?

Nur die Initialisierung Adafruit_NeoPixel(numLeds, dataPin, NEO_GRB + NEO_KHZ800); und Du benötigst einen zweiten Pin am Arduino.

Initialisierung APA102:

Adafruit_DotStar strip = Adafruit_DotStar(NUMPIXELS, DATAPIN, CLOCKPIN, DOTSTAR_BGR);

Als Bibliothek könnte Dir auch FastLED gefallen.

Artnet und Ethernet benötigen Speicher für die Kommunikation. Den größten Teil des Rests kannst Du für die LEDs verbrauchen, da die Animation außerhalb des Arduino berechnet wird.