Digitale RGBs ansteuern + Musik analysiren/visualisieren

Hallo zusammen!

Ich habe vor mein DJ-Pult ein bisschen zu verschönern und würde dieses gerne mit LED-Stripes ausstatten. Weiter will ich die BPM Anzahl der einzelnen Decks auslesen.

Folgendes soll realisiert werden: -BPM Anzahl Plattenspieler 1 auf drei 7-Segmentanzeigen wiedergeben. -BPM Anzahl Plattenspieler 2 auf drei 7-Segmentanzeigen wiedergeben. -Master Ausgang (das Audiosignal, welches zum Verstärker geht) mit Hilfe von insgesamt 5 Metern adressierbaren RGB-Stripes visualisieren.

Plan: Da ich insgesamt 3 Audiosignale auswerten möchte benötige ich auch 3x MSGEQ7. Das Audiosignal der beiden Decks soll nur dazu verwendet werden um die BPM Anzahl mit jeweils 3x7-Segmentanzeige (und vorgschalteten BCD to 7-Segment Decoder) anzuzeigen. (Dies soll mir beim Beatmatching helfen.) Das 3. Audiosignal, welches am Master Ausgang abgefangen wird, soll visualisiert werden. Was ich dort genau vor habe weiß ich noch nicht, jedoch kann ich ein paar Beispiele nennen: -Farbwechsel bei jedem Beat -Ausschlag des Signals (Fachausdruck: Level-Meter) -Lauflicht -etc. etc.

Folgende Streifen habe ich mir rausgesucht: LED-Stripes IC Type: WS2812B (2811) Ich habe vor 4 Meter mit 60LEDs/Meter und 1 Meter mit 144LEDs/Meter zu verbauen.

Kommen wir nun zu meinen Fragen: 1. Ist das ganze realisierbar, wie ich es mir vorstelle? 2. Lässt sich bei den Stripes wirklich jede LED einzeln ansteuern? Wenn ich also will, dass in einem 4 Meter Stripe LED Nr. 145 Grün und LED Nr. 134 Rot leuchtet?

Wenn ich weiß, dass es zumindest alles so Funktioniert, wie ich das gerne hätte kann ich mir Gedanken über Dinge machen wie ich sie realisiere.

LG Lukas

Hallo und willkommen im Forum!

Zu 1.: Wie man BPM mißt, weiß ich nicht, da kann ich nichts zu sagen. Eine LED-Matrix mittels MAX7219 ansteuern geht aus Sicht eines Arduino einfach. Siebensegment mag ich nicht so, geht aber auch mit MAX7219. Das gilt auch für WS2812B oder APA102, wobei das Timing von APA102 unkritischer ist. Folge Helmuth hier im Forum, Beispiel1 oder Beispiel2 mit Beitrag.

Zu 2.: Ja (siehe mein Avatar-Bildchen). Siehe Programmbibliothek FastLED Beispiel FirstLight.ino

Als Anfänger wie ich braucht man möglicherweise mehr Speicher als die Geübten. Daher könnte es sinnvoll sein, alle drei Aufgaben auf drei Arduinos zu verteilen und sie mittels I2C-Bus kommunizieren zu lassen. Oder Du nimmst einen größeren Arduino wie den Mega 2560. Leider nicht von arduino.cc buhlt dann noch der teensy 3.2 um Deine Gunst.

Kurze Anmerkung: ein BMP Zaehler fuer Techno bzw. 4/4 Material ist kein Problem, mit anderer Musik wird das sehr schnell sehr komplex. Ist trotzdem machbar, aber da muss man tief in mathematische Modelle / Mustererkennung einsteigen. Als Einstiegsprojekt eher ungeeignet.

Ansonsten ist das durchaus machbar, was Du vorhast. Ich wuerde wenn ich Du waere das Projekt in 50 Miniproblemchen zerlegen und dann eins nach dem anderen loesen.

Achso, und ich wuerde ein OLED oder TFT nehmen, keine 7 Segment Anzeigen, aber ich bin auch ein fauler Hund…

