Ws2812 Musik reactive led

Hallo verehrte Nerd, Geeks und möchtegerns (so wie ich
Ich versuche einen Sound gesteuerten led strip zu bauen hat soweit auch geklappt. Jedoch habe ich das mikro ganz an der Box liegen und bekomme bei echt extremer Lautstärke vielleicht 40 Leds ans leuchten. Steh ich aber mitten im Raum und rufe einmal laut buhhh schlägt der Streifen fast voll aus.
Ich habe einige Videos gesehen in denen manch einer das mikro mitten auf dem Tisch hat und trotzdem alles wunderbar angesteuert wird.

Vielleicht kann mir ja jemand erklären woran das liegt

Balouubear:
Hallo verehrte Nerd, Geeks und möchtegerns (so wie ich

Ja.....und, ach ja, selber Hallo.

Balouubear:
Vielleicht kann mir ja jemand erklären woran das liegt

Du verwendest die falschen Teile, oder hast alles falsch angeschlossen oder was weiß ich ?

Leider darf ich bedingt durch den Datenschutz (DSGVO) meine Glaskugel nicht mehr einsetzen.

Balouubear:
Vielleicht kann mir ja jemand erklären woran das liegt

Du hast wohl irgendwo zwei Werte/Variablen vertauscht. Welche das sind, könnte ich wenigstens raten, wenn ich den Sketch sehen würde. Poste ihn am besten.

Gruß

Gregor

#include <Adafruit_NeoPixel.h>
#ifdef AVR
#include <avr/power.h>
#endif

int outputValue=0;
int rememberOutputValue;
int randNumber;
int counter = 0;
int loopCounter = 0;

#define PIN 6

#define NUMPIXELS 60

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
// put your setup code here, to run once:
pixels.begin();
randomSeed(analogRead(0));
Serial.begin(9600);
}

// 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 pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3,0);
}
if(WheelPos < 170) {
WheelPos -= 85;
return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3,0);
}
WheelPos -= 170;
return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0,0);
}

void loop() {
// put your main code here, to run repeatedly

// read the analog in value 100 times and count high levels
int sensorValue;
counter = 0;

for (int i=0; i < 100; i++)
{
sensorValue = analogRead(A0);
if(sensorValue > 250) counter++;
}

if(map(counter, 0, 60, 0, 24) > outputValue)outputValue = map(counter, 0, 40, 0, 24);
else if(loopCounter %2 == 0)outputValue-=1;

if(outputValue < 0) outputValue = 0;
if(outputValue > 60) outputValue = 60;

if(loopCounter % 60 == 0)randNumber = random(255);
loopCounter++;

// clear all LEDs
for(int i=0;i < NUMPIXELS;i++){

// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor(i, pixels.Color(0,0,0, 255));

}

if(rememberOutputValue != outputValue)
{
for(int i=60;i > (60-outputValue) || (outputValue == 60 && i == 0);i--){
pixels.setPixelColor(i, Wheel((randNumber) & 255));
}

pixels.show(); // This sends the updated pixel color to the hardware
}
rememberOutputValue = outputValue;
}

Und was ist mit dem Rest ?
Welche Teile verwendest du ?
Poste Hyperlinks dazu.

Ach und dein Sketch ist schlecht lesbar, setze den bitte in Code-Tags, nicht in Quote-Tags.

das ist mein Board

das der sound detector.

ich denke einen link für die Kabel benötigst du nicht oder??

hier nochmal der sketch

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif



int outputValue=0;
int rememberOutputValue;
int randNumber;
int counter = 0;
int loopCounter = 0;

#define PIN            6

#define NUMPIXELS      60

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  // put your setup code here, to run once:
  pixels.begin();
  randomSeed(analogRead(0));
  Serial.begin(9600);
}



// 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 pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3,0);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3,0);
  }
  WheelPos -= 170;
  return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0,0);
}


