Sounderkennung mit Display

Hallo zusammen!

Ich muss oft die Akkulaufzeit von mobilen Bluetoothlautsprechern messen. - Bei voller Lautstärke.
Da das sehr nervig ist, dauernd einen lauten Lautsprecher im Raum zu haben (Ich muss ja auch hören ob er noch läuft oder nicht), dachte ich mir, ich könnte dies irgendwie elektronsich lösen -> Mit einem Arduino.

Die Idee ist die folgende:
Das Arduino mit einem Mikrofon und einem Display verbinden. Solange Musik läuft, läuft ein Zähler auf dem Display.
Natürlich soll dieser erst stoppen, wenn nach ca. 1 Min. kein Sound mehr kommt (Sonst stoppte er schon beim 1. Liedübergang.)
Danach könnte man das Arduino ja per Reset wieder neu starten lassen.

Hardwaremässig habe ich somit schon mal den Durchblick. Mit der Programmierung haperts aber noch.
Kann mir jemand auf die Sprünge helfen wie man sowas angeht?
Es muss ein Counter auf einem Display laufen, der dann durch ein Eregnis (1 Minute kein Ton) gestoppt wird.

Gruss ProtonX

Sowas geht immer mit millis(). millis() liefert dir die Zeit seit dem Einschalten in ms.
Du speicherst also am Anfang die Zeit ab:

unsigned long startTimed = millis();

Dann vergleichst du ob die Differenz zwischen dieser Variable und dem aktuellen millis()-Wert einen bestimmte Grenze überschritten hat. Und jedesmal wenn du Ton detektierst setzt du startTime wieder auf millis()

Genauso kann man es machen das ein Display sich ausschaltet wenn eine bestimmte Zeit lang keine Taste gedrückt wurde. Sowas habe ich hier mit einem TFT gemacht:
http://forum.arduino.cc/index.php?topic=259793.0
(Code ganz unten)

Hardwaremäßig Durchblick?

Ich sehe deinerseits nirgends den Aufbau einer Schaltung, welche Hardwaremäßig wäre.

Wie wäre es, überhaupt einmal die Basics zu erlenen?

Die Lösung ist trivial und kann auf viele Weisen gelöst werden.
Als Soundmodule sollten die digitalen als auch analogen gehen. Mit den digitalen meine ich diese, die lediglich bei Überschreiten einer Lautstärke den Zustand ändern.

Einfach auf dem LCD Display die Zeitdifferenz von Start der Messung und dem aktuellen Wert anzeigen, solange der Zustand nicht seit 1 Minute abgefallen ist.

ProtonX:
Hardwaremässig habe ich somit schon mal den Durchblick. Mit der Programmierung haperts aber noch.
Kann mir jemand auf die Sprünge helfen wie man sowas angeht?
Es muss ein Counter auf einem Display laufen, der dann durch ein Eregnis (1 Minute kein Ton) gestoppt wird.

Spitzenpegelmessung mit 60 Sekunden Timeout.

Jedesmal, wenn der über das Mikrofon gemessene Spitzenpegel oberhalb eines von Dir festgelegten Mindestpegels liegt, wird ein Sekundenzähler auf 0 zurückgesetzt. Erreicht der Sekundenzähler 60, gab es eine Minute lang keinen ausreichenden Pegel mehr. Dann die abschließende Endzeit anzeigen und Ende.

Für vergleichende Messungen wäre es wahrscheinlich vorteilhaft, immer dasselbe Musikstück abszuspielen, möglicherweise irgendwas technomäßig-basslastiges, bei dem die Spitzenpegel sehr oft bei den schnellen Bassschlägen auftreten.

Inwieweit aber "maximale Lautstärke" irgendeine Vergleichbarkeit bringt? Wenn ein Lautsprecher generell eine deutlich höhere Lautstärke bringt als ein anderer? Müßte man die Wiedergabe dann nicht auf "gleiche Lautstärke" einstellen und dann vergleichen?

Danke für die guten Hinweise. Das hilft mir weiter.

Ich habe bemerkt, dass es beim Zweck des Projekts noch offene Fragen gibt.
Ganz konkret sieht es so aus: Ich habe auf der Arbeit mit Bluetoothlautsprechern zu tun.
Manche Kunden schicken Geräte zur Reparatur mit dem Fehlerbeschrieb: Akkuleistung schlecht.
Nun geht es darum, die Akkulaufzeit beim max. Lautstärke zu ermitteln und mit den Vorgaben - den Verkaufsargumenten - zu vergleichen. Wenn der Lautsprecher die Akkkulaufzeit von etwa 4h erreicht, wissen wir, dass damit alles ok ist.

