A11|01 Der Schallsensor
Analog Sound Sensor


Sensorwerte / Mix an Sensoren

Mit einem Schallsensor kann man witzige Projekte verwirklichen. Er sollte aber nicht mit einem Sprachsensor verwechselt werden, der auf die menschliche Stimme reagiert. Auf der Platine befinden sich ein Mikrofon (50Hz bis 10kHz) und einen Verarbeitungsschaltkreis zur Umwandlung von Schallwellen in elektrische Signale.

 

Spezifikationen
- Signalart: analog
- Spannung: 3,3V – 5V
- Pinabstand: 2,54mm
- Betriebsstrom: <10mA

Der Schallsensor kann nur die Tonstärke/Lautstärke des Schalls messen: Zupft man eine Gitarrensaite, entsteht durch die Schwingung ein Ton. Wird die Saite stark gezupft, schwingt sie mit einer großen Amplitude. Da die Amplitude die Tonstärke bestimmt, entsteht ein lauter Ton. Wird die Saite hingegen nur leicht gezupft, dann entsteht ein leiser Ton – die Saite schwingt mit kleiner Amplitude.

Zeichenfläche+132.png

Das Modul hat einen eingebauten Potentiometer zur Empfindlichkeitseinstellung. Mit der Verstellung des Potentiometers wird das Modul an die Umgebung angepasst. Ist der Sensor sehr nahe an der Geräuschquelle, kann es sein, dass er schon bei leisen unerwünschten Geräuschen entsprechend große Signale an das Arduino weitergibt. In diesem Fall ist die hardwareseitige Justierung von Vorteil. Umgekehrt gilt dasselbe: wenn die Geräuschquelle und der Sensor voneinander weiter weg sind, ist eine Signalverstärkung mit dem Potentiometer hilfreich.

 

Der Aufbau

Schließen wir den Schallsensor an das Arduino an. Die Verkablung ist einfach. Beginne damit, den V-Pin (VCC) am Modul mit 5V am Arduino und den G (GND) mit dem GND-Pin zu verbinden. Verbinde nun den S-Pin (Signal) mit dem analogen Pin A0 an deinem Arduino. Das war's schon! Folgende Abbildung zeigt die Verdrahtung.

 
 

Der minimal Sketch

Der Sketch liest die Werte der Schallwellen ein und sobald der Schwellwert überschritten ist, wird eine Nachricht an den seriellen Monitor gesendet. Gleichzeitig wird die interne LED des Arduino leuchten. Kopiere den unteren Sketch, füge ihn in die Arduino IDE ein und lade ihn auf das Arduino-Board rauf.

/********************************************************
A11|01 Der Schallsensor
Mr Robot UXSD / www.mrrobotuxsd.com
*********************************************************/

int sonicPin = A0;   //Pin-Nummer des Schallsensors
int ledPin = 13;     //Pin-Nummer der LED
int sonicValue = 0;  //Variable zum Speichern der Schallsensor-Werte
int threshold = 150; //Schwellwert für die Aktivierung der LED

  
void setup() 
{
  //Initialisiere die Serielle Kommunikation mit 9600 Bits pro Sekunde:
  Serial.begin(9600);
  
  pinMode(ledPin, OUTPUT);  //den ledPin als OUTPUT deklarieren
}


void loop() 
{
  sonicValue = analogRead(sonicPin); //lies die aktuellen Schallsensor-Werte

  if(sonicValue > threshold) //Wenn der Schwellwert überschritten wird
  {
    //Sende den Schallsensor-Wert und eine Nachricht
    Serial.print("Schallsensor: "); 
    Serial.println(sonicValue);
    Serial.print("  LAUT!! "); 
    
    digitalWrite(ledPin, HIGH); //schalte die LED ein
    delay(100); //Kleine Verzögerung: Debouncing
    }
    else
    {
      digitalWrite(ledPin, LOW); //schalte die LED aus
    }
}
 

Schalte den seriellen Monitor ein, indem du in der Arduino IDE in der Menüleiste auf Werkzeuge > Serieller Monitor gehst.

Du solltest nun die folgende Anzeige sehen:

 

Der Sketch im Detail

Der Sketch beginnt mit der Initialisierung von unterschiedlichen Variablen:
sonicPin (der analog Pin für den Sensor)
ledPin (der digitale Pin für die LED)
sonicValue (Variable um die Werte des Sensors zu speichern)
threshold (Variable um den Schwellwert einzustellen)
Mit der Variable threshold können wir den Lautstärke-Punkt einstellen, auf die die Schaltung reagieren soll.

int sonicPin = A0;   //Pin-Nummer des Schallsensors
int ledPin = 13;     //Pin-Nummer der LED
int sonicValue = 0;  //Variable zum Speichern der Schallsensor-Werte
int threshold = 150; //Schwellwert für die Aktivierung der LED
 

Der void setup() ist relativ unspektakulär. Hier initialisieren wir die serielle Kommunikation und stellen die LED als OUTPUT ein.

void setup() 
{
  //Initialisiere die Serielle Kommunikation mit 9600 Bits pro Sekunde:
  Serial.begin(9600);
  
  pinMode(ledPin, OUTPUT);  //den ledPin als OUTPUT deklarieren
}
 

In der void loop() Schleife lesen wir den Sensorwert mit analogRead(sonicPin); ein und speichern ihn in der Variable sonicValue.

void loop() 
{
  sonicValue = analogRead(sonicPin); //lies die aktuellen Schallsensor-Werte
  ...
}
 

Wenn der Schwellwert threshold überschritten wird, geht das Programm in die if-Abfrage. Hier wird zum einen eine Nachricht an den seriellen Monitor gesendet und dann die LED mit digitalWrite(ledPin, HIGH); eingeschaltet.

if(sonicValue > threshold) //Wenn der Schwellwert überschritten wird
{
  //Sende den Schallsensor-Wert und eine Nachricht
  Serial.print("Schallsensor: "); 
  Serial.println(sonicValue);
  Serial.print("  LAUT!! "); 
    
  digitalWrite(ledPin, HIGH); //schalte die LED ein
  ...
}
 

Die kleine Verzögerung delay(100); dient zum Debouncing. Beim Debouncing werden Fehlauslöser reduziert. Du kannst mit diesem Wert experimentieren, um klare und eindeutige Ergebnisse zu bekommen.

delay(100); //Kleine Verzögerung: Debouncing
 

Falls die if-Abfrage nicht aufgerufen wurde, wird die LED ausgeschaltet. Dadurch wird sichergestellt, dass die LED nur dann leuchtet, wenn der Schwellwert überschritten wird.

else
{
  digitalWrite(ledPin, LOW); //schalte die LED aus
}
 

Falls du die hier beschriebenen Elektronik-Module nicht hast, kannst du sie in meiner Einkaufsliste finden. Warum ich selber hauptsächlich mit Modulen der Marke Keyestudio arbeite, erläutere ich unter diesem Blog-Artikel.

In dieser Übersicht äußere ich Empfehlungen aller Art.

Hier kommst du wieder zur Übersicht aller Module.