Lärm-O-Meter fürs Klassenzimmer

Seite 3: Lärm messen und mitteln

Inhaltsverzeichnis

Für die Lärmpegelmessung brauchen wir das im Calliope eingebaute Mikrofon. Da der Lärmpegel von dauerhaften Umgebungsgeräuschen und dem Abstand der Geräuschquellen zum Mikrofon abhängig ist, müssen wir es kalibrieren. Das untenstehende Programm hilft, die richtige Einstellung zu finden.

Zunächst erstellen wir im Platzhaltermenü eine neue Variabel Pegel. An den Befehl ändere Pegel auf hängen wir statt eines Wertes den Pin-Befehl lese analoge Werte von Pin MIC – so wird der Variabel Pegel stets der aktuelle Lärmpegel zugewiesen. Der Wert kann theoretisch zwischen 0 und 1000 schwanken. In den weiteren Variablen Tief und Hoch werden diese theoretischen Grenzen mit den Befehlen ändere Tief auf 0 und ändere Hoch auf 1000 gespeichert. Da dies nur einmal geschehen muss, wird dies in beim Start eingefasst.

Programmsketch der Kalibrierung

Für die Darstellung des Lärmpegels soll die Messung auf einen Wert zwischen 0 und 25 normiert werden. Wird also der Höchstwert 1000 gemessen, wird er als PegelNormiert mit 25 gespeichert. Entsprechend wird 0 als 0 gespeichert und alle anderen Messwerte zwischen 0 und 25. Hierfür wird ändere PegelNormiert auf mit dem folgenden Block aus dem Menü Pin genutzt:

verteile Pegel
von niedrig Tief
von hoch Hoch
bis niedrig 0
bis hoch 25

Die Lärmpegelmessung überprüfen wir auch grafisch und nutzen dazu die LED-Matrix des Calliope: Mit dem Befehl zeichne Balkendiagram von PegelNormiert bis 25 (Menüpunkt LED) werden je nach Wert von PegelNormiert unterschiedlich viele der 25 LEDs in einer Balkengrafik angesteuert. Bei einem extrem lauten Geräusch müsste nun der Pegelwert 1000 erreicht werden und alle LEDs leuchten.

Arduino-Lärmampel

In Make 4/15 haben wir eine arduino-basierte Lärmampel vorgestellt. Der Artikel steht als kostenlose Leseprobe zur Verfügung:

Um die Lärmgrenze zu bestimmen, nutzen wir nun die beiden Knöpfe. Ein Druck auf Knopf B soll das Limit Hoch um 50 Punkte reduzieren, damit bei einem Messwert von 950 alle LEDs leuchten. Wir fassen also ändere Hoch um -50 in wenn Knopf B gedrückt ein. Drückt man Knopf B jetzt vier Mal ist Hoch gleich 800 und bei einem Messwert von 800 leuchten alle LEDs. Nach dem gleichen Prinzip geht man für Tief und Knopf A vor und erhöht den Wert bei Knopfdruck. Damit man weiß, wie hoch der aktuell eingestellte Pegel ist, wird dieser bei jeder Änderung mit dem Grundlagen-Befehl zeige Nummer Tief bzw. zeige Nummer Hoch angezeigt.

Für diese Anzeige setzen wir die Lärmpegelmessung mit der Variablen Pause aus: Sie darf nur laufen, wenn Pause = falsch. Dies wird beim Start mit ändere Pause auf falsch standardmäßig eingestellt, während die Knopf-Abfragen Pause erst auf wahr ändern und später wieder auf falsch setzen.

Je weiter sich Hoch und Tief annähern, desto empfindlicher reagiert die Anzeige auf Geräusche in der Umgebung. Im Bereich zwischen 500 für Tief und 600 für Hoch sollte man laute Gespräche gut erfassen. Für dieses Projekt wurde 585 als Grenzwert für Lärm gewählt.

Der Pegelwert ist nur eine Momentaufnahme und würde das Klangspiel bei jedem Niesen aktivieren. Um das zu vermeiden, ermitteln wir einen Durchschnittswert über einen kurzen Zeitraum. Unser zuvor ermitteltes Limit wird beim Start mit ändere Laermgrenze auf 585 in der Variabel Laermgrenze gespeichert und eine Testzeit von 5 Sekunden festgelegt.

Programmsketch der Pegelmessung

In einer Dauerschleife wird nun der Lärmpegel wie zuvor am Mikrofon gemessen, aber in der Variabel LaermPegel gespeichert. Mit der Abfrage wenn LaermPegel < Laermgrenze wird überprüft, ob der Grenzwert eingehalten wird und dann mit show icon happy ein Smiley auf dem LED-Feld angezeigt. Wird der Wert Laermgrenze überschritten, wird zunächst ein Totenkopf angezeigt (Befehl: show icon skull) und eine Messreihe für die Dauer von Testzeit gestartet. Dazu wird die aktuelle Systemzeit (Laufzeit (ms)) in den Variabeln SampleStart und Aktuell gespeichert. Um die Messung zu begrenzen, nehmen wir eine während-mache-Schleife und vergleichen in ihrer Abfrage, ob Testzeit größer ist Aktuell - SampleStart (Menüpunkt "Mathematik"). Am Ende der Schleife wird Aktuell auf die aktuelle Systemzeit gesetzt, während SampleStart gleich bleibt.

Bei jedem Durchlauf der Schleife wird mit ändere Laermpegel auf lese analoge Werte von Pin Mic erneut der aktuelle Messwert in der Variablen Laermpegel gespeichert. Mit wenn LaermPegel > Laermgrenze wird geprüft, ob die Lärmgrenze überschritten wurde. Immer wenn es zu laut ist, setzen wir die Variable Count wie einen Zähler um 1 hoch (ändere Count um 1). Der Zählerstand wird mit zeichne Balkendiagramm von Count bis 25 auch grafisch dargestellt.

Smileys auf dem Calliope und der Skala: alles im Lot.

Ist der Lärmlevel in der Klasse hoch, wird der Wert von Count entsprechend hoch sein, bei einem einzelnen Nieser eher klein. Somit kann Count als eine Art durchschnittlicher Lärmpegel angesehen und als Trigger für weitere Aktionen genutzt werden.