Lautstärke in Dezibel messen

Guten Tag liebe Community,
ich möchte auf Grund eines Schulprojekts eine "Lautstärkeampel" bauen. Je nach Lautstärke im Raum, sollen verschiedene Farben von LEDs leuchten. Ich hab bereits alles in der Theorie fertig, nur weiß ich nicht, wie ich die Lautstärke in db messen soll. Nach ein wenig googeln hab ich zwar ein paar Bauteile gefunden, aber bin mir nicht sicher, ob ich die wirklich gebrauchen kann.
Hier die Links:

Vielen Dank schon mal im voraus!

Der von Dir verlinkte "Soundsensor" kann an einem Arduino allenfalls als Klatschschalter verwendet werden, um ein lautes Klatschen direkt neben dem Sensor zu erkennen. Oder einen Presslufthammer neben dem Sensor am Geräusch zu erkennen.

Das Ding liefert kein vernüftig skalierendes Ausgangssignal.

Schallpegel mißt man üblicherweise mit einem Schallpegelmessgerät. In den Arduino bekommst Du die Daten eines geeigneten Messgeräts z.B. über eine serielle Schnittstelle. Das hier ist ein Multimeter mit RS232-Schnittstelle und Messmöglichkeit für Schallpegel:
http://www.amazon.de/PCE-222-Feuchtemessgerät-Temperaturmessgerät-Schallmessgerät-orientierenden/dp/B002Q98XKC/

Da würde man noch einen seriellen TTL-RS232 Adapter benötigen, um die RS232-Pegel auf TTL-Pegel für einen Arduino umzusetzen und könnte die Messung mit einem einfachen Sketch umsetzen, bei dem die Daten seriell vom Messgerät empfangen werden.

Je nachdem, wie hoch die Anforderungen an die Schallmessung sind, hat die Preisskala für Schallpegelmessgeräte ein nach oben offenes Ende.

Danke für die Antwort, nur leider haben wir eins von der Schule festgesetztes Budget von 25 €. Mit 55€ hätten wir das ja definitiv gesprengt :frowning:
Gibt es sonst noch eine Möglichkeit? Es muss allerdings nicht super genau sein die Messung, sondern nur ungefähr. Natürlich nicht mehr als 15db Unterschied zum realen Wert.

Wenn es keine geeichte Messung in dB sein muss, kann man schon was machen.
Wenn du den zu "messenden" Schall auf einen Kopfhörer-Ausgang verstärkt kriegst, findest du reichlich Beispiele :
fluuux.de War nur der erste Treffer.
Damit kann man immerhin lauter von leiser unterscheiden.

Eigentlich genau so was suche ich halt nur mit 3 Stufen, aber das kann man ja dann machen :slight_smile: ! Danke sehr!
Da ich aber nicht ganz so bewandert bin im Thema Audio: Wie könnte man denn den Ton auf den Kopfhörer-Ausgang bekommen?
Einfach ein Mikro kaufen und den Line-In Stecker (wenn das der richtige Name ist) mit Mutter-Mutter Adapter an den Kopfhörer?
Oder kann man den Mikrofonkabel direkt anschließen?

Hallo,
also "db" ist nur eine Einheit zum vergleichen. Willst Du "echten"
Schallpegel messen, und den über einen Arduino "anzeigen" dann brauchst Du
eine Referenz.

Wenn es nur um die Ampel geht, dann sollte so etwas reichen:

Ganz frech am AnalogEingang anschließen. Und schauen was passiert.
Die Werte dann mit map skalieren: http://arduino.cc/de/Reference/Map

db = map(wPoti, 0, 1023, 0, 100)

"db" wird dann in Prozent ausgegeben

-map, ist die Funktion
-wPoti, ist ist der Wert vom AnalogPort
-0, 1023, ist der AnalogWert der skaliert werden soll
-0, 100, der proportionale errechnete Wert von wPoti

sollte das o.g. Mikro nicht empfindlich genug sein, dann bastels Du die
noch einen einfachen MikrofonVerstärker dazu.
Gruß und Spaß dabei
Andreas

SkobyMobil:
Ganz frech am AnalogEingang anschließen. Und schauen was passiert.
Die Werte dann mit map skalieren: http://arduino.cc/de/Reference/Map

db = map(wPoti, 0, 1023, 0, 100)