Falls Du die Leds noch nicht gekauft hast, nimm die APA102 - da hast Du mehr Spielraum und weniger Probleme mit Timing, Interrupts, Geschwindigkeit, … Kostet ein bisschen mehr, aber das lohnt sich fuer soundreaktive Sachen.

Gruss, H.

BCD zu Siebensegmentdecoder brauchst du mit einem Arduino nicht. 7 Segementanzeigen kannst du auf viele unterschiedliche Arten ansteuern. Multiplex direkt oder mit ein paar Treibertransistoren, per 74HCT595, per SAA1064, per MAX7219 oder, oder oder…
Kaufe die Anzeigen aber erst zum Schluß, denn dabei gibt es ein paar Stoplerfallen!
Anzeigen mit gemeinsamer Kathode sind tendentiell unbeliebter, da es mehr Treiber ICs für gemeinsame Anode gibt. Große Anzeigen haben meist etliche LEDs pro Segment in Reihe und benötigen höhere Versorgungsspannungen, da die Summe der Flusspannungen schon über 5V liegt.
Soll die Anzeige nur für dich hinterm Pult sein, oder für die Massen? In letzterem Fall kannst du auch 7 Segmentziffern aus LED-Stripe selber auf eine Platte kleben. So habe ich auf einem Regalboard eine Uhr mit 28 cm großen Zahlen aufgebaut.

Hallo!

Mit so vielen Antworten hätte ich ja im Leben nicht gerechnet! Danke dafür!

agmue:
Daher könnte es sinnvoll sein, alle drei Aufgaben auf drei Arduinos zu verteilen und sie mittels I2C-Bus kommunizieren zu lassen. Oder Du nimmst einen größeren Arduino wie den Mega 2560.

Eigentlich hatte ich vor nur einen Arduino zu verbauen. Wie Helmuth aber schon sagte werde ich das Projekt in viele kleine Probleme aufteilen. Falls mir also Speicher oder so fehlen sollte kann ich mich ja noch umentscheiden. :smiley:

Helmuth:
Kurze Anmerkung: ein BMP Zaehler fuer Techno bzw. 4/4 Material ist kein Problem, mit anderer Musik wird das sehr schnell sehr komplex.

Wie du schon richtig vermutet hast, soll der BPM Zähler ausschließlich für Techno sein, daher sollte dies kein Problem sein.

Helmuth:
Achso, und ich wuerde ein OLED oder TFT nehmen, keine 7 Segment Anzeigen, aber ich bin auch ein fauler Hund…

Ehrlich gesagt habe ich mir dazu keine Gedanken gemacht, sondern mich einfach nur an Vorbildern orientiert.
Hier ein Beispiel:

Ich will die BPM-Anzeige so klein und unauffällig halten wie mögliche, wodurch sich auch schon die nächste Frage

nix_mehr_frei:
Soll die Anzeige nur für dich hinterm Pult sein, oder für die Massen?

erledigt hat.

nix_mehr_frei:
BCD zu Siebensegmentdecoder brauchst du mit einem Arduino nicht. 7 Segementanzeigen kannst du auf viele unterschiedliche Arten ansteuern. Multiplex direkt oder mit ein paar Treibertransistoren, per 74HCT595, per SAA1064, per MAX7219 oder, oder oder…

Hast du dazu evtl. mal einen Link?

Helmuth:
Falls Du die Leds noch nicht gekauft hast, nimm die APA102

Solche?

Ich werde wohl mit der BPM-Azeige beginnen und danach die LED-Stripes realisieren.
Über jeden Tipp, Anregung, Kaufberatung bin ich weiterhin dankbar!

Lukas

Die 7-Segmentanzeigen haben den Vorteil, dass sie wenig Ressourcen brauchen, schnell sind und sich aus allen Blickwinkeln ablesen lassen… Ich benutze gerne den MAX7219. Es gibt billige fertige Anzeigemodule. Ich würde zwei oder drei Arduinos (z.B Nano) nehmen. Einer/zwei wertet die BPM aus. Der andere kümmert sich um die Visualisierung. Da sie unabhängige Tonkanäle (zwei Decks<>Master) auswerten, brauchen sie noch nicht mal zu kommunizieren.

Ich wuerde mit einem Arduino anfangen, und den verwenden bis ich merke, dass der mit der Fuelle von Aufgaben ueberfordert ist.

Dann optimieren und tricksen, bis es vielleicht doch irgendwie geht.

Und dann einen Teensy, der schafft das locker - aber man hat bis dahin sehr effektiven Code geschrieben, weil der Arduino eben deutlich langsamer ist und man nicht mit RAM und Zeitfenstern rumschlampen darf.

Ein Teensy reicht fuer das Projekt - wenn denn die I/O Pins reichen. Wenn das, was der OT schrieb alles ist, reichen sie.

Gruss,

Helmuth

Fleckenzwerg: Eigentlich hatte ich vor nur einen Arduino zu verbauen.

Ich hatte die Betonung zu sehr auf den Speicher gelegt. Ein Arduino ist aber ein Singletask-Rechner und das, was Du machen willst, ist zeitkritisch. Es könnte sich daher herausstellen, drei Arduinos sind besser als einer. Mein Tipp daher: Erfahrungen sammeln und das Projekt flexibel halten. Genau das planst Du ja.

Fleckenzwerg: Hast du dazu evtl. mal einen Link?

http://playground.arduino.cc/Main/MAX72XXHardware vierstellig kaufen SPI mit MAX7219 NeoPixel = WS2812 oder DotStar = AP102

Fleckenzwerg: Solche?

Ja!

agmue: Ein Arduino ist aber ein Singletask-Rechner und das, was Du machen willst, ist zeitkritisch. Es könnte sich daher herausstellen, drei Arduinos sind besser als einer.

Das war auch meine Überlegung. Du hast drei eigentlich unabhängige, aber sehr zeitkritische Aufgaben. Nanos aus China kosten ja fast nix. Wenn es läuft könnte man ausprobieren, welche Funktionen man auf einen Arduino zusammenlegen kann.

Du hast drei eigentlich unabhängige, aber sehr zeitkritische Aufgaben.

Das sehe ich nicht so. Einen MSGEQ7 komplett auslesen mit konservativem Timing - also Standard Arduino Funktionen - braucht weniger, als 1 mS. APA102 schreiben geht sauschnell, 20 MBit/s kann man machen - macht aber mit ein paar hundert Leds keinen Sinn. Selbst mit den 0,8 MBit/s vom Uno geht das ziemlich flott.

Der Flaschenhals ist das Display - ein I2C OLED braucht 30+ ms fuer ein Frame, aber z.B. mit einem SPI Interface geht das erheblich schneller. Von 7 Segment Anzeigen habe ich keine Ahnung, aber die paar Byte werden auch nicht lange dauern, wenn ein externer Treiber IC das Multiplexing uebernimmt. Ist am Ende aber egal - wenn das Display 2x pro Sekunde geupdatet wird, reicht das fuer diese Anwendung voellig aus.

Ueber die Berechnung von BPM und dergleichen brauchen wir auch nicht reden, das faellt vom Zeitkonsum ueberhaupt nicht auf.

Mit anderen Worten: wenn keine 4stelligen fps fuer die LEDs gefordert sind, geht das locker mit einem Standard 16 MHz Arduino.

Ob man eine Datenuebertragung zwischen Arduinos hinbekommt, die schneller ist, als das direkte Auslesen von MSGEQ7s, bezweifle ich.

Das Projekt klingt kompliziert, ist es aber nicht wirklich.

Eine gute Programmstruktur ist alles - i.V.m. detaillierten Kenntnissen, was wie lange dauert. Wenn man das nicht weiss, schreibt man halt erstmal ein paar Benchmarks und testet das aus. Einfach die betreffende Funktion 10000 mal aufrufen und die Millis stoppen, die das dauert - schon hat man verlaessliche Daten und weiss, wo es klemmt und wo sich eine Optimierung lohnt.

Beste Gruesse,

Helmuth.

Hallo!

Vielen dank für die ganzen Infos!

Da ich noch recht neu im Bereich Arduino etc bin werde ich mit dem Projekt BPM Analyse anfangen. LEDs kommen, wenn der erste Teil funktioniert.

Folgendes habe ich nun vor:

2 Audiokanäle auswerten und die BPM Anzahl mit einer Nachkommastelle auf 7-Segmentanzeigen anzeigen.

Einkaufslist:

MAX7219 7-Segmentanzeige

Arduinos

MSGEQ7

Passt das so?

Welchen Nachteil ein Anzeigemodul wie dieses hat ist natürlich, dass man nur einen Arduino nutzen kann, da dieser ja die Komplette Anzeige versorgt richtig? Heißt: BPM-Analyse von Channel 1 und Channel 2 geht über einen Arduino. Denkt ihr, dass dies ein Problem sein könnte? Wäre es besser die Segmente einzeln anzusteuern?

Bis dann Lukas

Ich denke das passt so. Du solltest noch ein paar Steckbretter (Breadboard) bestellen. Ich mag am liebsten die 400er oder 830er. Dazu kommen noch ein paar Jumper Wires. Kleinzeig wie Kondensatoren, Widerstände usw. würde ich eher hier in D kaufen. Nimm ruhig von der Max-Anzeige 2Stk-3Stk. Ich habe immer gerne etwas mehr, falls mal was kaputt geht und ich z.B. einen Aufbau zum benutzen und einen zum basteln und weiterentwickeln haben kann.

Netzteil nicht vergessen.

Fleckenzwerg: Passt das so?

Mit Deinen Fragen fängst Du hinten an, da nicht klar ist, wieviele Arduinos Du brauchst. Solltest Du tatsächlich drei Arduinos benötigen, kannst Du die mittels I2C miteinander reden lassen. Zwei analysieren, einer zeigt an. Du läufst also in keine Sackgasse, zumindest sehe ich keine.

Auf die Gefahr mich zu wiederholen: MSGEQ7 Messungen OHNE eine schnelle Visualisierung der Daten ist SINNLOS.

Ja, das kann man irgendwie im Serial Monitor machen oder mit Processing Spectogramme zeichnen.

Man kann auch einfach ein kleines Graphikdisplay direkt an den Arduino hängen. Aber ich will nichts einreden, nur nochmal sagen, dass ein plug&play SPI OLED 10€ kostet.

Irgendwie muss man ja die Schwellwerte bestimmen (und nachregeln (lassen)) ab/bis wann ein Ausschlag z.B. im 100 Hz Band als Beat interpretiert werden soll. DAS ist das Hauptproblem bei der BPM Zählerei.

Dann Zeitstempel speichern und die Intervalle messen, ist simpel bzw. kostet nur minimal Zeit.

Und nochmal: 3 MSGEQ7s mit einem Arduino auslesen ist zeitlich wirklich überhaupt kein Problem. Im Gegenteil: Man verbindet alle 3 Strobe- und Resetleitungen - pingt also alle 3 ICs gleichzeitig an, und muss nur EINMAL warten, bis der Ausgang sich beruhingt hat (min. 27 µS mit meinem Setup) - dann liest man nacheinander alle 3 Analog Outputs ein - die restlichen beiden hatte ja genug Zeit, um stabil zu werden.

Hallo, Danke für die Infos, habe ich denke ich auch alles verstanden. Aber das von Helmuth leider noch nicht so richtig :/ Was genau würdest du mir raten? Statt den 7 Segmentanzeigen eine andere nutzen? Sowas?

Welchen Vorteil hätte es gegenüber der von mir gewählten Anzeige? und was genau meinst du mit: MSGEQ7 Messungen OHNE eine schnelle Visualisierung der Daten ist SINNLOS.

Wie ich das ganze dann verarbeite und auslese ist eine andere Geschichte, damit habe ich mich bisher kaum beschäftigt. Kennt jemand dazu evtl. einen Artikel oder so, in dem die Programmierung mit dem MSGEQ7 beschrieben wird?

Danke schonmal! Lukas

Grundlagen zum MSGEQ7.

Sowas?

Nee, das ist ein TFT. Eher sowas.

Vorteil: Keine Löterei, kein extra IC nötig, und es ist ein GRAPHIKDISPLAY. D.h. Du kannst nicht nur Zahlen und Text darstellen, sondern auch Diagramme. Sowas z.B..

was genau meinst du mit: MSGEQ7 Messungen OHNE eine schnelle Visualisierung der Daten ist SINNLOS.

Damit Du (oder ein Algo) die Daten interpretieren kannst, müssen die Daten gut aussehen. Das kontrolliert man am einfachsten optisch.

Wenn Du z.B. den Eingang versehentlich übersteuerst, werden die Daten chaotisch. Das sieht man mit viel Geduld in einer Zahlenreihe, oder auf einem Blick im Spectrumchart.

Oder das Audio Signal ist zu schwach - Dein Algo erkennt keinen Beat mehr und du wunderst Dich. Ein Blick auf den Spectrumchart und Du siehst sofort, was das Problem ist.

Jetzt verständlicher?

Gruß, Helmuth

Hallo, jetzt habe ich es verstanden! klingt gut. Dann werde ich vermutlich 2 solcher Displays nehmen, für jeden Kanal einen. So kann ich mir auf jedem Display oben mittig die aktuellen BPM und darüber das ganze graphisch darstellen lassen. Übersteuerung sollte zwar eigentlich nicht vorkommen, da mir das ganze ja schon auf dem Mischpult als grüne, bzw rote Balken angezeigt wird, schaden kann es trotzdem nicht und es sieht noch hübsch aus :P Wenn ich also 2 Displays nehme brauche ich dann trotzdem nur ein Board?

Ich würde mich vorerst trotzdem auf die BPM Analyse beschränken. Das mit den LEDs soll später folgen.

Also sieht meine Partlsite wie folgt aus:

2x Display

Arduinos

MSGEQ7

Lochrasterplatine

Welche Teile ich dann noch für den MSGEQ7 brauche schaue ich noch.

Wie ich das Display etc. programmiere schaue ich, wenn alles da ist. Lukas

Ich selbst habe keine Erfahrungen damit, mehr als ein Display zu treiben.

Wenn der RAM und die PINS reichen, sollte es aber gehen. Ich würde zuerst die einschägigen Foren durchforsten, ob das schonmal jemand hinbekommen hat.

Wenn sich die Anforderungen dahingehend geändert haben, dass Du jetzt permanent 2x ein Echtzeitspectogramm zeichnen möchtest, würde ich dann doch zu einem Teensy 3.1/3.2 raten.

Ich selbst habe meist einen IR Empfänger an Schaltungen, damit ich z.B. zwischen einem Betriebs- und einem Debugmodus umschalten kann.

Übersteuerung sollte zwar eigentlich nicht vorkommen

Jaja, man ist immer wieder überrascht, was praktisch alles passiert, obwohl es eigentlich theoretisch nicht vorkommen sollte... Das kostet dann Stunden der Fehlersuche bis man schließlich merkt, dass eigene unzutreffende Annahmen den Blick fürs Wesentliche verstellt haben.

Und ich würde das definitiv erstmal alles auf einem Steckbrett aufbauen, bevor ich irgendeine Lochrasterplatine in die Hand nehme.

Ok, das klingt logisch.

Hast du einen Aufbau von dem Video in deinem vorherigen Post?

Welchen Vorteil hat ein Teensy gegenüber 2 nanos? Lukas

Hast du einen Aufbau von dem Video in deinem vorherigen Post?

Verstehe die Frage nicht.

Welchen Vorteil hat ein Teensy gegenüber 2 nanos?

Was ist der Vorteil von einem Rennwagen gegenüber 2 Fahrrädern?

Konkret 32Bit vs. 8, 96MHz vs. 16, 64kB RAM vs. 2, DSP vs. keinen, schnellere ADCs mit mehr Auflösung, u.v.m.

"Datenblatt" bzw. Handbuch mit knapp 1400 Seiten hier.

Übrigens, falls Du Dich für den Teensy entscheidest, kannst Du auch die MSGEQ7s weglassen und stattdessen das Audio Adaptor Board nehmen, zeitgleich (!) 3 Audioquellen samplen und Software FFT benutzen.

Wobei das realistisch gesehen absolut kein Anfängerprojekt mehr ist.