INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Thema geschlossen 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Unterwasserbeleuchtung mit WS2812
28.05.2016, 09:15 (Dieser Beitrag wurde zuletzt bearbeitet: 28.05.2016 10:15 von Digit_AL.)
Beitrag #1
Unterwasserbeleuchtung mit WS2812
unterwasser? ja, gartenbrunnenbeleuchtung.Cool
dazu ein paar frage von mir als laie:
  1. per arduino oder fertigem "led player"? selber proggen wäre fexibler und ruhmreicher erfordert aber längere einarbeitung und lohnt nur wenn man eh öfter ein µC projekt machen möchte (?)
  2. ich würde led-stripes nehmen und die passend zuschneiden müssen da nur vier einzelne streifen passen würden. geht das dann noch mit dem player bzw. wie initialisieren sich die einzelnen led´s?
  3. wasserdicht: ich würde u-profile als gehäuse/form verwenden und die mit transparentem gießharz abdichten. schonmal jemand so etwas gemacht?



edit: die initialisierung der led´s erfolgt automatisch nach dem einschalten indem die einzelnen leds jeweils daten an die nächste senden bis zur letzten in der reihe (?)
Alle Beiträge dieses Benutzers finden
28.05.2016, 10:15
Beitrag #2
RE: Unterwasserbeleuchtung mit WS2812
zu 3:
Stripes in IP67-Ausführung (oder höher)
z.B.: http://www.aliexpress.com/item/1m-4m-5m-...8feb7125a3
oder
http://www.aliexpress.com/item/1m-4m-WS2...7751c56ad6

bitte inbedingt weitere notwendige Schutzmaßnahmen beachten -> Wasser und Strom
28.05.2016, 10:20
Beitrag #3
RE: Unterwasserbeleuchtung mit WS2812
yep. sollte aber schutzart 68 haben da dauerhaft unterwasser (?).
ausserdem muss ich die stripes teilen zwecks anpassung an das wasserbecken.
mehr oder weniger dichte cluster habe ich auch schon gefunden. stripes sind aber zweckmäßiger.

offen gefragt: gibt es scetches zum "mal testen"? oh, google weis alles:
http://www.mathias-wilhelm.de/arduino/be...d-es-bunt/
hmm, mit A könnte ich das alles noch in der hardware erweitern, mit einem player nicht.
Alle Beiträge dieses Benutzers finden
28.05.2016, 10:28
Beitrag #4
RE: Unterwasserbeleuchtung mit WS2812
(28.05.2016 10:20)Digit_AL schrieb:  yep. sollte aber schutzart 68 haben da dauerhaft unterwasser (?).
ausserdem muss ich die stripes teilen zwecks anpassung an das wasserbecken.
mehr oder weniger dichte cluster habe ich auch schon gefunden. stripes sind aber zweckmäßiger.

offen gefragt: gibt es scetches zum "mal testen"? oh, google weis alles:
http://www.mathias-wilhelm.de/arduino/be...d-es-bunt/
hmm, mit A könnte ich das alles noch in der hardware erweitern, mit einem player nicht.

wenn Du es mit einem Arduino ansteuerst, wird Dir hier sicherlich weitergeholfen.
Bei anderen Varianten (fertiger Player) bist Du im falschen Forum Wink

und noch die üblichen Wünsche: eigener Sketch, Schaltplan und Prg.-Flußdiagramm hier zeigen
28.05.2016, 14:45 (Dieser Beitrag wurde zuletzt bearbeitet: 28.05.2016 14:47 von Bitklopfer.)
Beitrag #5
RE: Unterwasserbeleuchtung mit WS2812
Hi,
also das hier ist mein Testprogramm mit dem ich ein paar solcher LED's angesteuert habe. Wenn du dich damit auseinandersetzt und dir das anpassen tust dann biste auf der Gewinnerstraße...
Code:
// This is a demonstration on how to use an input device to trigger changes on your neo pixels.
// You should wire a momentary push button to connect from ground to a digital IO pin.  When you
// press the button it will change to a new pixel animation.  Note that you need to press the
// button once to start the first animation!

#include <Adafruit_NeoPixel.h>

#define BUTTON_PIN   2    // Digital IO pin connected to the button.  This will be
                          // driven with a pull-up resistor so the switch should
                          // pull the pin to ground momentarily.  On a high -> low
                          // transition the button press logic will execute.

#define PIXEL_PIN    11    // Digital IO pin connected to the NeoPixels.

