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:
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.
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
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 ! 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:
-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.
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 )
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
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.
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.
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.