"db" wird dann in Prozent ausgegeben

Lautstärke wird mit einer logarithmischen Skala gemessen. Deshalb bringt die Prozentumrechnung nicht viel. +6db bedeutet eine Verdoppelung der Lautstärke. Umrechnungen siehe: Bel (Einheit) – Wikipedia.

Da ihr Schüler seid, könntet ihr euren Physiklehrer bitten, ob er euch ein Lautstärkemessgerät oder ein geeichtes Vergleichsmikrofon zur Verfügung stellen kann, damit ihr Vergleichswerte für euer Mikrofon und die Ampelskale ermitteln könnt.

Hallo,
ziemlich gefährliches Halbwissen...das Du da an den Tag legst.
ist es nicht so, das :

"db = map(wPoti, 0, 1023, 0, 100)"

hier eine elektrische Größe darstellt? Zum "probieren" reicht das.
0 bis 33 grün
34 bis 66 gelb
67 bis 100 rot

Er könnte auch gleich in mV rechnen. Für eine Ampel reicht das allemal.
Gruß und Spaß
Andreas

Bitte nicht Halbwissen unterstellen und dann selbst Riesenfehler machen!!!
Das Mikophon SparkFun Electret Microphone Breakout - BOB-12758 - SparkFun Electronics gibt Wechselspannung aus die mit einem Offset von 2,5V versetzt ist.
Darum ist absolute Stille 2,5V und irgend ein Geräusch dann 2,5V +/- etwas Wechselstrom.
Du brauchst aber ein Signal, das vom Gleichstromanteil befreit wurde, gleichgerichtet und geglättet wurde um einfach mit analogRead() lesen zu können und in 3 Lautstärkengruppen zu unterteilen.

Alternativ kannst Du auch das Mikophon nehmen und den Verstärker ohne Gleichspannungsanteil bauen. Dann brauchst Du aber Duale Spannungsversorgung ( +5V und -5V )

Grüße Uwe

Hallo,
das möchte ich so noch nicht einsehen. Es ist aber gut möglich, das ich zu
dieser Zeit Schaltpläne nicht mehr lesen kann.

Ist es nicht so, das dieses Board eine intregierte Verstärkerschaltung
beinhaltet, die das Signal so aufbereitet, dass es der Arduino verarbeiten
kann?
Wie auch immer, einen kleine Sketch gibt es dazu auch.
Gruß und Spaß
Andreas

/*
microphone sketch

SparkFun breakout board for Electret Microphone is connected to analog pin 0
*/

const int ledPin = 13;            //the code will flash the LED in pin 13
const int middleValue = 512;      //the middle of the range of analog values
const int numberOfSamples = 128;  //how many readings will be taken each time

int sample;                       //the value read from microphone each time
long signal;                      //the reading once you have removed DC offset
long averageReading;              //the average of that loop of readings

long runningAverage=0;          //the running average of calculated values
const int averagedOver= 16;     //how quickly new values affect running average
                                //bigger numbers mean slower

const int threshold=400;        //at what level the light turns on


void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  long sumOfSquares = 0;
  for (int i=0; i<numberOfSamples; i++) { //take many readings and average them
    sample = analogRead(0);               //take a reading
    signal = (sample - middleValue);      //work out its offset from the center
    signal *= signal;                     //square it to make all values positive
    sumOfSquares += signal;               //add to the total
  }
  averageReading = sumOfSquares/numberOfSamples;     //calculate running average
  runningAverage=(((averagedOver-1)*runningAverage)+averageReading)/averagedOver;

  if (runningAverage>threshold){         //is average  more than the threshold ?
    digitalWrite(ledPin, HIGH);          //if it is turn on the LED
  }else{
    digitalWrite(ledPin, LOW);           //if it isn't turn the LED off
  }
  Serial.println(runningAverage);        //print the value so you can check it
}

Ok. in dem Sketch wird ja das signal nicht einfach gemessen sondern der offset subtrahiert und dann der aritmetische Mittelwert des quadrierten gelesenen Wertes gemachet.
Grüße Uwe

Also könnte ich das Mikrofon von Sparkfun jetzt benutzen, um das Projekt zu realisieren?
Und die andere Frage: Könnte ich auch folgendes benutzen ?

