|
| 1 | +--- |
| 2 | + |
| 3 | +title: Sound Sensor |
| 4 | +tags: ["gpio"] |
| 5 | +-------------- |
| 6 | + |
| 7 | +## Funktionsweise |
| 8 | + |
| 9 | +Ein Sound Sensor funktioniert mittels eines Mikrofons. Die vom Mikrofon in elektrische Signale umgewandelten akustischen Schwingungen werden |
| 10 | +gegen einen Schwellenwert verglichen. Sobald die elektrischen Signale in ihrer Stärke einen gewissen Schwellwert übersteigen wird am Sensor |
| 11 | +ein digitaler Ausgang geschaltet. Es wurde Lärm oder ein Geräusch erkannt. |
| 12 | + |
| 13 | +Am CrowPi kann dieser Schwellwert mittels eines Potentiometers eingestellt werden. Am einfachsten geht das, wenn man auf das entsprechende |
| 14 | +LED bei den Status LEDS achtet und den entsprechenden Lärm verursacht welcher erkannt werden soll. Wird das Potentiometer nach rechts |
| 15 | +gedreht muss das entsprechende akustische Signal lauter sein, um vom Sensor erkannt zu werden. Auf die linke Seite gedreht am Potentiometer |
| 16 | +macht den Sensor viel empfindlicher gegenüber leisen Geräuschen. Zu finden ist das Potentiometer wie auf diesem Bild gezeigt: {{< img |
| 17 | +alt="Potentiometer des Sound Sensor" src="components/sound-sensor-potentiometer.jpg" >}} |
| 18 | + |
| 19 | +## Voraussetzungen |
| 20 | + |
| 21 | +### DIP Switches |
| 22 | + |
| 23 | +Für diese Komponente werden keine spezifischen DIP-Switches benötigt, so dass diese in der Standardkonfiguration belassen werden können: |
| 24 | + |
| 25 | +{{< dip-switches >}} |
| 26 | + |
| 27 | +## Verwendung |
| 28 | + |
| 29 | +Nachfolgend wird die Verwendung der Klasse {{< javadoc class="com.pi4j.crowpi.components.SoundSensorComponent" >}} beschrieben. |
| 30 | + |
| 31 | +### Konstruktoren |
| 32 | + |
| 33 | +| Konstruktor | Bemerkung | |
| 34 | +|:----------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------| |
| 35 | +| `SoundSensorComponent(com.pi4j.context.Context pi4j)` | Initialisiert einen Sound Sensor mit dem Standard-Pin für den CrowPi. | |
| 36 | +| `SoundSensorComponent(com.pi4j.context.Context pi4j, int address, long debounce)` | Initialisiert einen Sound Sensor mit einem benutzerdefinierten Pin. Zusätzlich kann mit `debounce` noch eine Entprellzeit in Mikrosekunden angegeben werden | |
| 37 | + |
| 38 | +### Methoden |
| 39 | + |
| 40 | +| Methode | Bemerkung | |
| 41 | +|:---------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------| |
| 42 | +| `boolean isNoisy()` | Gibt true zurück, wenn aktuell ein Geräusch vom Sensor erkannt wird | |
| 43 | +| `boolean isSilent()` | Gibt true zurück, wenn aktuell stille herrscht. | |
| 44 | +| `SoundState getState()` | Gibt den aktuellen Zustand des Sensors in Form des SoundState zurück. | |
| 45 | +| `void onNoise(SimpleEventHandler handler)` | Setzt den Event Handler, welcher bei auftretendem Lärm am Sensor aufgerufen werden soll. null deaktiviert diesen Event Listener. | |
| 46 | +| `void onSilence(SimpleEventHandler handler)` | Setzt den Event Handler, welcher bei verschwundenem Lärm am Sensor aufgerufen werden soll. null deaktiviert diesen Event Listener. | |
| 47 | + |
| 48 | +### Enumerationen |
| 49 | + |
| 50 | +- {{< javadoc class="com.pi4j.crowpi.components.SoundSensorComponent" subclass="SoundState" >}} enthält alle möglichen Zustände welche vom |
| 51 | + Sound Sensor zurückgegeben werden können. |
| 52 | + |
| 53 | +## Beispielapplikation |
| 54 | + |
| 55 | +Bei dieser Komponente wurde ein sehr simples Beispiel gewählt. Damit die Applikation jedoch richtig funktioniert muss erst der Sound Sensor |
| 56 | +so eingestellt werden, dass ein Händeklatschen erkannt wird. Am besten wie in der Funktionsweise beschrieben kurz ausprobieren. Als erstes |
| 57 | +wird mit einer simplen Statusabfrage geprüft, ob gerade stille im Raum herrscht. Falls es gerade schon zu laut wäre, würde das Programm |
| 58 | +abbrechen. Ist es ruhig registriert das Programm einen `onNoise` Event Handler, welcher mittels einer Zählvariable zählt wie oft schon Lärm |
| 59 | +erkannt wurde. Nach 3x Händeklatschen beendet die Applikation wieder. Für das Zählen in einer Lambdafunktion in Java muss ein spezieller |
| 60 | +Datentyp verwendet werden. Man sieht dies am `AtomicInteger count`. Der `AtomicInteger` ist eine spezielle Form eines normalen Integers, |
| 61 | +welcher jedoch auch innerhalb einer Lambdafunktion benutzt werden kann.{{< code |
| 62 | +file="src/main/java/com/pi4j/crowpi/applications/SoundSensorApp.java" language="java" >}} |
| 63 | + |
| 64 | +## Weitere Möglichkeiten |
| 65 | + |
| 66 | +- Mit der Relaiskomponente kombiniert könnte eine Lampe mittels klatschen ein und ausgeschaltet werden. |
| 67 | +- Es könnte eine Alarmanlage gebaut werden, welche anhand von Lärm einen Eindringling erkennt. |
| 68 | + |
0 commit comments