zurück zum Artikel

Lärm-O-Meter fürs Klassenzimmer

Bernd Heisterkamp
Eine Holzplattform mit einer Skala und einem sternförmigen Calliope

Ein Lärm-O-Meter zeigt nicht nur, wann es in der Klasse zu laut wird – beim Bau dieses Calliope-Projekts können die Schülerinnen und Schüler auch Programmieren und die Arbeit mit Sensor, Motor und Servo üben.

Auf einem Holzbrett stehen ein sternförmiger Calliope mini und eine Anzeige mit verschieden zufriedenen Gesichtern. Durch das Holz geht ein Pendel mit Propeller und unten hängen vier Metallrohre.

Das gesamte Lärm-O-Meter

Wer kennt das nicht, im Eifer des Gefechts steigt der Lärmpegel kontinuierlich bis die Lehrerin zur Ruhe mahnen muss. Im Zeitalter der Digitalisierung sollte es bessere Methoden geben, wie dieses Lärm-O-Meter, das Lehrkräfte mit ihrer Klasse oder Arbeitsgruppe bauen können. Es lässt ein Klangspiel erklingen, sobald der mittlere Lärmpegel eine Grenze übersteigt und zeigt über einen Analogzeiger das aktuelle Befinden an. Ist die Klasse ruhig, wandert der Befindlichkeitszeiger nach rechts zum lachenden Gesicht, ansonsten geht es nach links zum wütenden Gesicht, wo die Strafarbeit lauert.

Basis dieses Projektes ist ein Calliope mini [1]: der Mikrocontroller wurde speziell für Grundschüler entwickelt und bringt neben dem Prozessor eine ganze Reihe von Sensoren (Temperatur, Helligkeit, Lautstärke, Beschleunigung, Magnetfeld, Analog- und Digitaleingänge) und Aktoren (LED-Matrix, Lautsprecher, Motortreiber, Analog- und Digitalausgänge) mit.

Mittels des eingebauten Mikrofons wird der mittlere Lärmpegel in der Klasse bestimmt. Bei Überschreiten des Grenzwertes wird ein Minimotor mit Propeller ein- und ausgeschaltet, der so einen Klöppel in Bewegung setzt. Dieser stößt gegen die Aluminiumrohre unterschiedlicher Länge und erzeugt das mahnende Klangspiel.

Eine Holzplattform mit einer Skala, die auf ein wütendes Gesicht zeigt, und einem sternförmigen Calliope

Wird es zu laut, zeigen Calliope mini und die Skala einen Totenkopf und auf ein ärgerliches Gesicht - außerdem lässt das Pendel das Glockenspiel erklingen.

Zudem wird über einen digitalen (Puls-)Ausgang ein kleiner Servo angesteuert. Bei Programmstart befindet sich der Servo in der Mittelposition. Vergeht ein bestimmtes Zeitintervall, ohne dass es zu einer Überschreitung der Lärmgrenze kommt, wird das Servo angesteuert und bewegt den Befindlichkeitsanzeiger um 45° nach rechts. Bei jeder Überschreitung der Lärmgrenze wird der Zeiger dagegen um 45° nach links bewegt.

Schema des Lärm-O-Meters

Das Schema des Lärm-O-Meters

In erster Line geht es bei diesem Projekt darum, die Schülerinnen und Schüler zum Basteln und Programmieren zu motivieren. Der Calliope mini kann dabei mit verschiedenen Sprachen über den Browser [2] programmiert werden. In diesem Projekt wurde der grafische PXT-Editor verwendet. Zum Erlernen der ersten Grundlagen gibt es auf der Calliope-Webseite zahlreiches Material für Lehrkräfte [3]. In diesem Artikel geht es um die Ansteuerung von Servos und Motoren sowie die Nutzung des eingebauten Mikrofons. Alle beschriebenen Programmsketche gibt es als ZIP-Datei zum Herunterladen [4] .

Der Aufbau der Hardware ist sehr einfach gehalten, wie in den folgenden Bildern dokumentiert. Den Klangkörper bilden Aluminiumröhren unterschiedlicher Länge, die über einen Nylonfaden an einer Grundplatte befestigt sind.

Schema der Grundplatte

Schema der Grundplatte

Eine Gewindestange dient als Klöppel. Dazu befestigen wir an ihrem unteren Ende dicke Unterlegscheiben. Eine zweite Gewindestange, die über der Pendelachse befestigt ist, treibt mit einem Motor mit Propeller den Klöppel an.

Schema des Klöppels und Pendels

Schema des Klöppels und Pendels
Motorbefestigung

Die Motorbefestigung

Für die Befindlichkeitsanzeige kleben wir ein Servo auf die Grundplatte und schneiden aus Pappe oder Sperrholz eine Anzeige, die mit passenden Smileys beklebt wird. Den Calliope stecken wir in entsprechend vorbereitete Schlitze in der Grundplatte und kleben seine Batteriebox mit doppelseitigem Klebeband auf.