Denn das von Sparkfun hat enorm hohe Lieferkosten nach Europa.
Danke für eure Antworten!

Hallo,
dann bestelle doch hier:
http://www.watterott.com/de/Breakout-Board-mit-Kondensatormikrofon
Das sollte eigentlich funktionieren, wenn nicht 10.- Lehrgeld- und ein Problem.

Du "kannst" Dir das auch alles selber berechnen. Du brauchst ein Mikrofon und einen Mikrofonverstärker, der Dir ein Signal ausgibt,
das der Arduino verarbeiten kann.
Gruß und Spaß
P.S. das von Dir vorgeschlagende sollte auch funktionieren, mußt mal die Daten der beiden vergleichen.

Hallo!

Hier gibts das Sparkfun BOB auch noch:
http://physicalcomputing.at/shop/article_A-1145600k/Breakout-Board-mit-Elektret-Mikrofone.html?sessid=hcOzXXtmosmmKZV8kOlZ974ifC0ntOGrwzCUky1UavUMGbn1TEwS1dxAUaSofPpu&
Betreibe das MIC an 3,3 Volt und noch einem 5k8 in der GND Leitung mit diesem Sketch von der Sparkfun Seite

int currentValue;
int maxValue;
int minValue;
unsigned long timer;
int sampleSpan = 5; // Amount in milliseconds to sample data
int volume; // this roughly goes from 0 to 700

void setup() 
{
    Serial.begin(9600); 
    resetValues();
}

void loop() 
{
    currentValue = analogRead(A0);

    if (currentValue < minValue) {
        minValue = currentValue;
    } 
    if (currentValue > maxValue) {
        maxValue = currentValue;
    }

    if (millis() - timer >= sampleSpan) {
        volume = maxValue - minValue;

        Serial.println(volume);

        resetValues();
    }
}

void resetValues()
{
    maxValue = 0;
    minValue = 1024;
    timer = millis(); 
}

so kriegst eine schöne Ausgabe von 0-500, wennst dann ein Messgerät zum Abgleich hättest, könnte man die Ausgabe
angleichen und kriegt relativ plausible Anzeigewerte.

mfg Martin

Das hat mir jetzt schon echt geholfen! Danke!
Nun hab ich gerade zufällig ein kleines Electret Mikrofon Zuhause gefunden, aber leider hab ich keine Ahnung, wie man einen Verstärker bauen würde. Bräuchte ich noch irgendwelche IC oder reichen einfache Bauteile aus?
Frohe Ostern an alle!

Hallo,
das geht mit einfachen Bauteilen, wie auch mit IC´s. Schaue einmal beim großen "C" nach "Bausatz Mikrofonvorverstärker"
Bei den Datenblättern sind meistens auch die Schaltpläne bei. Oder "IxQuicken" -Schaltplan Mikrofonvorverstärker-
Gruß und Spaß
Andreas

Ich weiß, dass dieser Thread etwas älter ist aber ich wollte nochmal meinen Senf dazugeben.
Ich mache zurzeit ebenfalls ein Schulprojekt wo ich den frequenzbewerteten Schalldruckpegel in dBa benötige.
Ich empfehle dir für das Projekt den Adafruit 1063 zu verwenden. Stelle sicher, dass du den mit dem MAX4466 (Verstärker) bekommst, weil das Modell mit dem MAX9814 hat eine automatische Verstärkungsregulierung, die man nur schwer deaktivieren kann. Dann empfehle ich dir folgenden Blogeintrag zu lesen: Arduino sound level meter and spectrum analyzer | Arik Yavilevich's blog

Dann wärst du eigentlich gewappnet für dein Schülerprojekt. Ich habe den Blogeintrag auch übersetzt auf meiner Festplatte liegen, d.h wenn jemand die deutsche Version haben möchte soll er mich privat anschreiben.

PS: Lautstärke ist ein Maßeinheit und wird in phon angegeben. Man kann diese nicht messen sondern nur berechnen. Was du wahrscheinlich brauchst ist der frequenzbewertete Schalldruckpegel, den man ebenfalls nicht misst sondern aus den verstärkten Daten des Mikrofons bzw. den Datenmanipulationen des Bandpassfilters berechnet. Im Prinzip misst man den Schalldruck, weil das u.a. Mikrofon in Abhängigkeit zum Schalldruck seine Daten weiterleitet.