Klatschsensor

Ich versuche einen Klatschsensor in meine Schaltung zu integrieren.
Vom Gedanken her: Du klatschst in die Hände und ein Ausgang soll geschaltet werden.
Um das zu realisieren habe ich den KY-038 Microphonsensor benutzt.
if ( digitalRead(A1) )
{
Serial.print("Es wurde geklatscht. ");
Serial.print("Sensorwert: ");
Serial.println( analogRead(A1) );
LichtEinschalten();
delay(5000);
LichtAusschalten();
}

Das ganze klappt zwar auch, allerdings nicht sehr gut. Der Sensor nimmt nur ein Klatschen innerhalb ca. 1m wahr.
Er soll aber eigentlich den ganzen Raum registrieren.

Könnt ihr mir vllt einen besseren Klatschsensor empfehlen oder mir sagen wie ich meinen verbessern kann?

Diese billigen Microfon-Sensoren taugen nicht als Klatschsensor.
Diese sind nicht empfindlich genug und haben eine zu geringe Verstärkung.

Auch dei Sketch passt nicht. Erst möchtest du den Pin A1 digital auslesen, es fehlt aber wonach (HIGH oder LOW),dnach liest du den Pin A1 digitalaus.
Was mmöchtest du denn ?

BenWolf:
Ich versuche einen Klatschsensor in meine Schaltung zu integrieren.
Vom Gedanken her: Du klatschst in die Hände und ein Ausgang soll geschaltet werden.
Um das zu realisieren habe ich den KY-038 Microphonsensor benutzt.
if ( digitalRead(A1) )
{
Serial.print("Es wurde geklatscht. ");
Serial.print("Sensorwert: ");
Serial.println( analogRead(A1) );
LichtEinschalten();
delay(5000);
LichtAusschalten();

}

Das ganze klappt zwar auch, allerdings nicht sehr gut. Der Sensor nimmt nur ein Klatschen innerhalb ca. 1m wahr.
Er soll aber eigentlich den ganzen Raum registrieren.

Könnt ihr mir vllt einen besseren Klatschsensor empfehlen oder mir sagen wie ich meinen verbessern kann?

Vielleicht kannst Du Deine Schaltung verbessern?

Vielleicht kannst Du Dein Testprogramm verbessern?

Wie ist der Sensor denn am Arduino angeschlossen?

Hast Du den Analogausgang (Analog Output AO) oder den Digitalausgang (Digital Outout DO) des Sensors mit dem Arduino-Analogeingang A1 verbunden?

@HotSystems
Wenn ich in der if Abfrage nicht nach High oder Low frage wird er nach High fragen.
Ja ich lese den analogen Eingang digital aus, habe den Poti hochgedreht bis er mir fast von selbst einen Wert zurückgibt der digital als High gewertet wird. Das Klatschen bewirkt ja nur eine kleine Veränderung und so habe ich mir andere Frequenzen (Stimmen etc) rausgefiltert.

@jurs
Habe den Analogausgang des Sensors genommen und mit dem Analogeingang vom Arduino genommen

Welchen Sensor kann ich den besser dafür nehmen?

BenWolf:
Habe den Analogausgang des Sensors genommen und mit dem Analogeingang vom Arduino genommen

IUnd warum liest Du A1 am Arduino dann digital aus und nicht analog?

Beispielsweise:
byte schaltSchwelle=100; // oder wie auch immer
if (analogRead(A1)>=schaltSchwelle)

Waum soll denn Dein Programm erst ab einem sehr großen Ausgangssignal von 3V (ggarantiertes HIGH bei 5V Atmegas) oder mehr schalten, warum nicht schon bei einem viel geringeren Signal des Sensors)?

Wie gesagt, durch die Regelung konnte ich andere Störgeräusche rausnehmen.
Das klappt ja alles auch. Nur halt nicht auf weiter Entfernung, deswegen wollte ich wissen ob jemand schon Erfahrungen mit dem KY-038 als Klatschsensor hat. Habe halt kein anderes Micro da, deswegen wollte ich das damit machen. Wenns nicht besser geht werde ich da noch aufbessern müssen und da war meine 2. Frage ob jemand Erfahrung mit Klatschsensoren hat und mir da einen zuverlässigen und günstigen Sensor empfehlen kann.

Ja, nimm diesen Klatschsensor.

Und wenn du bei deinem Teil die Empfindlichkeit zurückdrehst, damit Störgeräusche nicht stören, dann reagiert das Ding auch beim Klatschen schlechter.

Wenn man Klatschen nicht nur über den Pegel identifzieren will - und damit Störgeräusche natürlich dabei hat -, dann muss man das Signal über den Impuls versuchen aus dem Gemenge rauszufiltern. Ist ja sehr perkussiv, so ein Klatschen. Vielleicht hilft da FFT, keine Ahnung. Ein Versuch wär's wert (mach ich aber nicht :slight_smile: ).

Vielleicht hat der Bausatz von Hotsystem auch einen Filter drin, aber grundsätzlich wird der das gleiche Problem haben, nur auf einer größeren Platine.

Es hat einen Grund, warum die meisten Sensoren zweimal klatschen erwarten. Ich will so ein Ding auch im Schlafzimmer haben um das Licht auszumachen, deswegen habe ich ein wenig am Oszi experimentiert. Mein Sensor (so eine Platine mit so einem Mikro). lässt sich mit dem Trimpot eigentlich ganz so einstellen, dass der Digitalpin bei Klatschen im Raum auslöst und sonst nicht andauernd.
Der Trick kommt dann durch das Doppelklatschen. Am Oszi kann man sehen, dass die zeitlichen Abstände beim schnellen wie beim langsamen Klatschen extrem reproduzierbar sind. False positives nimmt man raus, indem man die gewünschte Aktion nur auslöst, wenn genau zwei Ausschläge in diesem Abstand (+/- ein kleiner zweistelliger Millisekundenbereich) kommen. Mit schnellem und langsamem Klatschen kann man sogar zwei Aktionen steuern.

Pseudocode sähe dann etwa so aus:

Wenn Interrupt getriggert:
    Wenn letztesKlatschen x+-dx Sekunden her:
        Aktion 1 (vorsicht in der Interruptroutine. Am Besten hier nur eine Flag setzen und dann in der Loop abarbeiten)
    sonst wenn letztesKlatschen y+-dy Sekunden her:
        Aktion 2
    sonst 
        letztesKlatschen = jetzt

Sollte das zu viele false positives geben, baut man noch eine Sperrzeit ein nach einem falschen Interval. Wenn also meinetwegen ein 300+-20ms Abstand erwartet wird, sperrt man erstmal 2-5 Sekunden, wenn ein anderer Abstand kommt. Die Sperrzeit kann neugestartet werden, wenn innerhalb der Sperrzeit ein Impuls kommt. Damit sollte man recht zuverlässig verhindern, dass eine zufällige Folge von Triggern das Signal trifft, selbst wenn die Abstände um den Triggerabstand liegen.