Glowboard Farbproblem

Hallo Zusammen,

ich habe ein Glowboard für meine Tochter nachgebaut (NeoPixel LED's, 30 Stück, 15 Pro Seite) und habe ein Sketch verwendet welches ich auf einer anderen Seite gefunden habe.

Habe die Anzahl der LED's angepasst, das Ganze läuft, aber es wir leider nur Rot ausgegeben.
Kann mir jemand helfen, und mir sagen, was da falsch ist, werde nicht schlau.

Danke und Gruß,
Yassi

GlowBoard.ino (4.75 KB)

Ich kann deine Datei im Tablet nicht öffnen, bitte poste diese hier in Code-Tags (Schaltfläche </>).

Sorry...

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>

#define PIN 6

/*
GLOWBOARD CODE

Achtung! Du musst die Anzahl der LEDs anpassen. Bei mir waren es 68. Ändere die Variable ledsGesamt.
*/

int ledsGesamt = 30;



// 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(ledsGesamt, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

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

void loop() {
  // Some example procedures showing how to display to the pixels:
  colorWipe(strip.Color(255, 0, 0), 30); // Red
  colorWipe(strip.Color(0, 255, 0), 30); // Green
  colorWipe(strip.Color(0, 0, 255), 30); // Blue
  // Send a theater pixel chase in...
  theaterChase(strip.Color(127, 127, 127), 50); // White
  /*theaterChase(strip.Color(127,   0,   0), 50); // Red
  theaterChase(strip.Color(  0,   0, 127), 50); // Blue*/

/*  rainbow(10);*/
  rainbowCycle(5);
  theaterChaseRainbow(40);
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels()/2; i++) {
      strip.setPixelColor(i, c);
      strip.setPixelColor(strip.numPixels()-i, c);      
      strip.show();
      delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels()/2; i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
      strip.setPixelColor(strip.numPixels()-i, Wheel((i+j) & 255));      
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels()/2; i++) {
      strip.setPixelColor(strip.numPixels()/2-i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
      strip.setPixelColor(strip.numPixels()/2+i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));      
    }
    strip.show();
    delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<40; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels()/2; i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
        strip.setPixelColor(strip.numPixels()-(i+q), c);    //turn every third pixel on        
      }
      strip.show();
     
      delay(wait);
     
      for (int i=0; i < strip.numPixels()/2; i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
        strip.setPixelColor(strip.numPixels()-(i+q), 0);        //turn every third pixel off        
      }
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
        for (int i=0; i < strip.numPixels()/2; i=i+3) {
          strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
          strip.setPixelColor(strip.numPixels()-(i+q), Wheel( (i+j) % 255));    //turn every third pixel on          
        }
        strip.show();
       
        delay(wait);
       
        for (int i=0; i < strip.numPixels()/2; i=i+3) {
          strip.setPixelColor(i+q, 0);        //turn every third pixel off
          strip.setPixelColor(strip.numPixels()-(i+q), 0);        //turn every third pixel off          
        }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else if(WheelPos < 170) {
    WheelPos -= 85;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
}

Kenne die Funktionen der neopixel Lib nicht.

Aber ich gehe mal davon aus, die Funktion macht nichts anderes
colorWipe(strip.Color(0, 255, 0), 30); // Green
als alle Leds zu beschreiben. Wobei es sich hier nur um das Speicherabild hier handelt! strip.show() muss danach erfolgen.

  colorWipe(strip.Color(255, 0, 0), 30); // Red
delay(1000);
strip.show();
  colorWipe(strip.Color(0, 255, 0), 30); // Green
delay(1000);
strip.show();
  colorWipe(strip.Color(0, 0, 255), 30); // Blue
delay(1000);
strip.show();

Die Funktionen solltest du grundlegend überdenken. Das blockiert.

ys67:
Kann mir jemand helfen, und mir sagen, was da falsch ist, werde nicht schlau.

Kannst Du mal einen Schaltplan zeigen:

  • Stromversorgung für die RGB LEDs?
  • Stromversorgung für das Arduino-Board?

Von Deinen LEDs kann ja jede Farbe bis zu 20mA ziehen, also jede einzelne LED mit drei Farben maximal 60mA.

Macht bei 30 LEDs = 30* 60mA = 1800 mA = 1,8 Ampere.

Wo kommen diese "bis zu 1,8 Ampere" denn her, die von Deiner Schaltung gebraucht werden?