Blick von oben auf die Grundplatte

Blick von oben auf die Grundplatte

Für die Motorsteuerung löten wir zunächst Anschlusspins an die Motorschnittstelle, die sich zwischen Prozessor und Batteriestecker befindet. Normalerweise reichen die 3 Volt des Calliope nicht für einen Motor aus – für dieses Projekt habe ich einen kleinen Motor eines defekten Mini-Quadrokopter genommen, der mit 3 Volt auskommt. Die Spannungsversorgung muss allerdings von einem Batteriepack kommen, da die Versorgung über den USB-Port des Computers nicht ausreicht. Für andere Motoren muss über VM und GND eine separate Spannungsquelle angeschlossen werden.

Da wir den Motor im Vorwärts- und Rückwärtsbetrieb verwenden wollen, verbinden wir seine beiden Anschlüsse mit den PINs Motor A und Motor B (siehe Bild unten). Alternativ kann man zwei Motoren nutzen, die jeweils an einen Motorpin und GND angeschlossen werden – in diesem Fall kann die Motorrichtung allerdings nicht geändert werden.

Schema Motor-Anschluss an den Calliope mini

Anschluss des Motors an den Calliope mini

Um die Ansteuerung des Motors zu testen, wählen wir im PXT-Editor aus dem Menüpunkt "Motoren" erst den Befehl Motor an mit 50 und ziehen ihn auf die Arbeitsfläche. Für 50 kann eine Zahl zwischen 0 (Motor ist aus) und 100 (Motor läuft mit 100% Leistung) eingetragen werden. Auch negative Zahlen sind möglich, sie lassen den Motor rückwärts laufen. Nachdem der Motor eingeschaltet wurde (Motor an mit 100) soll er eine halbe Sekunde laufen, daher wird das Programm mit dem Befehl pausiere (ms) 500 für 500 ms angehalten, der Befehl steht im Menüpunkt "Grundlagen". Die Farbe der Programmzeilen entspricht übrigens den Menüpunkten.

Programmsketch der Motorsteuerung

Programmsketch der Motorsteuerung

Schließlich wird der Motor mit dem Befehl Motor Pause ausgeschaltet (im Menüpunkt "Motoren" erst Motoren auslaufen wählen und auslaufen zu Pause ändern). So bauen wir einen Ablauf aus Vorwärts ein – Pause – Rückwärts ein – Pause. Die kleinen Pausen bauen wir ein, um den kleinen Motortreiber nicht zu überlasten, wenn er abwechselnd volle Vorwärts- und Rückwärtsbewegungen ausführt. Die bestmöglichen Antriebs- und Pausenlängen müssen je nach Pendel ausprobiert werden.

Der bisher programmierte Ablauf soll viermal wiederholt werden, daher fassen wir die Befehle in eine Schleife mit einer festgelegte Anzahl Durchläufe ein: der Befehl 4-mal wiederholen befindet sich im Menüpunkt "Schleifen". Schließlich soll der Ablauf bei Drücken des Knopfs A gestartet werden. Die Schleife wird daher in die Aktion Wenn Knopf A gedrückt (Menüpunkt "Eingabe") eingefasst.

Hat ihr Servo für den Befindlichkeitszeiger einen Grove-Stecker, kann er an A1 eingesteckt werden. Ansonsten müssen sie den Stecker abschneiden und die nötigen Anschlusspins anlöten: Der Servo wird an mit + an 3,3V, mit - an GND und mit Impuls an Pin C17 angeschlossen. Da es bei Servos keine einheitliche Belegung der Anschlüsse gibt, hilft unsere Tabelle oder der Blick ins Datenblatt weiter. Zum Testen lassen wir den Zeiger schrittweise von der linken Seite auf die rechte wandern, so als ob die Klasse eine Weile ruhig arbeitet.

Tabelle Servo-Farbcodes

Die Tabelle zeigt eine Übersicht der gebräuchlichsten Servo-Modelle und deren Belegung. Im Zweifelsfalll hilft der Blick ins Datenblatt.

Um den Servo anzusteuern, wählen wir unter "Fortgeschritten" "Pins" erst schreibe Servo an Pin P1 auf 180. Dann wählen wir statt P1 den richtigen Pin C17 aus. Die Zahl steht für die Drehbewegung des Servos in Grad und kann je nach Servo für die gleiche Rotation variieren. In unserem Beispiel ist der Servo bei 160 ganz links (wütendes Gesicht) und bei 00 ganz rechts (glückliches Gesicht). Dabei gilt: verringert man die Zahl um 40, dreht der Servo den Zeiger etwa 45° weiter nach rechts.

Schema Servo-Anschluss an den Calliope mini

Anschluss des Servos an den Calliope mini

