Neo-Pixel

Hallo,

ich wollte mein zimmer mit mehreren Arduinos automatisieren. Dazu gehören auch Ledstrips. Diese werden mit der Library "NeoPixel" angesteuert. Der Test sketch der Library funktioniert nicht so gut,da es ohne muster blink, allerdings brauche ich eh nur nur durchgängige farben. Und kein geblinke. Jetzt habe ich folgenden Code geschrieben:

#include <Adafruit_NeoPixel.h>
#define PIN 6

int incomingByte = 0;

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, 6, NEO_GRB + NEO_KHZ800);

void setup() {
  Serial.begin(9600);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  if(Serial.available() > 0)
  {
    
  incomingByte = Serial.read();
  Serial.println(incomingByte);
    if(incomingByte == 49){  
      
      for(int i=0; i<30; i++){
      Serial.println(i);
      strip.setPixelColor(i, 200,0,0);
      strip.show();
      delay(50);
      }  
    }
    if(incomingByte == 50){  
      
      for(int i=0; i<30; i++){
      strip.setPixelColor(i,0,255,0);
      strip.show();
      delay(100);
      }  
    }
    if(incomingByte == 51){  
      
      for(int i=0; i<30; i++){
      strip.setPixelColor(i,0,0,255);
      strip.show();
      delay(100);
      }  
    }
  }
}

Nach dem upload verändern dich die Farben schon aber nicht so wie ich will also nur jedes 5. oder so leuchtet in der richtigen Farbe. Das kabel zwischen led streifen und arduino ist etwa 5 Meter lang.
Also die frage: Wieso leuchtet der Streifen einfach nicht in einer durchgängigen farbe?

Und noch eine frage neben bei: Es wird mehrere arduinos geben also Ein master und mehrere Slaves. Jetzt ist die frage, da I2C nicht funktioniert da die Kabel anscheinend zu lang sind. Welcher bus ist geeignet für 4 meter lange Kabel und 2 Wege kommunikation also der Slave muss dem Master senden können und andersrum.

Vielen dank im vorraus,

Liebe grüße, Valli

5m ist zuviel für die Verbindung zwischen Arduino und der ersten Led!

Des weiteren machst machst du mit deinen Schleifen nur ein verzögertes Anschalten der Leds. Ich würde dir auch empfehlen auf die FastLed umzusteigen. Gibt hier einige Beispiele.

4m I2C ist zwar nicht optimal, sollte aber immer noch gehen! Das Problem kann an deinem verwendeten Kabel liegen. Bitte mehr Input dazu.

Ich bin mir nicht sicher, ob die I2C Libary Interrupt gesteuert ist. Zum einen blockiert die Libary deinen Kontroller gegenüber Interrupts, das andere ist, dass du sehr viele delays nutzt!

Schliesse die LEDs mal mit einem kurzen Kabel an und ueberpruefe, ob die Ansteuerung damit korrekt laeuft.

Mir ist kein einziger Vorteil bekannt, den die NeoPixel Lib gegenueber FastLED hat.

Wenn die Ansteuerung dann fehlerfrei funktioniert und es ein langes Kabel sein muss, geht geschirmtes mit verdrillten Adern - z.B. Cat6 Netzwerkkabel ganz gut.

Und noch ein Tip fuer lange Leitungen, weil ich mir gerade wieder die erste LED auf einer Matrix zerschossen habe: zwischen dem Ende des Datenkabels und vor der ersten LED noch einen Widerstand einbauen, irgendetwas zwischen 220 und 500 Ohm ist gut. Verbessert nebenbei auch die Signalqualitaet.

Gruesse

Helmuth

Hallo,

vielen dank für die Antworten. Ich habe das lange Kabel einfach mal abgeknipst und den Arduino direkt hingehängt. Dies hat aber auch nicht so gut geklappt :~ . Als kabel verwende ich ein 12 Adriges telefonkabel (6x2x0,7mm²) allerdings kann ich das kabel nicht nochmal neuverlegen. Ich habe mal auf den Strip geguckt als Controller verwendet er den "TM1829" da dieser aber in keiner Library verwendet wird habe ich "NeoPixel" Ausgewählt. "Fastled" funktioniert leider auch nicht. Das mit dem widerstand habe ich auch mal probiert hilft allerdings auch nicht. Vor ein paar wochen habe ich mal mit zwei arduino I2C über das lange kabel probiert allerdings hat es nicht geklappt.

Ich würde mich über jede antwort freuen :wink:

Valli

Hallo Valli,

bitte liefere detailierte Informationen!

Dazu gehört genauer Kabeltyp zu den Neopixeln, Kabeltyp I2C, Verdrahtung, ....

Telefonkabel ist mir in der Leiterquerschnittstärke nicht bekannt. Geschirmt oder ohne Schirm?
Wie sieht die Verkabelung an sich aus, wodrüber wird der Arduino gespeist, Leds einzelne Spannungsversorgung mit zusammengeführten Ground?

Möglichkeiten sind genügend da.

Ich habe mal auf den Strip geguckt als Controller verwendet er den "TM1829" da dieser aber in keiner Library verwendet wird habe ich "NeoPixel" Ausgewählt. "Fastled" funktioniert leider auch nicht.

Einfach auf gut Glueck irgendeinen Controller auswaehlen funktioniert natuerlich nicht. Jeder ist anders, hat eine eigene Sprache, ein eigenes Protokoll. Ein Neopixel ist z.B. konkret ein WS2812B und nix anderes.

Wenn ein Russe russisch zu einem Chinesen spricht wird das nix mit der Verstaendigung, egal wie deutlich er spricht und egal wie freundlich er ist.

Deine implizite Annahme, dass Adafruits Handelsname NeoPixel jeden seriell programmierbaren RGB LED Controller umfasst, ist nicht zutreffend.

Dein Problem sind momentan nicht die Kabel, sondern das richtige Protokoll fuer speziell diesen LED Controller.
Aber unabhaengig davon: Geschirmte Telefonkabel gehen grundsaetzlich ganz gut als Datenleitung.

Und im FastLED Wiki Chipset reference · FastLED/FastLED Wiki · GitHub steht zu diesem Chip:

TM1829 - similar to the TM1809/WS2811, but also allows setting 32 base current levels for brightness/power usage control - i have a set of these, but the code for them doesn't work yet

Also entweder warten, bis Daniel das Protokoll in FastLED implementiert hat oder andere Lib finden oder andere LEDs besorgen.

Gruesse

Helmuth

Hallo,

zurzeit ist der Arduino mit krokodilklemmen zu dem Stip verbunden. Das kabel besitzt einen schirm (eine art Alufolie) und ein unisolierten Draht. Das kabel hat einen Querschnitt von 0,6mm² .
Als ich zwei Arduino mit I2C über kurze Kabel miteinander verbunden habe und dann das Telefonkabel dazu gesteckt habe, obwohl die kurzen auch noch verbunden waren ist die verbindung zusammen gebrochen.

Das Netzteil für den Strip steckt im Arduino und "VCC" des strips ist mit "VIN" verbunden "GND" und "GND" des Strips sind im "GND" des Arduinos verbunden und "DA" in "PIN6".
Das die Library noch nicht für diesen Controller geeignet ist, ist sehr schade dann muss ich wohl noch warten :frowning:

Vielen Dank für die Antworten,

und Liebe Grüße, Valli