void loop() {
  // put your main code here, to run repeatedly

    // read the analog in value 100 times and count high levels
   int sensorValue; 
   counter = 0;
   
   for (int i=0; i < 100; i++)
  {
    sensorValue = analogRead(A0);
    if(sensorValue > 250) counter++;
   }
  
  
  if(map(counter, 0, 60, 0, 24) > outputValue)outputValue = map(counter, 0, 40, 0, 24);
  else if(loopCounter %2 == 0)outputValue-=1;
  
  if(outputValue < 0) outputValue = 0;
  if(outputValue > 60) outputValue = 60;

 
  if(loopCounter % 60 == 0)randNumber = random(255);
  loopCounter++;

  // clear all LEDs
 for(int i=0;i < NUMPIXELS;i++){

    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(0,0,0, 255)); 
    
  }

 if(rememberOutputValue != outputValue)
{    
  for(int i=60;i > (60-outputValue) || (outputValue == 60 && i == 0);i--){
  pixels.setPixelColor(i, Wheel((randNumber) & 255));
}
  
   pixels.show(); // This sends the updated pixel color to the hardware
}   
   rememberOutputValue = outputValue;
}

Auf die Schnelle finde ich die Zeile

 if(map(counter, 0, 60, 0, 24) > outputValue)outputValue = map(counter, 0, 40, 0, 24);

ziemlich seltsam. Bist Du sicher, dass Du die richtig abgetippt hast?

Gruß

Gregor

Hab gar nix getippt hab einfach nur den Sketch runtergeladen und so genutzt wie er war.

Alles gut soweit, Kabel sind erst mal nicht nötig.

Hast du mal die Verstärkung mit dem Poti verändert ?
Wenn das nicht reicht, ist dein Modul nicht empfindlich genug für bestimmte Frequenzen.

Ich habe mit so einem Teil auch mal längere Zeit experimentiert und es dann weg gelegt.
Das ist einfach nicht für derartige Funktionen geeignet bzw. eben zu unempfindlich, also unbrauchbar.

Na klar am Poti hab ich gedreht wie gesagt komisch finde ich halt das es wenn es an einer Box direkt anliegt so ca 40 Leds von 60 anspringen aber nur wenn es wirklich am besten direkt auf dem Membran liegt.
Steh ich aber mitten im Raum und rufe Richtung Mikrofon etwas bekomme ich mal locker den selben Ausschlag obwohl ich ja dann 3 bis 4 Meter entfernt bin. Das verstehe ich halt nicht.

Balouubear:
Hab gar nix getippt hab einfach nur den Sketch runtergeladen und so genutzt wie er war.

Huh, das ist ja quasi copy+paste. Dann kann's ja nicht funktionieren.

Nur ein Schuss ins Blaue: Vertausche mal die letzten beiden Zahlen in der Zeile, also 0 und 24.

Gruß

Gregor

Hallo,

das Poti ist für den digitale Ausgang als trigger Level gedacht. Der analoge Ausgang hängt direkt an dem Mic. Da kommt nicht viel raus.

Heinz

Balouubear:
Na klar am Poti hab ich gedreht wie gesagt komisch finde ich halt das es wenn es an einer Box direkt anliegt so ca 40 Leds von 60 anspringen aber nur wenn es wirklich am besten direkt auf dem Membran liegt.
Steh ich aber mitten im Raum und rufe Richtung Mikrofon etwas bekomme ich mal locker den selben Ausschlag obwohl ich ja dann 3 bis 4 Meter entfernt bin. Das verstehe ich halt nicht.

Das zeigt, das der Verstärker vermutlich schon in der Begrenzung arbeitet. Ist halt eine einfache Schaltung.
Da kannst du nur etwas mit einem Oszi rausfinden.

Anscheinend reagiert das ganze Ding nur auf tiefe Töne. Die Frage ist bekommt man das irgendwie im Code eingestellt das er die hohen Töne einfängt

Balouubear:
Anscheinend reagiert das ganze Ding nur auf tiefe Töne. Die Frage ist bekommt man das irgendwie im Code eingestellt das er die hohen Töne einfängt

Nein, da das Mikrofon schon als Filter wirkt.
Da musst du dir ein besseres Mikrofon suchen.