Arduino: Geräuschsensor LM393

Motivation

Da ich mir ein Theremin gebaut habe, wollte ich mir mit dem Arduino-Geräuschsensor LM393 eine Art Mikrofon bauen, bzw. einen Lautstärke regeler.

Anwendung:

Die Anwendung des Sensors ist ziemlich einfach. Man nimmt ein beliebiges Arduino-Board und verbindet vom Sensor VCC mit +5V, GND mit GND und OUT mit A0.


Nun wird einfach der analog Pin A0 mit analogRead(A0) ausgelesen. Der Arduino gibt abhängig von der Lautstärke entweder 26 oder 1023 als Wert an. Es kommt selten vor, dass sich ein Wert dazwischen befindet. Deswegen habe ich immer über einige Werte (500) gemittelt und dann den Durchschnitt bestimmt. Wird nun 10 Sekunden lang immer der Wert ermittelt, kann der Lautstärkeverlauf ziemlich grob bestimmt werden. Dieser ist umso genauer, über je mehr Werte gemittelt wird. Allerdings ist die Zahl der gemittelten Werte und die Werte die man pro Sekunde aufnehmen will, abhängig von der Geschwindigkeit des Computers. 
In folgenden Bildern ist der Lautstärkeverlauf für den Ton c eines Klaviers in Abhängigkeit der Zeit für verschiedene Anzahlen gemittelter Werte geplottet. Dabei ist zu erkennen, dass bei 10 Werten ein willkürlicher Verlauf ensteht, bei 5000 Werten jedoch eine stetige Kurve:


Wie zu sehen ist gibt es erst ab ca 500 Werten pro Mittelung einen Verlauf, der nicht zu große Abweichungen hat. 

Hier der Quellcode:

int audioPin = A0;
int j=1;
int seconds = 0;
int mills = millis();


void setup() {
  Serial.begin(115200);
}

void loop() {
  int soundWave;
  long Sound = 0;
  int range = 1000;
  soundWave = analogRead(audioPin);
  for (int i = 1;i<range;i++){
    soundWave = analogRead(audioPin);
    Sound = Sound + soundWave;
  }
  Serial.print(double(mills-seconds)/1000);
  Serial.print(" ");
  Serial.println(Sound/(range));
  j=j+1;
  mills = millis();
  if ((mills-seconds)>10000){
    while(1==1);
  }
}

Kommentare

Beliebte Posts aus diesem Blog

Matlab: GUI Interface

Matlab: Polarplot Achsenbeschriftungs- und Skalierfunktion

Matlab: Fehlergeraden