Forum: Mikrocontroller und Digitale Elektronik Lärm erkennen


von Tom (Gast)


Lesenswert?

Hallo,

ich möchte mit Hilfe eines Mikrocontrollers "Lärm" erkennen:
Das ganze soll in einem Raum, wo viele Menschen reden, eingesetzt
werden; wenn zuviele Menschen gleichzeitig, durcheinandern reden und das
ganze laut wird, soll der Controller das erkennen.

Funktion:
Ein Mikrofon ist an einem OpAmp angeschlossen, das verstärkte Signal
geht an einen (analogen) Eingang eines Mikrocontrollers.

Nur, wie gehts dann weiter?
Wie kann der Controller also Lärm von normalen Sprechschall
unterscheiden?
Irgendwelche Ideen?


Danke,
Tom
(gerade schonmal geschickt, aber leider gelöscht)

von Johnny (Gast)


Lesenswert?

Vielleicht über eine gewisse Zeit (halbe Minute oder so?) den Mittelwert 
bilden und wenn dieser Deinen Referenzwert überschreitet, dies 
signalisieren.

von Peter (Gast)


Lesenswert?

Hoi Hoi!
Ganz einfach, anschließen wie im Anhang gezeigt.
Sowas bin ich gerade auch am entwerfen, nur für einen anderen Zweck ;-)
Den Code habe ich zum Großzeil gerade aus dem Tutorial geklaut, der war 
schon schön kommentiert.
Dann einen Timer-Interrupt aufsetzen der alle 1-10 Sekunden eine ADC 
Wandlung vornimmt, 10 Ergebnisse zusammenaddieren und Teilen für einen 
Mittelwert.
Dann Prüfen ob der Mittelwert über dem Grenzwert liegt.
Zumindest war das meine Idee auf die Schnelle, kann man vielleicht 
schöner lösen ;-)
1
volatile uint16_t adcval = 100;
2
volatile uint8_t adccounter = 0;
3
volatile uint16_t tmp = 0;
4
5
ISR(TIMER1_COMPA_vect) {
6
7
  ADMUX = 0;                      // Kanal waehlen
8
  ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen
9
 
10
  ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);    // Frequenzvorteiler 
11
                               // setzen auf 8 (1) und ADC aktivieren (1)
12
13
  /* Eigentliche Messung - Mittelwert aus 10 Wandlungen je Timer Interrupt eine Wandlung*/
14
15
  if (adccounter < 9) {
16
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
17
    while ( ADCSRA & (1<<ADSC) ) {
18
      ;   // auf Abschluss der Konvertierung warten
19
    }
20
    tmp += ADCW;        // Wandlungsergebnisse aufaddieren
21
  adccounter++;
22
  }
23
  else {
24
   adcval = tmp / 10;
25
   adccounter = 0;
26
  }
27
  
28
  ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
29
}
30
31
32
int main() {
33
 if ( adcval > adcvalmax){ PORTC = 0xFF; } // wenn threshold überschritten wird PORTC auf high schalten
34
}

Mfg,
Peter

von holger (Gast)


Lesenswert?

>int main() {
> if ( adcval > adcvalmax){ PORTC = 0xFF; } // wenn threshold überschritten >wird 
PORTC auf high schalten
>}

Und immer wieder den Reset Knopf drücken ;)

von Peter (Gast)


Angehängte Dateien:

Lesenswert?

Details ;-)
Ich glaube ich hab auch vergessen "tmp" zurück zu setzen und der Port 
ist ja auch nicht Initialisiert. Davon das der Timer ja nicht läuft und 
die Interrupts nicht freigegeben sind mal abgesehen. ;-P
Aber ich wollte ihm ja nur zeigen wie es gehen könnte und nicht was 
fertiges geben, wo bleibt der Lerneffekt.

Aber ich sehe gerade, ich hab den Anhang vergessen.
Hiermit nachgeholt!
Das Poti muss da nicht rein, kannst auch eine feste Verstärkung 
vorsehen.

Mfg,
Peter

von Peter R. (gelb)


Lesenswert?

Tom wrote:

> Wie kann der Controller also Lärm von normalen Sprechschall
> unterscheiden?

Über den Unterschied zwischen Lärm und laut kann man streiten, da 
braucht man manchmal einen Controller als Schiedsrichter.

Vielleicht über das Spektrum? Ein Tonspektrum-Analyser lässt sich mit 
Mikrocontroller-Hilfe machen.

Grüße, Peter

von Sven H. (Gast)


Lesenswert?

Ein Tool für alle Lehrer?!
Wenn das Lämpchen leuchtet, wissen die Schüler, dass sie zu laut sind. 
?!

von Unbekannter (Gast)


Lesenswert?

> Wie kann der Controller also Lärm von normalen Sprechschall
> unterscheiden?

Na, wie hört sich denn Sprache an? Und wie "Lärm", in diesem Fall 
vermutlich mehrere Stimmen durcheinander?

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.