Statt einen festen Wert anzugeben, soll die aktuelle Position des Befindlichkeitszeigers eingetragen werden, die wir vorher in einer Variablen speichern. Dazu wählen wir im Menü "Platzhalter" den Button "Neuen Platzhalter anlegen" und geben der Variablen den Namen BravZustand. Den Namen tragen wir in den Befehl ein: Schreibe Servo an Pin C17 auf BravZustand. Setzen wir davor den Befehl Ändere BravZustand um -40 (ebenfalls aus dem Menü "Platzhalter"), wird der Servo nun nach rechts bewegt. Da der Servo nur angesteuert werden soll, wenn er noch nicht ganz rechts ist, werden die Befehle in eine wenn-dann Klammer eingefasst (Menüpunkt "Logik") und aus dem gleichen Menüpunkt die Abfrage 0 < 0 hinzugefügt und auf BravZustand > 0 geändert.

Programmsketch der Servosteuerung

Programmsketch der Servosteuerung
Calliope mini

Der Mikrocontroller Calliope mini wurde in Deutschland entwickelt und soll bereits in der Grundschule Programmierkenntnisse vermitteln.

Darum herum setzen wir eine weitere wenn-dann-Klammer, die später mit der Lärmpegelmessung überpüfen soll, ob die Kinder leise waren. Erstmal nutzen wir sie aber nur, um den Zeiger alle 15 Sekunden (Variable BravLimit) anzusteuern. Die Zeit der letzten Zeigerbewegung speichern wir, indem wir die Variable BravStart am Ende der Klammer auf die aktuelle Systemzeit (Laufzeit (ms) aus dem Menüpunkt "Eingabe mehr") ändern. Mit BravDauer speichern wir außerdem, wieviel Zeit seither vergangen ist: Aus dem Menüpunkt "Mathematik" nehmen wir 0 - 0 und ersetzen dies zu Laufzeit (ms) - BravStart. Solange BravDauer kleiner ist als BravLimit, also keine 15 Sekunden vergangen sind, passiert nichts, anschließend unsere innere wenn-dann-Abfrage.

Zum Testen soll dann zum Programmstart (beim Start) und beim Drücken des Knopfes A der Zeiger in die linke Position gefahren und alle Variablen auf den Startwert gesetzt werden. In den Klammern setzen wir also BravZustand auf 160, BravStart auf die Systemzeit, BravLimit auf 15 Sekunden und steuern den Servo nach links mit Schreibe Servo an Pin C17 auf BravZustand.

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

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

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.

Eine Holzplattform mit einer Skala, die auf ein lachendes Gesicht zeigt, und einem sternförmigen Calliope

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.

Das vollständige Programm setzt sich aus den bereits beschriebenen Komponenten zusammen: Beim Start wird der Befindlichkeitszeiger mit ändere BravZustand auf 80 auf etwa 90 Grad gedreht und die weiteren Variablen angelegt. Das unter Motorsteuerung beschriebene Programm wird nicht beim Drücken des Knopfes A gestartet, sondern wenn der Wert von Count größer 20 ist (Befehl: wenn count > 20). In diesem Fall wird nach der Motoraktivierung auch der Befindlichkeitszeiger um eine Stufe nach links bewegt und der Wert für BravStart, also der Zeitpunkt ab dem wieder Ruhe herrscht, auf die aktuelle Systemzeit gesetzt.

Kompletter Programmsketch

Kompletter Programmsketch

Statt einer Lärmpegelmessung könnten auch andere Ereignisse das Geläut aktivieren: so könnte Temperaturmessung über ein Hitzefrei entscheiden oder ein externer CO2-Sensor Bescheid geben, wenn das Klassenzimmer durchgelüftet werden sollte. Alternativ könnte ein zweiter Calliope auf dem Pult der Lehrperson das Lärm-O-Meter über Bluetooth aktivieren. Auch ein Wettbewerb wäre möglich, bei dem Schülerteams eigene Anwendungen programmieren, denn sicher haben die Kinder viele eigene Ideen. Viel Spaß beim Ausprobieren und die besten Lösungen ans Make Magazin schicken. (hch [11])


URL dieses Artikels:
https://www.heise.de/-3879235

Links in diesem Artikel:
[1] https://www.heise.de/select/make/2017/2/1492870483451450
[2] https://calliope.cc/editor
[3] https://www.calliope.cc/schulmaterial
[4] https://www.heise.de/downloads/18/2/3/1/0/3/9/1/Downloads_Laerm-O-Meter-Calliope.zip
[5] https://www.heise.de/select/make/2017/2/1492870483451450
[6] https://www.heise.de/hintergrund/Calliope-mini-3676938.html
[7] https://www.heise.de/news/Calliope-mini-Mikrocontroller-fuer-die-Grundschule-3361271.html
[8] https://www.heise.de/thema/calliope-mini
[9] https://shop.heise.de/katalog/larmampel-furs-klassenzimmer
[10] https://www.heise.de/hintergrund/Make-Leseproben-als-PDF-3079861.html
[11] mailto:hch@make-magazin.de