#define PIXEL_COUNT 20
#define maxbright 50   // maximale Helligkeit
#define minbright 10  // halbe Helligkeit


// Parameter 1 = number of pixels in strip,  neopixel stick has 8
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_RGB     Pixels are wired for RGB bitstream
//   NEO_GRB     Pixels are wired for GRB bitstream, correct for neopixel stick
//   NEO_KHZ400  400 KHz bitstream (e.g. FLORA pixels)
//   NEO_KHZ800  800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stick
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

bool oldState = HIGH;
bool newState;
int showType = 0;
int oldshowType = 0;
int i;


long int ec; // EventCounter
byte rt;   // Rot
byte gn;   // Gruen
byte bl;   // Blau

byte rtd = 1;   // Rot Countdirection 1 = Up, 0 = Down
byte gnd = 1;   // Gruen
byte bld = 1;   // Blau

int rtic = 0;  // Rot Intervalcountregister
int gnic = 0;  // Gruen Intervalcountregister
int blic = 0;  // Blau Intervalcountregister

//##############################  Farbintervalle
//int rti = 3;  // Rot Intervalregister
//int gni = 5;  // Gruen Intervalregister
//int bli = 7;  // Blau Intervalregister

//int rti = 3;  // Rot Intervalregister
//int gni = 10;  // Gruen Intervalregister
//int bli = 32;  // Blau Intervalregister

int rti = 33;  // Rot Intervalregister
int gni = 22;  // Gruen Intervalregister
int bli = 11;  // Blau Intervalregister

void setup() {
  pinMode(4, OUTPUT);  // Ausgabe Mode an LED 4 bis 7
  pinMode(5, OUTPUT);  // Ausgabe Mode an LED 4 bis 7
  pinMode(6, OUTPUT);  // Ausgabe Mode an LED 4 bis 7
  pinMode(7, OUTPUT);  // Ausgabe Mode an LED 4 bis 7
  pinMode(10, OUTPUT);  // Ausgabe Mode Aktiv LED 10
  
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
  Serial.begin(9600);
}

void loop() {
  
  // Get current button state.
  newState = digitalRead(BUTTON_PIN);

  // Check if state changed from high to low (button press).
  if (newState == LOW && oldState == HIGH) {
    // Short delay to debounce button.
    delay(20);
    // Check if button is still low after debounce.
    newState = digitalRead(BUTTON_PIN);
    if (newState == LOW) {
      showType++;
//      if (showType > 7)
//        showType=0;
        
        
     // startShow(showType);
    }
  }
  oldState = newState;

if(showType != oldshowType){
                           Serial.println(showType);  
                           oldshowType = showType;
                           }

  if(showType != 0){   // wenn Show gestartet dann
       startShow(showType);
       showType++;
      if (showType > 5)
        showType=0;
  }
  if(showType == 0){   // wenn Show gestartet dann
       startShow(showType);
  }
  // Set the last button state to the old state.
}

