Was ein Klatschschalter ist, muss sicher nicht weiter erklärt werden. Mit einem Händeklatsch oder ähnlichen Geräuschen kann Licht, eine Steckdose oder
ein elektrisches Gerät
ein- bzw. ausgeschaltet werden. Da sich hinter der Funktion ein Geräuschsensor (kurz Mikrofon) verbirgt, kann das Klatschen oder Klopfen gleich über Rufe „Licht an“
oder „Licht aus“ erweitert werden. Eine durchaus nützliche Funktion, wenn es z.B. dunkel ist. Noch interessante wird es, wenn ein solcher akustischer Schalter
mit einem Bewegungssensor gekoppelt
wird. So könnte eine solche Schaltkombination dafür sorgen, dass das Licht automatisch ausgeschaltet wird, wenn man den Raum verlassen hat und das Klatschen vergessen
hat. In dem folgenden Versuch konstruieren wird einen einfachen Klatschschalter, der aus lediglich drei Komponenten besteht. Die Schlüsselrolle in der Schaltung
übernimmt ein Mikrofonmodul, das das Klatschen erfassen und mit einem digitalen Signal melden kann. Der Mikrocontroller ESP32, die zweite Komponente der Schaltung,
wertet das Signal aus und schaltet
dem entsprechend die dritte Komponente der Schaltung: Ein Relais.
Das in China hergestellte Mikrofonmodul wird unter verschiedenen Bezeichnungen wie etwa KY-037 oder KY-038 vertrieben. Auf der Rückseite des hier
abgebildeten Moduls findet sich Bezeichnung HW-484. Der Aufbau dieser Module ist grundsätzlich gleich. Neben einem Mikrofon befindet sich auf der kleinen Platine
ein Potentiometer und der Komparator LM393. Mit dem Potentiometer wird der Schwellwert eingestellt. Der Komparator vergleicht die Schallwellen mit dem eingestellten
Schwellenwert und steuert den digitalen Ausgang des Moduls. Darüber hinaus gibt es auf dem Modul zwei Leuchtdioden. Mit der einen LED wird angezeigt, ob die
Spannungsversorgung anliegt und das Modul im Betrieb ist. Mit der zweiten LED wird signalisiert, ob der Schwellwert überschritten wurde
oder nicht.
Das Modul verfügt über vier Anschlüsse. Zwei dienen dem Anschluss von Spannungsversorgung. Bei dem dritten Anschluss handelt es sich um den digitalen,
bei dem vierten um den analogen Ausgang.
Das Modul kann mit 3,3 V oder 5V betrieben werden.
ESP32
Die Aufgabe des Mikrocontrollers in dieser Schaltung ist alles andere als kompliziert. Er wartet, bis das Mikrofonmodul mit seinem digitalen Ausgang einen
Schallschwellenübertritt meldet und schaltet dann das Relais. Andere Aufgaben sind für ihn in der Runde nicht vorgesehen. Seine Eingänge und Ausgänge arbeiten mit
einer Spannung von 3,3V. Eine höhere Spannung kann das Modul beschädigen. Damit das nicht geschieht, wird das Mikrofonmodul, dessen Ausgang direkt mit einem Eingang
des ESP32 verbunden ist, mit der 3,3V Spannung, die ESP32 zur Verfügung stellt, eingespeist.
Das Relaismodul VMA406 ist mit dem 5V-Relais SRD-05VDC-SL-C ausgestattet. Das Relais verfügt über einen Wechslerkontakt, das mit 10A belastet werden kann.
In der Schaltung wird mit dem Relais lediglich eine Leuchtdiode geschaltet. Die Gefahr, dass der Spulenstrom den Mikrocontroller zu stark belastet, besteht nicht.
Das Relaismodul wird separat mit 5V eingespeist, zum Schalten des Relais wird lediglich ein digitales Signal benötigt. Da das Modul auch über eine Freilaufdiode verfügt,
sind weitere Schutzmaßnahmen gegen induktive Spannungen nicht notwendig.
// ********************************************************************************************
// Klatschschalter mit ESP32
// und einem Schallerkennungsmodul mit einem Mikrofon, Komparator LM393 und Einstellpoti
// ESP32-Dev-KitC V4
// Arduino IDE 2.2.1
// ********************************************************************************************
int Relais_Ausgang = 27; // Am Pin 27 wird Relais-Modul angeschlossen
int Mikrofon = 14; // Pin 14 wird mit dem digitalen Ausgang des Mikrofons verbunden
bool Digital_Signal; // Aktueller Zustand des Mikrofonsignals
bool Val = LOW; // Hilfsvariable (Erkennung der positiven Flanke)
void setup() {
pinMode(Relais_Ausgang,OUTPUT); // Pin 27 ist Ausgang
pinMode(Mikrofon,INPUT); // Pin 14 ist Eingang
}
void loop() {
Digital_Signal = digitalRead(Mikrofon); // Signal von Mikrofon auslesen
if (Digital_Signal == LOW) { // Hilfsvariable zurücksetzen
Val = 0;
}
if ((Digital_Signal == HIGH) && (Val == 0)) { // Relais Ausschalten
if (digitalRead(Relais_Ausgang) == HIGH) {
digitalWrite(Relais_Ausgang, LOW);
Val = 1;
delay (1000); // Wartezeit
}
}
if ((Digital_Signal == HIGH) && (Val == 0)) { // Relais Einschalten
if (digitalRead(Relais_Ausgang) == LOW) {
digitalWrite(Relais_Ausgang, HIGH);
Val = 1;
delay (1000); // Wartezeit
}
}
}
// ********************************************************************************************