jurs:
Kannst Du mal einen Schaltplan zeigen:

  • Stromversorgung für die RGB LEDs?
  • Stromversorgung für das Arduino-Board?

Von Deinen LEDs kann ja jede Farbe bis zu 20mA ziehen, also jede einzelne LED mit drei Farben maximal 60mA.

Macht bei 30 LEDs = 30* 60mA = 1800 mA = 1,8 Ampere.

Wo kommen diese "bis zu 1,8 Ampere" denn her, die von Deiner Schaltung gebraucht werden?

Also, den Schaltplan habe ich aus der Make 5/2015.
Den müsste ich mal rauskopieren.

Auf jeden Fall ist folgende Belegung:

  • Pin 6 Arduino ---> 470 Ohm Widerstand ---> Digital Eingang LED-Strip
  • GND + 5V Arduino ---> 1000uF Elko --->GND + 5V LED-Strip.
  • USB Anschluß Arduino ---> 5V/2100mA Powerbank

Es sind zwei LED-Stripes mit jeweils 15 LED, 1m also insgesamt.

Ich habe das Sketch heruntergeladen (weil er modifiziert war für 2 Stripes). Es handelt sich um das Beispiel "Strandtest" aus der NeoPixel Library von Adafruit.

Yassi

ys67:

  • 5V Arduino ---> + 5V LED-Strip.

Das mit der Stromentnahme am 5V Pin des Arduino-Boards kannst Du bei 30 voll befeuerten RGB LEDs vergessen.

Soviel Strom gibt Dein 5V Pin am Arduino niemals her.

Falsche Schaltung mit völlig mangelhafter Stromversorgung für 30 RGB LEDs, wenn Du diese im oberen Helligkeitsbereich ansteuern möchtest.

Teste vielleicht mal mit dieser loop()-Funktion im unteren Helligkeitsbereich:

void loop() {
  // Some example procedures showing how to display to the pixels:
  colorWipe(strip.Color(63, 0, 0), 30); // Red
  colorWipe(strip.Color(0, 63, 0), 30); // Green
  colorWipe(strip.Color(0, 0, 63), 30); // Blue
  colorWipe(strip.Color(0, 0, 0), 30); // Off
}

Leuchten dann die Pixel nacheinander rot, grün und blau?

jurs:
Das mit der Stromentnahme am 5V Pin des Arduino-Boards kannst Du bei 30 voll befeuerten RGB LEDs vergessen.

Soviel Strom gibt Dein 5V Pin am Arduino niemals her.

Falsche Schaltung mit völlig mangelhafter Stromversorgung für 30 RGB LEDs, wenn Du diese im oberen Helligkeitsbereich ansteuern möchtest.

Teste vielleicht mal mit dieser loop()-Funktion im unteren Helligkeitsbereich:

void loop() {

// Some example procedures showing how to display to the pixels:
  colorWipe(strip.Color(63, 0, 0), 30); // Red
  colorWipe(strip.Color(0, 63, 0), 30); // Green
  colorWipe(strip.Color(0, 0, 63), 30); // Blue
  colorWipe(strip.Color(0, 0, 0), 30); // Off
}




Leuchten dann die Pixel nacheinander rot, grün und blau?

Na super.

Ich habe das getestet, die leuchten immer nur rot.

ys67:
Ich habe das getestet, die leuchten immer nur rot.

Um was für ein Arduino-Board handelt es sich? UNO R3, oder was?

jurs:
Um was für ein Arduino-Board handelt es sich? UNO R3, oder was?

Ja, ein UNO R3 Clone.

Das ist die Schaltung

Ich fände jetzt auch eine Stromversorgung direkt von der Powerbank sympathischer.

Hallo jurs, kenne die Lib von NeoPixel kaum, aber ich würde sagen, da gehört ein delay zwischen den einzelnen "colorWipes" da ansonsten nichts erkennbar ist, bzw. vermutlich muss auch noch der Befehl abgesetzt werden, dass die Leds auch beschrieben werden. Die Neopixel können aufgrund des Timings nicht einfach nach und nach beschrieben werden, sondern müssen sehr schnell an einem Stück übermittelt werden. Verzögerungen einer µS können schnell mal als "Reset" genommen werden, was dem Stripe sagt, dass nun als Werte in die PWM Register geschrieben werden.