void startShow(int i) {
  switch(i){
    case 0: colorWipe(strip.Color( 0, 0, 0), 0);    // Black/off
            //colorWipe(strip.Color(2, 15, 4), 0);    // Gruenblau
            break;
    case 1: colorWipe(strip.Color(maxbright, 0, 0), 0);  // Red
            delay(2000);
            break;
    case 2: colorWipe(strip.Color(0, maxbright, 0), 0);  // Green
            delay(2000);
            break;
    case 3: colorWipe(strip.Color(0, 0, maxbright), 0);  // Blue
            delay(2000);
            break;
    case 4:
//            for(i = 0; i <= 100; i++){
//            colorWipe(strip.Color(maxbright, 0, 0), 0);  // Red
//            delay(100);
//            colorWipe(strip.Color(maxbright, maxbright, 0), 0);  // Green
//            delay(100);
//            colorWipe(strip.Color(0, maxbright, 0), 0);  // Blue
//            delay(100);    
//            colorWipe(strip.Color( 0, maxbright, maxbright), 0);  // Red
//            delay(100);
//            colorWipe(strip.Color(0, 0, maxbright), 0);  // Green
//            delay(100);
//            colorWipe(strip.Color(maxbright, 0, maxbright), 0);  // Blue
//            delay(100);    
//            }
            break;
    case 5:
            ec = 0;
            
            while(ec <= 50000){
              // #########################  Rot
              if(rtd == 1){
              if(rtic != rti)rtic++;
              else{
                rtic = 0;  // intervalcounter 0 setzen
              if(rt == maxbright)rtd = 0;  // wenn max erreicht wieder runterzaehlen
                else rt++;
              }  

            }
            else{                     // rtd = 0 also Downcounting
              if(rtic != rti)rtic++;
              else{
                rtic = 0;  // intervalcounter 0 setzen
              if(rt == 0)rtd = 1;  // wenn max erreicht wieder runterzaehlen
                else rt--;
              }  
              
              
            }  
            
              // #########################  Gruen
              if(gnd == 1){
              if(gnic != gni)gnic++;
              else{
                gnic = 0;  // intervalcounter 0 setzen
              if(gn == maxbright)gnd = 0;  // wenn max erreicht wieder runterzaehlen
                else gn++;
              }  

            }
            else{                     // gnd = 0 also Downcounting
              if(gnic != gni)gnic++;
              else{
                gnic = 0;  // intervalcounter 0 setzen
              if(gn == 0)gnd = 1;  // wenn max erreicht wieder runterzaehlen
                else gn--;
              }  
              
              // #########################  Blau              
            }  
              if(bld == 1){
              if(blic != bli)blic++;
              else{
                blic = 0;  // intervalcounter 0 setzen
              if(bl == maxbright)bld = 0;  // wenn max erreicht wieder runterzaehlen
                else bl++;
              }  

            }
            else{                     // bld = 0 also Downcounting
              if(blic != bli)blic++;
              else{
                blic = 0;  // intervalcounter 0 setzen
              if(bl == 0)bld = 1;  // wenn max erreicht wieder runterzaehlen
                else bl--;
              }  
              
              
            }  


            
            
              
            colorWipe(strip.Color(rt, gn, bl), 0);  // Farbe ausgeben
            ec++;   // Eventcounter +1
            Serial.print(rt);
            Serial.print("   ");
            Serial.print(gn);
            Serial.print("   ");
            Serial.print(bl);
            Serial.print("   ");
            Serial.println(ec);
            
            }
            
            //theaterChase(strip.Color(maxbright2,   0,   0), 250); // Red
            break;
    case 6: theaterChase(strip.Color(  0,   0, maxbright), 250); // Blue
            break;
    case 7: rainbow(2000);
            break;
    case 8: rainbowCycle(200);
            break;
    case 9: theaterChaseRainbow(500);
            break;
  }
}

// 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(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

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

  for(j=0; j<56; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & maxbright));
    }
    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(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & maxbright));
    }
    strip.show();
    delay(wait);
  }
}

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

      delay(wait);

      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(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(); i=i+3) {
        strip.setPixelColor(i+q, Wheel( (i+j) % maxbright));    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(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 = maxbright - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(maxbright - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, maxbright - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, maxbright - WheelPos * 3, 0);
}
Die Lib mußte dir halt bei Adafruit oder Github holen.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
28.05.2016, 19:14
Beitrag #6
RE: Unterwasserbeleuchtung mit WS2812
wie lange braucht man denn so bis man sowas halbwegs selbst schreiben kann? leider habe ich noch zu viele andere freizeitbeschäftigungen.... Wink
vor ewigen zeiten auch mal erfolgreich eine hardwaresteuerung in basic programmiert, waren auch hunderte programmzeilen, mal schaun ob ich das hier auch schaffe.
auf jeden fall lasse ich mir zeit.
ein uno und paar meter stripe sind peanutz und schnell bestellt.
Alle Beiträge dieses Benutzers finden
28.05.2016, 19:45
Beitrag #7
RE: Unterwasserbeleuchtung mit WS2812
(28.05.2016 19:14)Digit_AL schrieb:  wie lange braucht man denn so bis man sowas halbwegs selbst schreiben kann? leider habe ich noch zu viele andere freizeitbeschäftigungen.... Wink
vor ewigen zeiten auch mal erfolgreich eine hardwaresteuerung in basic programmiert, waren auch hunderte programmzeilen, mal schaun ob ich das hier auch schaffe.
auf jeden fall lasse ich mir zeit.
ein uno und paar meter stripe sind peanutz und schnell bestellt.

...nun ich habe eben die Beispiele wo bei der Lib im Umkreis sind einfach ein bischen abgeändert...hat dann nur ein paar Stunden gedauert bis ich damit zurecht kam.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
29.05.2016, 11:31
Beitrag #8
RE: Unterwasserbeleuchtung mit WS2812
software installiert, neodingsbumslibary installiert, examples gefunden. theoretisch könnte ich es jetzt schon mal leuchten lassen oder? Big Grin
Alle Beiträge dieses Benutzers finden
Thema geschlossen 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste