Sound / Geräuscherkennung, Abfrage im Programm

Hallo zusammen,

ich möchte mit einem Arduino (Uno oder Leonardo) gerne ein bestimmtes Geräusch "abfragen", das immer das exakt gleiche Muster hat, sich lediglich in der Lautstärke minimal unterscheiden kann bzw. durch evtl. Störgeräusche beeinflusst wird.

Im Internet habe ich dazu folgende Module gefunden:

Leider bin ich mir ganz sicher, ob ich wirklich beide Module brauche, oder ob das erste schon seinen Zweck erfüllt. (Der Audio Analyzer wird zwischen µC und Sound-Sensor geschaltet).

Außerdem bin ich mir nicht sicher, wie ich später das Geräusch im Programm erkennen kann. Ich stelle mir das so vor: Ich lese ständig den analogen Wert des Pins ein, an den der Sensor angeschlossen ist. Tritt das Geräusch auf, habe ich vermutlich eine ganze Reihe an Werten (v.a. wenn ich ohne Verzögerung Daten lese). Das Muster dieser Werte sollte dann ja jedes Mal ungefähr gleich sein (je nach Toleranz, Störgeräusche, etc.).

Wie kann ich diese u.U. recht lange Zahlenfolge von Werten zwischen 0 und 1023 dann später elegant "abfragen"? Ich kann zur Zeit noch keine Aussage darüber treffen, wieviele Messwerte sich ergeben bzw. inwiefern diese sich verändern, ich weiß nur, dass mein Geräusch etwa eine Dauer von einer Sekunde lang ist.

Hat da schonmal jemand mit gearbeitet bzw. eine gute Idee?

Ich danke euch :slight_smile:

Wenn du wirklich ein Geräusch von anderen unterscheiden willst, dann wirst du mit dem Arduino wahrscheinlich nicht glücklich werden.
Das ist, für einen Controller eine extrem schwere Aufgabe (und auch für den Programmierer!)

Aber das hängt von der Art des Geräuschen auch mit ab.
Einen Pfeifton (fester Frequenz) zu erkennen ist leichter, als z.B. einen Ausruf zu erkennen.
Das Schlagen einer Tür (wenn keine anderen Pulsgeräusche auftreten) ist auch gut zu erkennen, ebenso wie in die Händen klatschen.

Blätterrauschen zu erkennen ist sehr schwierig, und die Unterscheidung vom Rauschen eines vorbeifahrenden Autos fast unmöglich.

Das ist übrigens ein (Electret-) Mikrofon mit Vorverstärker.

Und das ist der (oft verwendete) MSGEQ7, wie schon in der Beschreibung steht ein "graphic equalizer display" es analysiert die "Lautstärke" auf 7 Frequenzbändern.

In beiden Fällen dürfte die Auswertung eine gewisse Herausforderung darstellen (wie ja schon erwähnt wurde).

Ich denke eine der wichtigsten Frage ist: was meinst du konkret mit "bestimmtes Geräusch"?

Danke für eure Antworten.

Wäre es denn möglich, mit dem ersten verlinkten Modul einfach simpel nur auf Lautstärke zu triggern? Auch auf die Gefahr hin, dass dann alle lauten Geräusche >xy dB erkannt werden und eine entsprechende Reaktion auslösen? Das würde mir zur Not und für den privaten einfachen Gebrauch reichen :wink:

ich möchte mit einem Arduino (Uno oder Leonardo) gerne ein bestimmtes Geräusch "abfragen"

Spezifiziere mal bitte, welches Geräusch Du meinst.

Die Mikro-Boards kannst Du alle vergessen - als Klatschschalter geht das (manchmal), meinetwegen auch noch als rudimentäres VU-Meter, alles andere wird nichts (bzw. nichts reproduzierbares).

Der MSGEQ7 ist ein schönes Spielzeug für Audio-Visualisierung. Eine spezifische "Geräuscherkennung" würde jedoch eine komplexe (und dynamische) Mustererkennung voraussetzen, welche abgesehen von den programmiertechnischen Hürden, einen Arduino überfordern dürfte. Jedenfalls habe ich sowas noch nie auch nur ansatzweise umgesetzt gesehen.

Wäre es denn möglich, mit dem ersten verlinkten Modul einfach simpel nur auf Lautstärke zu triggern?

Jein. Wenn das Signal nicht zu kurz ist, geht es. Du wirst die Messungen ein wenig mitteln müssen, um zu brauchbaren Ergebnissen zu kommen.

Und es reagiert dann auf alles - klatschen, Tür schließen, im Zimmer rumlaufen, ...

Oder Du setzt die Triggerschwelle sehr hoch und schreist jedesmal, wenn Du etwas auslösen willst...

simpel nur auf Lautstärke zu triggern

Jetzt machst du dir es etwas zu einfach :wink: Dafür brauchst du keinen Arduino.

Wenn der Raum nicht zu viel Hall hat, solltest du einen Klatsch-Schalter hinkriegen, der zwischen
{ "garnicht", "einmal", "zweimal" } Klatschen (oder ähnlichen Geräuschen) unterscheiden kann.

Was ein Arduino ziemlich gut kann, ist Zeiten messen im (mehrere) Millisekunden-Bereich.
Eine einzelne Analogwert-Erfassung dauert aber schon 0,1 ms.
Viel Spaß.

Danke nochmal, ich werde einfach mal schauen was sich so ergibt und mich nochmal melden, das kann aber durchaus ein paar Wochen dauern :wink:

Habe nun auf jeden Fall gelernt, dass das Thema bei weitem nicht so einfach ist, wie ich mir zu Anfang dachte. Ich werde erstmal ganz unten anfangen und gucken, wie sich alles mit der Lautstärke und anderen Geräuschen etc. verhält.