Meine Tochter betreibt das Folgende als Shisha-Beleuchtung.
Bei mir hängen die Leds direkt am Spannungsregler, zusammen mit dem Pro Mini.
Steuerung über IR-Fernbedienung. Gehäuse fehlt auch etwas :wink:

sschultewolter:
Hallo jurs, kenne die Lib von NeoPixel kaum, aber ich würde sagen, da gehört ein delay zwischen den einzelnen "colorWipes" da ansonsten nichts erkennbar ist, bzw. vermutlich muss auch noch der Befehl abgesetzt werden, dass die Leds auch beschrieben werden.

Die Funktion void colorWipe(uint32_t c, uint8_t wait), die Teil des Sketches ist, hat ein strip.show(); und ein delay(wait); eingebaut.

Der Sketch läuft auf einem teensy 3.2 mit zehn LEDs ohne Probleme.

Es sollte sich also um ein Stromversorgungs- oder Verkabelungsproblem handeln. :wink:

Ich schau jetzt mal, was eine Shisha-Beleuchtung ist. Gehört das nicht zu stonies Thema Projektvorstellung? :slight_smile:

Was eine Shishabeleuchtung ist, ist mir sehr wohl bekannt :wink: Hatte mir so ein Teil mal komplett gebaut, inkl. Elektroverdampfer. War auf dauer nicht das ware und inzwischen nichts mehr mit am Hut.

sschultewolter:
Was eine Shishabeleuchtung ist, ist mir sehr wohl bekannt :wink:

Ach, eine Wasserpfeife! Sowas habe ich schon mal im Schaufenster gesehen. Dann wollen wir mal hoffen, die Tochter ist alt genug 8) Dieses Forum ist ja arg bildend :wink:

Sollte ja keine Projektvorstellung sein, sondern nur eine vergleichbare Implementation.
(Accupack, Arduino, WS2812Bs in ordentlicher Anzahl, aber mit allen Farben ;)).

Meine jüngste Tochter (die Shisha Liebhaberin) ist 17.
Die rösten da Melasse (so eine nikotinfreie Matsche) mit glühenden Kohlen, brrrrrrrrr. Nix für mich.

Die Beleuchtung wäre mir auch viel zu hell, das tut in den Augen weh wenn man reinschaut.

Whandall:
Das ist die Schaltung

Ich fände jetzt auch eine Stromversorgung direkt von der Powerbank sympathischer.

Danke, warst scheller, das ist der Schaltplan.

agmue:
Die Funktion void colorWipe(uint32_t c, uint8_t wait), die Teil des Sketches ist, hat ein strip.show(); und ein delay(wait); eingebaut.

Der Sketch läuft auf einem teensy 3.2 mit zehn LEDs ohne Probleme.

Es sollte sich also um ein Stromversorgungs- oder Verkabelungsproblem handeln. :wink:

Ich schau jetzt mal, was eine Shisha-Beleuchtung ist. Gehört das nicht zu stonies Thema Projektvorstellung? :slight_smile:

Hmmm, wenn's bei dir läuft (nun gut, nur 10 LED's).
Wie gesagt, bei mir läuft's auch, aber nur in rot.
Ich müsste mal ein kleines Video hochladen, da sieht's man. Da siehst man aber auch, dass eine LED sich ganz komisch verhält.

Deiner Meinung nach, soll ich die ganze verkabelung auseinander nehmen und nochmals verkabeln?

Meine Aussage ist nur, der Sketch tut, was er soll, da ist der Fehler nicht verborgen. Ob 10 oder 30 ist nicht wichtig.

ys67:
Danke, warst scheller, das ist der Schaltplan.

Der Schaltplan ist falsch, das wurde bereits gesagt, der Arduino kann die LEDs nicht mit Strom versorgen! 30 x 60 mA = 1,8 A ist weit außerhalb der Spezifikation! Das mußt Du als erstes korrigieren.

Die LEDs brauchen recht genau 5 V, also mal nachmessen, was die Powerbank liefert.

Und dann da suchen, wo man den Fehler garantiert nicht sucht. Meinen letzten IC-Rauch hat ein Kabelbruch in einem neuen Steckbrettkabel verursacht. :slight_smile:

PS.: In rainbowCycle scheint ein Fehler zu sein, die erste LED wird nicht angesprochen. Es müßte wohl
strip.setPixelColor(strip.numPixels()/2-i-1, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
heißen. Die anderen Demos funktionieren aber.