Forum: Mikrocontroller und Digitale Elektronik Arduino Adafruit Neopixel Strip und Mikrofon


von Kerstin S. (eris5)


Lesenswert?

Hi @all,

habe einen Adafruit Neopixel Strip mit (nur noch) 58 LEDs und will nun, 
dass er zum Musiktakt (im Skript Beat) anfängt Leuchtprogramm zu 
starten.

Meine Bauteile:
- Arduino
- Neopixel Strip mit eigener Stromversorgung (5V)
- Soundsensor

Jetzt ist es so, dass der Strip durchläuft (mit der entsprechenden 
Verzögerung) und weiter nichts tut. Natürlich habe ich davor sehr viel 
gesucht, verschiedene Skripte getestet, aber bis jetzt will er nicht.

Heisst, mit Beispielprogrammen leuchtet er und wird scheinbar auch 
richtig angesprochen, aber das mit dem Mikro-Input...
1
#define NUMPIXELS 58
2
int led = 5;
3
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, led, NEO_GRB + NEO_KHZ800);
4
int delayval = 500;
5
int speaker = 7;
6
7
void setup()  {
8
 pinMode(led, OUTPUT);
9
 pixels.begin();
10
}
11
void loop() {
12
  int beat = digitalRead(speaker);
13
  for(int i=0;i<NUMPIXELS;i++){
14
    if(beat == 1){
15
      pixels.setPixelColor(i, pixels.Color(255,0,0)); // red
16
      pixels.show();
17
      delay(delayval);
18
      digitalWrite(led, HIGH);
19
    } else {
20
      pixels.setPixelColor(i, pixels.Color(0,0,255)); // blue
21
      pixels.show();
22
      delay(delayval);
23
      digitalWrite(led, LOW);    
24
    }
25
  }
26
}

Vielleicht hat hier noch jemand Interesse an sowas bzw. schon in Betrieb 
zum teilen.

Danke euch und LG,
Kerstin

von Philipp K. (philipp_k59)


Lesenswert?

Also wenn das richtig toll aussehen soll dann am besten mit nem MSGEQ7..

Welcher Soundsensor, welcher Arduino?

Habe da auch mal ein Projekt mit ESP8266 und Webinterface gebaut..
schau mal im Loop, ist garkein Hexenwerk:
https://github.com/schuppeste/Sofaleds/blob/master/sofaleds/sofaleds.ino

Zeile92: Equalizer auf und ab der einzelnen Bänder..
Zeile107: Lichtorgel/Blinken der einzelnen Bänder..


Demo-Video:
https://www.youtube.com/watch?v=mlMS-kUvTjY

von Kerstin S. (eris5)


Lesenswert?

Ist ein Arduino UNO, Iduino ST1146, der Strip ein RGB.

von Philipp_K59 (Gast)


Lesenswert?

Schau mal hier, das könnte in die Richtung gehen:

Beitrag "Audio Spektrum Analyzer mit ATtiny85"

von Kerstin S. (eris5)


Lesenswert?

Hallo zusammen und erstmal danke für die bisherigen Antworten.

Die Beispiele die ihr mir geschickt habt, sind schon die 
"Luxus"-Varianten.
So aufwendig will ich das gar nicht. Sondern so wie im Skript 
angedeutet, reicht mir die Digitalauswertung der Signale.

von Joachim B. (jar)


Lesenswert?

Frage:
was soll das delay(500); nach jeder der 58 LEDs?

da dauert ja ein Durchgang innerhalb der for Schleife schon 29s bis sich 
was ändert.

was soll das digitalWrite(led, HIGH); digitalWrite(led, LOW);?
Die Ausgabe macht doch pixels.show();
wenn du warten willst vor einer neue Anzeige doch dann nach der Ausgabe 
aller LEDs also einmal delay am Ende der for-Schleife nicht innerhalb 
der Schleife.

  for(int i=0;i<NUMPIXELS;i++){
    if(beat == 1){
      pixels.setPixelColor(i, pixels.Color(255,0,0)); // red
      pixels.show();
      delay(delayval);
      digitalWrite(led, HIGH);
    } else {
      pixels.setPixelColor(i, pixels.Color(0,0,255)); // blue
      pixels.show();
      delay(delayval);
      digitalWrite(led, LOW);
    }
  }

keine Lust das jetzt mal schnell zusammenzustecken, ist zu warm

statt int beat = digitalRead(speaker);

könntest du auch mal analogRead versuchen, auch mit Poti zum Einstellen.

von Kerstin S. (eris5)


Lesenswert?

Habe den Vorschlag mit delay und auch nochmal mit A5 und analog Read 
versucht, aber nach wie vor durchläuft er einmal die Schleife (also 
einmal rot, denn leuchtet der Strip weiter rot.

Zwischendurch auch nochmal Lib Fastled mit anderem Prog, leider auch 
nichts geworden.

Mal schauen vllt lässt sich heute noch was passendes finden. Hoffe doch.

von Philipp K. (philipp_k59)


Lesenswert?

Ich würde es zum testen so probieren:
1
#define NUMPIXELS 58
2
int led = 5;
3
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, led, NEO_GRB + NEO_KHZ800);
4
int delayval = 100;
5
int speaker = 7;
6
7
void setup()  {
8
 pinMode(led, OUTPUT);
9
 pixels.begin();
10
}
11
12
void loop() {
13
int temp =analogRead(speaker);
14
int beat =map(temp,0,1024,0,NUMPIXELS);
15
  for(int i=0;i<NUMPIXELS;i++){
16
    
17
    if(i<beat){
18
      pixels.setPixelColor(i, pixels.Color(255,0,0)); // red
19
         
20
      digitalWrite(led, HIGH);
21
    } else {
22
      pixels.setPixelColor(i, pixels.Color(0,0,255)); // blue
23
   
24
      digitalWrite(led, LOW);    
25
    }
26
  }
27
pixels.show();
28
delay(delayval);
29
30
}
EDIT: natürlich map zu 1024.

: Bearbeitet durch User
von Kerstin S. (eris5)


Lesenswert?

Habe das gleich mal probiert, aber der Strip leuchtet dann teils blau 
und rot, dann drei LEDs mehr blau, aber das wars dann.

von Philipp K. (philipp_k59)


Lesenswert?

Kerstin S. schrieb:
> Habe das gleich mal probiert, aber der Strip leuchtet dann teils blau
> und rot, dann drei LEDs mehr blau, aber das wars dann.

da gibt es ja auch zig Möglichkeiten die man selbst ausprobieren muss, 
da kann man nicht einfach was hochladen und das wars. Das wäre der 
Equalizer Effekt..

die 1024 kann man als sensitivität verkleinern.. oder so als Lichtorgel:
1
#define NUMPIXELS 58
2
int led = 5;
3
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, led, NEO_GRB + NEO_KHZ800);
4
int delayval = 100;
5
int speaker = 7;
6
int threshold=512;
7
void setup()  {
8
 pinMode(led, OUTPUT);
9
 pixels.begin();
10
}
11
12
void loop() {
13
int temp =analogRead(speaker);
14
//int beat =map(temp,0,1024,0,NUMPIXELS);
15
  for(int i=0;i<NUMPIXELS;i++){
16
    
17
    if(threshold>temp){
18
      pixels.setPixelColor(i, pixels.Color(255,0,0)); // red
19
         
20
      digitalWrite(led, HIGH);
21
    } else {
22
      pixels.setPixelColor(i, pixels.Color(0,0,255)); // blue
23
   
24
      digitalWrite(led, LOW);    
25
    }
26
  }
27
pixels.show();
28
delay(delayval);
29
30
}

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.