Natürlich müsste das nicht zwingend bei voller Lautstärke gemacht werden, aber dann halten die Dinger fast 8 Stunden.
Ausserdem ist bei voller Lautstärke für die erfassung per Arduino klarer, ob der Lautsprecher noch läuft oder nicht.

Hallo zusammen!

Ich bin schon bedeutend weiter gekommen.
Seitens Arduino funktioniert alles. Die Uhr stoppt, sobald ich Pin 13 auf 0 Volt lege. Wenn er auf 5V ist, läuft sie munter weiter.
Ein Problem habe ich aber noch.
Ich habe mir nun das empfohlene Mikrofon-Modul mit digitalem und analogem Output gekauft.
Wenn ich messe sieht es wie folgt aus...
Threshold Poti weit zurückgeschraubt: Ohne Musik 0V / Mit Musik 2.2V (Zu wenig, für ein sauberes HIGH)
Threshold Poti etwas weiter oben: Ohne Musik 5V / Mit Musik 3V

Ich kann bei ruhiger Umgebung das Poti langsam hochdrehen und an einem Punkt schnellt die "LOW-Spannung" von 0V auf 5V.
Das LED, welches den Status direkt auf der Platine anzeigt, bleibt aber dabei dunkel.

Das Modul ist diesem hier sehr ähnlich:
http://www.ebay.com/itm/High-Sensitivity-Sound-Microphone-Sensor-Detection-Module-For-Arduino-AVR-PIC-/191151561640?pt=LH_DefaultDomain_0&hash=item2c81855ba8

ProtonX:
Wenn ich messe sieht es wie folgt aus...
Threshold Poti weit zurückgeschraubt: Ohne Musik 0V / Mit Musik 2.2V (Zu wenig, für ein sauberes HIGH)
Threshold Poti etwas weiter oben: Ohne Musik 5V / Mit Musik 3V

Irgendwas an Deiner Beschreibung und/oder Messung stimmt nicht ganz.

Erstens mal hat das Modul zwei Ausgänge: Einen analogen und einen digitalen Ausgang.

Der digitale Ausgang hat eine automatische Pegelerkennung, er liefert nur entweder Low oder High Pegel (0V oder 5V), je nach "Lautstärke" des Audiosignals.

Der analoge Ausgang liefert bei Nullpegel den Mittelwert von 2,5 Volt. Bei Anlegen einer Audio-Wechselspannung wird diese Audio-Wechselspannung direkt auf das Signal aufmoduliert. D.h. innerhalb winziger Sekundenbruchteile sind dann Spannungen zwischen beispielsweise 2,4 und 2,6 Volt messbar (leises Signal) oder zwischen 2,0 und 3,0 Volt (lauteres Signal). Es handelt sich um eine Wechselspannung mit Gleichspannungs-Offset, und so ein Signal macht man am besten mit einem Oszilloskop sichtbar, ein einfaches Multimeter kann damit nichts anfangen bzw. mißt wegen der Trägheit allenfalls den Gleichspannungs-Offset.

Ich habe Dir mal ein Testprogramm für Dein Mikrofonmodul gemacht.
Code ungetestet (nur hingeschrieben):

// Testprogramm für Mikrofonmoduls mit Digital Output (DO) und Analog Output (A0):
// Verdrahtung: 
// Digitalausgang (DO) des Moduls mit Digitaleingang PIN-3 des Arduino verbinden
// Analogausgang (A0) des Moduls mit Analogeingang A0 des Arduino verbinden


#define DIGITALEINGANG 3  // Pin-3 des Arduino
#define ANALOGEINGANG A0  // Pin-A0 des Arduino
#define LED 13            // Board-LED "L" auf dem Arduino-Board

void setup() {                
  Serial.begin(9600);
  pinMode(DIGITALEINGANG, INPUT);     
  pinMode(ANALOGEINGANG, INPUT);     
  pinMode(LED,OUTPUT);
}

void loop() {
  boolean digitalValue= digitalRead(DIGITALEINGANG);
  int analogValue= analogRead(ANALOGEINGANG);
  if (digitalValue) digitalWrite(LED,HIGH); else digitalWrite(LED,LOW);
  Serial.print(digitalValue);
  Serial.print('\t');
  Serial.println(analogValue);
}

Zu sehen sein sollte im seriellen Monitor pro Zeile je ein digitaler Messwert (0/1) und ein analoger Messwert. Der digitale Messwert sollte beim Überschreiten einer Mindestlautstärke seinen Zustand 0/1 wechseln und der analogWert sollte bei leiser Umgebung Werte um ca. 512 ausgeben, und bei höherer Lautstärke sollten "zappelige Werte" ausgegeben werden, die um so weiter von 512 nach unten und oben abweichen, je lauter das Signal ist.

Bekommst Du damit solche Signale wie beschrieben auf den seriellen Monitor?