Led's im Takt der Musik blinken lassen

Hallo, ein schönes Wochenende.

LED's ansteuern, ESP32, Arduino, Sound to Light, DMX usw. sind für mich alles neue Begriffe.
Da aber Vinyl, Musik der 70er und 80er Jahre wieder angesagt ist, soll auch wieder eine Lichtorgel her.

Ich möchte als Lichtorgelersatz aus einem WS2812 Fünf Meter Strip zwei Lichtpanele (links und rechts für Stereo) mit je 16 Streifen zu je 16 LED`s zusammenbauen und diese ansteuern.
Die 16 Streifen sollen in 4 Gruppen zb Rot für Tiefton, Blau für unterer Mittelton, Grün für hoher Mittelton und Gelb für Hochton unterteilt werden.

Je nachdem, welche Frequenzen im Lied wiedergegeben werden, so sollen die dementsprechenden Lichtgruppen leuchten.
Natürlich soll so wie früher bei einer Lichtorgel die Farbgruppe heller leuchten, wenn der Ton im jeweiligen Frequenzband lauter ist, und weniger hell leuchten, wenn der Ton leiser ist.
Daß das aufleuchten im Takt der Musik geschehen soll, ist klar.

Als Umschaltprogramm wäre eine Spektrumanzeige wünschenswert, wo je nach Tonhöhe der Musik, die Balkenanzeige mehr oder weniger hoch angezeigt wird. So wie es in vielen Audioprogrammen angezeigt wird.

Ich habe verschiedene Geräte getestet, wobei ich keine Geräte finden konnte, die so wie früher an einen LineOut-Ausgang vom Mischpult angeschlossen werden können.
Alle Lichteffektgeräte funktionieren nur mehr mit Mikrofon, wo natürlich Publikumsgeräusche die Lichteffekte verändern. Außerdem ist ein blinken der Lampen für links und Rechts (Stereo) nicht möglich.
Ich konnte zwar ein Gerät mit LineIn-Eingang unter verschiedenen Herstellernamen finden, jedoch funktionierten 3 von 3 Testgeräten nicht.

Daher habe ich mich nach Softwarelösungen und Bastellösungen umgesehen. DMX-Control und Freestyler sind sicher gute Programme, können viel mehr als ich benötige, machen aber nicht das, was ich will.
Über das WWW habe ich LEDFX, WLED und Arduino gefunden.
Leider habe ich jedoch kein Programm, bzw. keine Einstellung gefunden, wie ich meine gewünschten Lichteffekte erreichen kann.
Nun möchte ich über zwei ESP32 oder Arduino Uno (Links und rechts für Stereo) die 256 LED's wie oben beschrieben, über den Line-Out-Ausgang vom Mischpult ansteuern.
Ich hoffe, hier die Problemlösung zu erhalten.

Danke im voraus

"Coole" Idee, "cooles project".

Bevor Du das selbst programmierst - check doch mal "Nanoleaf":
Nanoleaf with audio

Das sind OLED (panels), die auch auf Sound reagieren (und noch vieles mehr).

Ansonsten, zu Deinem Projekt - ich breche das mal runter: was zu tun waere, was gebraucht wuerde, Fragen...:

Audio In to MCU
Hast Du ein MCU Board, das irgenwie das Audio bekommen kann?
Ein MIC dran? Ein Line-In? Irgendein anderes Audio interface, damit the MCU analog audio (in digitaler Form) "sehen" kann (SPDIF/TOSLINK, USB, ...)?
Wenn nicht - kannst Du ein externes Modul (ADC, SPDIF) anbinden?

Task 1: das Audio Signal von analog als digital audio (PCM) in MCU bekommen (auch Speicherbedarf, Performance, ... dafuer beachten)

Volume Level oder Spektrum?
Das einfachste, wenn Du Audio in MCU hast: LEDs in Abhaengingkeit von Lautstaerke (Volume) schalten. Das ist "einfach" nur: die Pegel im PCM Signal (liegen z.B. als 16bit Amplituden-Werte vor) "checken": je nachdem welcher Level - LEDs ansteuern.

Wenn Du nun aber auch noch das Spektrum (Frequenzen) nutzen willst - dann musst Du eine FFT machen (Fast Fourier Transformation).
Moeglich, aber "hoehere Mathematik" (und Du solltest eine FPU (Floating Point Unit) in HW haben an der MCU, e.g. auch ARM DSP Library benutzt werden kann).

Task 2: entscheiden, ob Volume Level oder mit Spektrum Analyse (und wie programmieren, welche Erfahrung mit FFT, FPU, ARM DSP ...?)

Ansteuern der LEDs
Es gibt dieses SWI (Single Wire Interface): ein Draht mit Impulsen drauf: das steuert eine bestimmte LED in der Kette (diese Weihnachts-LED, LED-Strips) an, auch dessen Farbe.

Task 3: wie die LEDs in einer LED-Kette (Stripes) ansteuern? SWI?
(das sollte die einfachste Task/Aufgabe sein, kann ganz ohne Audio getested werden)

Also, aufbrechen in "Building Blocks":

  1. Audio in MCU bekommen (komplizierter Teil)
  2. Audio Analyze machen (Volume - OK, Spektrum - sehr kompliziert!)
  3. LEDs ansteuern (OK, auch ganz ohne Audio moeglich)
  4. Bedienung (z.B. Einstellen der Empfindlichkeit, Level, Spektrum) - OK, "nur Arbeit, das zu implementieren und dazu zu packen"), z.B. ueber LCD/Touch, UART, Buttons, ...

Ich werfe mal den MSGEQ7 in den Raum.

Einen für den linken und einen für den rechten Kanal

"Cooler" Einwurf: ein "cooles Teil" (danke von mir als nicht der OP - aber das Ding ist es wert, mal von mir in die Hand genommen zu werden).

Ein kurzer Blick ueber das Datenblatt (an OP gerichtet):

  • es macht fast alles (zumindes mit dem Audio)
  • es hat verschiedene Audio-Frequenz-Kanaele, um von jedem Frequenz-Bereich den "Peak" mitzuteilen

Was mir "auffaellt":

  • der Chip laeuft an 5V (nicht 3V3) - ok (vielleicht ist MCU auch 5V, oder man muss das DC-Signal an 5V-tolerant Input bringen, macht 3.5 bis 4V out)
  • der DC-Out ist ein "getaktetes" Signal: man muss das Strobe (neben dem CLKIN) generieren und bekommt eine Pulse-codierte Folge (welche Frequenz nun ein Peak hatte, als 0 oder 1 - genau was OP machen will), sollte einfach sein.
  • tss ist 72 micro-sec: man muss also mit 13.888KHz ... abtasten: das sollte noch OK sein als GPIO Input an CPU (speed)

Offene Fragen fuer mich waeren:

  • wie gross ist Pegel am Audio In? (e.g. 2Vrms) NEIN: es scheint: 100mVpp (der hat internen Gain): OK, ein "Voltage Divier" kann den Job machen am Eingang
  • man kann nicht die Peak Values programmieren: aber wann schalten die?
    Und vorallem: haben die ein "Watermark" (merken sich letzten peak und neuer peak nur wenn noch groesser geworden, wenn feste Werte, wie sind die)?
    Vielleicht muss man den Chip alle Nasen-lang reset-en, um die Watermarks zu "clearen"

Scheint ein guter, brauchbarer Chip zu sein fuer die Anwendung.
Vielen Dank fuer den Post (und neue Inspiration fuer meine Audio-Projekte).

Ich hatte damit vor Jahren mal gespielt. Ging relativ einfach, sogar als Arduino Neuling.

Es gibt dafür einige Tutorials und Bibliothek. Ich hatte mir damals ein Mikrofon Signal verstärkt genutzt, mit einem MAX9814.

Wenn meine Erinnerung nicht nicht trübt, gibt es Schaltungen für unverstärkte Audio Signale.

Nur sollte man sie nicht in China billig bestellen. Da gibt es viele, die nicht ordentlich Funktionieren. 5 von 10 waren bei mir Ausschuss. Aber Erfahrung von damals, vor ca. 5 Jahren.

Ich könnte später mal wühlen, was ich noch finde.

Dan werfe ich einfache Sache in Raum 3 x LM3915 3x RC Filter = tief mitte, hoch
Den 3915 hat man in den 80gen benutzt als Vol anzeige hat Ausgang für 10 LED (die LED bleiben an) geschickte Auswahl der Ausgänge steuert ein Mega, Mega steuert RGB Stripe :wink:
Somit haben wir einfachen Spektrum Analyser, ich wurde das programmieren mit Monster if Orgie ; ) geht aber einfacher. :rofl:
Habe gerade gesehen es gibt fertige Platine aber ohne Filter nur als vol anzeige

Vorerst einmal Danke für die Teilnahme an der Diskussion.
Zur Antwort von tjaekel
Ich vermute, daß mit MCU Board so etwas wie Arduino Uno oder ESP32 gemeint ist.
Ich habe mir, um testen zu können, vorerst einmal ein 3er Pack ESP32 gekauft.

Habe im WWW auf der WLED-Seite einen Beitrag gefunden, wo ich das Audiosignal wahlweise mittels Micro oder über einen Widerstand vom Line-Out des Mischpultes in den ESP32 schicken kann.

Die Anzeigeideen habe ich von fix programmierten Fertiglösungen.
Für meine Zwecke soll das Musiksignal in eine optische Lampenanzeige (LED's) umgewandelt werden.
Was liegt daher näher, als die Wellenformanzeige eines Audioabspielprogramms als Vorlage zu nehmen?
Variante 2 wäre eben statt einer Kurve die Balkenanzeige.
Da die Anzeigen nichts anderes als Programme sind, die wahlweise aufgerufen werden können, sollte auch ein Effekt her, der so nah als möglich an eine alte Lichtorgel herankommt.
Früher gab es diese Lichtorgeln mit 3 oder 4 Lampen je Säule, da einmal 4 Lampen für den linken und einmal 4 Lampen für den rechten Stereokanal verwendet wurden.
Umgeändert auf die neue LED-Technik würde ich z.B. eine LED -Matrix mit 16 LED-Streifen (oder 15 LED-Streifen) verwenden,
wobei diese 16 Streifen in 4 Gruppen zu je 4 Streifen (oder 5 Streifen) unterteilt würden. 1 Streifengruppe LED ersetzt eine Lampe einer alten Lichtorgel.
So wie eben früher beim Baßton die rote Lampe und z. B. beim Hochton die gelbe Lampe geleuchtet hat, so soll nun in der neuen LED-Technik die LED-Streifengruppe für den Tiefton in z.B. Rot und beim Hochton die LED-Streifengruppe in Gelb leuchten.

Da diese Funktionen auch in sogenannten billigen Geräten (aber mittels Mikro und Smartphone-App) vorhanden ist, sollte dies theoretisch auch mittels Hard- und Software im Eigenbau möglich sein.

An Programmiererfahrung habe ich Cobol, Basic, Clipper, HTML und Office-Makroprogrammierung.
Den Unterschied zwischen Blockklemme und löten und zwischen Widerstand und Kondensator kenne ich auch.

Hallo Plumps
Habe das Datenblatt von MSGEQ7 mal überflogen.
In Englisch hatte ich die Note 4. Was ich trotzdem herausgelesen habe, splittet dieses Teil das Audiosignal in 7 Teile auf.
Ob dieser Lichtorgelersatz die Lampen in 3, 4 oder eben 7 Gruppen aufteilt, wäre eigentlich egal.
Die Hauptsche ist, daß je nach Musikfrequenz die LED's für den jeweiligen Frequenzbereich so lange aufleuten, so lange der Ton zu hören ist.
Das natürlich 2x, da die Musik über eine Stereoanlage mit einem linken und einem rechten Kanal abgespielt wird.

Neben Englisch habe ich jedoch das Pproblem, daß ich nur Elektromechaniker und nicht Elektrotechniker gelernt habe.
Daher ist mein Wissen betreffend Halbleitertechnik sehr gering.
Um diesen Chip verwenden zu können, benötige ich Hilfe.
Betreffend Signalstärke würde ich ein Line-Out Signal vom Mischpult nehmen, da die Musik vom PC, Analog-Plattenspieler und auch vom Tonband kommt.

Hallo fony
Der LM3915 als Bausatz ist zwar recht lieb, aber nicht als Lichtorgelersatz geeignet.
Da wäre der Chip alleine schon ein besseres Ausgangsgerät.
Was ich in der Kürze so auf ebay gesehen habe, kostet der Chip sowieso nicht viel.
Das Problem ist nur, daß ich von Halbleitertechnik keine Ahnung habe.
Also wie nutze ich diesen Chip, um statt einer einzelnen LED 4 Reihen mit z.B. 16 LED leuchten zu lassen?

Ich hoffe, daß ich allen Beitragerstellern geantwortet habe, und daß ich alle in den Beiträgen gestellten Fragen beantwortet habe.

Wenn Du Cobol überlebt hast, lernst Du auch C++ :wink:

Achtung vom MSGEQ7 gibt es viele Fälschungen. Kaufe den bei einem Händler in DE, dem Du Fälschungen um die Ohren hauen kannst. Auch wenn sie dort teurer sind.
Zu diesem IC gibt es viele Tutorials und Beispiele im Netz.

Bei den ganzen Störungen macht das Schreiben von Beiträgen keinen Spaß.

Gruß Tommy

Daß C++ nicht sehr schwer sein kann, habe ich mir schon gedacht.
Habe mir ein Video von Arduino angesehen.
Bei der Programmierung war für mich alles sehr bekannt.

Ich habe schon befürchtet, daß die permanenten Ausfälle mit meinem langsamen Internetanbieter zu tun haben.

Hallo Spezialisten!!!

Gibt es hier niemanden, der mir bei der Problemlösung helfen kann / will?

Du hast doch bereits Vorschläge bekommen, auf die Du kaum reagiert hast.
Was sollen wir an der Stelle noch tun? Deine fehlenden Kenntnisse können wir nicht für Dich erlernen. Hast Du Dir die Beispiele und Tutorials zum MSGEQ7 im Netz überhaupt schon angeschaut?
Wenn Du konkrete Fragen hast, dann frage.

Gruß Tommy

Ich habe alle Antworten durchgelesen und die diversen Vorschläge angesehen.
Danach habe ich in Post 7 auf alle Vorschläge geantwortet und neue Fragen gestellt.

Hallo Tommy56!
Daß ihr meine fehlenden Kenntnisse nicht für mich lernen könnt, ist mir klar.
Deine Antwort widerspricht aber dem Gedanken eines Forums.
Ein Forum sollte dazu da sein, daß die Wissenden - die sich freiwillig im Forum herumtummeln - den Unwissenden bei der Problemlösung helfen.

Daß ich zu einer Zeit die Schule besuchte, wo es noch Geodreieck, Zirkel, Rechenschieber usw. gab. ist nicht meine Schuld.
Und daß ich daher nur sehr geringe Englischkenntnisse habe, und ich deshalb keine Beschreibungen übersetzen kann, ist auch klar und habe ich genau bekannt gegeben.
Genauso habe ich erklärt, daß ich Elektromechaniker und NICHT Elektrotechniker erlernte, und ich deshalb in der Halbleitertechnik schwach bin.
Daß ich aber dazulernen will, beweist schon allein die Tatsache, daß ich mich mit dem PC und LED beschäftige, und ich hier im Forum Fragen stelle.

Was ich meinte mit den Ausgängen statt LED Pins am Arduino ansteuern und dein PRG macht Licht aus Musik bei WS2812 kann man auch Helligkeit und nicht nur die einzelnen LED.

Du bekommst doch Hilfestellungen. Wir können aber, wie bereits geschrieben, nicht für Dich lernen.
Die Frage, ob Du Dich bereits mit den Tutorials und Beispielen zum MSGEQ7 im Netz beschäftigt hast, ignorierst Du vollständig. In meinen Augen wäre das die Lösung für Dein Problem, Du bist aber nicht darauf eingegangen.

Dann kann ich Dir auch nicht weiter helfen. Evtl. etwas für Deine Elektronikkenntnisse und für Übersetzungen kann ich deepl oder einen Kurs an der VHS empfehlen.

Gruß Tommy

Hallo fony!

Daß du wahrscheinlich meinst, daß statt der LED's ein Arduino oder ein ESP32 angesteuert werden soll, der mit den Infos eine LED matrix oder LED Strip ansteuert, habe ich mir gedacht.
Aus diesem Grund habe ich in meiner Antwort auch geschrieben, daß mir die Idee im pronzip gefällt, mir jedoch die Kenntnisse in Halbleitertechnik und auch die Programmierkenntnisse für Arduino und ESP32 fehlen.
Daher hier nochmals gezielt die Frage.
Ich nehme den kompletten Bausatz, jedoch löte ich die einzelnen LED's nicht an.
Was mache ich dann?
Wie verbinde ich den Bausatz mit dem ESP32 oder einem Arduino?
Wo soll ich dann wie die LED's anschließen?
Welche Software benötige ich dann, damit der ESP32 oder der Arduino die Infos vom Bausatz an die LED's weiterleitet?

Mit einem kleinen Arduino kommt man bei der Soundanalyse nicht weit.

Es gibt allerdings auch größere, halbwegs Arduino kompatible....
z.B. der K210
Ihm kann (hier relevant):
8 Soundquellen
FFT in Hardware
Neuronales Netz in Hardware
Und hat dazu noch 2 Stück 64 Bit Kerne, mit an die 600MHz

Da reicht allerdings englisch nicht wirklich.
Es ist eine gute Gelegenheit chinesisch zu üben.

Je öfter du das Lied singst, desto fester wirst du daran glauben und je weniger wird sich daran jemals ändern.
Das Verfahren, welches du da anwendest nennt sich "Selbstkonditionierung"

Hallo Tommy56
Die Info über den MSGEQ7 habe ich absolut nicht negiert.
Ich habe mir die Infos sehr wohl angesehen.
Ich habe aber auch geschrieben, daß mir nicht bekannt ist, wie ich diesen Chip mit dem EP32 oder mit einem Arduino verbinden soll.
Daß ich im www nach diesen Infos gesucht habe, ich die Infos jedoch nicht gefunden habe, habe ich dir auch mitgeteilt.
Deepl kannte ich bis jetzt nicht, jedoch verwendete ich bisher den Google Übersetzer, wobei dieser nicht exakt arbeitet. Bei einfachen Texten ist das egal.
Bei genauen Beschreibungen muß ich mich jedoch auf eine exakte Übersetzung verlassen können, was bei Google nicht der Fall ist.
Daher nochmals meine direkte gezielte Frage.
Wie verbinde ich den MSGEQ7 mit einem ESP32 oder einem Arduino?
Welche Software benötige ich danach, damit der ESP32 oder der Arduino die LED's nach der Musik wie eine Lichtorgel zum blinken bringt.

Auch das wird in den Beiträgen sogar mit Bildern gezeigt.
Ich gebe es auf und bin raus.

Gruß Tommy

Beispiel:

Eigentlich keine weitere. Der MSGEQ7 liefert für alle 7 Kanäle einen analogen Wert, den du einfach gemapt auf PWM Ausgänge geben kannst. Dementsprechend hell leuchten die LEDs.

Etwas schwieriger wird es, wenn du ein Auto Gain Softwaretechnisch umsetzen willst.

Edit: Und nochmal gewühlt bei mir. Die Verkabelung muss natürlich angepasst werden. Nur ein MSGEQ7, wegen Mono.

const byte strobePin  = 2;    // Strobe Pin on the MSGEQ7
const byte resetPin   = 4;    // Reset Pin on the MSGEQ7
const byte outPin     = A5;   // Output Pin on the MSGEQ7
uint16_t level[7];            // An array to hold the values from the 7 frequency bands
int ch1               = 0;
int ch2               = 0;
int ch3               = 0;

void setup() {
  pinMode      (strobePin, OUTPUT);
  pinMode      (resetPin,  OUTPUT);
  pinMode      (outPin,    INPUT);
  digitalWrite (resetPin,  LOW);
  digitalWrite (strobePin, LOW);

  // Reset the MSGEQ7 as per the datasheet timing diagram
  delay        (1);
  digitalWrite (resetPin,  HIGH);
  delay        (1);
  digitalWrite (resetPin,  LOW);
  digitalWrite (strobePin, HIGH);
  delay        (1);
}


void loop() {  
  // Cycle through each frequency band by pulsing the strobe.
  for (int i = 0; i < 7; i++) {
    digitalWrite       (strobePin, LOW);
    delayMicroseconds  (100);                    // Delay necessary due to timing diagram
    level[i] =         analogRead (outPin);
    digitalWrite       (strobePin, HIGH);
    delayMicroseconds  (100);                    // Delay necessary due to timing diagram  
  }
  ch1=map(level[1],250,1023,0,255);
  if(ch1<0) ch1=0;
  ch2=map(level[3],350,1023,0,255);
  if(ch2<0) ch2=0;
  ch3=map(level[5],300,1023,0,255);
  if(ch3<0) ch3=0;
  analogWrite(3,ch1);
  analogWrite(5,ch2);
  analogWrite(6,ch3);
}