Empfindlichkeit "Knock Sensor" steigern?

Hallo zusammen,

ich habe mir den Klatschschalter/Knock Sensor aus der Beispiellibary nachgebaut und er funktioniert auch. Als Sensor nutze ich ein Piezo Element das bei meinem Fritzing-Kit dabei war.

Allerdings ist das Teil recht unempfindlich, selbst wenn ich den Threshold auf 1 minimiere.

Kann ich evtl. durch ändern des 1Mega-Ohm Widerstandes die Empfindlichkeit steigern oder wird das nichts vernünftiges und ich fahre mit einem "fertigen" Sensormodul besser?

Danke euch!

Hier ist das Script:

int ledPin = 13;

int knockSensor = 0;               

byte val = 0;

int statePin = LOW;

int THRESHOLD = 100;



void setup() {

 pinMode(ledPin, OUTPUT); 

 Serial.begin(9600);

}



void loop() {

  val = analogRead(knockSensor);     

  if (val >= THRESHOLD) {

    statePin = !statePin;

    digitalWrite(ledPin, statePin);

    Serial.println("Knock!");



  }

  delay(100);  // we have to make a delay to avoid overloading the serial port

}

Ich kenne den Sensor nicht, aber vermute, du hast ihn falsch angeschlossen. Der Port 0, den du verwendest ist doch ein digitaler und zudem ein Serieller für den USB Port. Das kann so nicht funktionieren. Wenn du einen analogen Port brauchst, verwende den A0 bis A5.

lies dir das mal durch http://forum.arduino.cc/index.php?topic=367110.0

Nabend!

Danke euch für die Hilfe, will aber leider noch nicht besser werden.

Zu 1. der "Sensor" ist ein einfaches Piezo Element wie oben geschrieben, ohne weitere Verstärkerschaltung oder ähnliches. 2. das Ding hängt am A0 und funktioniert auch, nur eben nicht empfindlich genug.

Ich habe mal mit "analogREFERENCE" rum gespielt, kann damit aber nur "Phantomgeräusche" erkennen sprich der Sensor detektiert alles was nicht zu hören ist, gehe ich mit der Empfindlichkeit höher ist er so träge wie zuvor.

Hi,

Bisschen späte Antwort, könnte aber anderen von Nutzen sein…
Hatte das gleiche Problem.

  1. Diese keinen Messingplättchen gibt es für verschiedene Frequenzen (zur Benutzung als Summer z.B.), also gehe ich davon aus, dass sie auch auf verschieden hohe Frequenzen (als Sensor) reagieren. 20 mm Piezos reagieren tatsächlich anders als 35 mm Varianten.
  2. Habe ein bisschen damit rumprobiert und folgendes festgestellt:
    Auf nem Holztisch liegend muss man schon direkt darauf klopfen um einen Analogen Wert von 1023 zu erreichen, ein kurzer Entfernung sind es gerade mal 50 Einheiten.
    Nun habe ich das Teil auf der einen Seite mit einen Streichholz unterlegt und somit vom Tisch abgehoben, brachte einiges aber man musste immer noch auf den Tisch hämmern um höhere Werte zu erzielen.
    Das ganze mit einem 100 Gramm Gewicht mittig beschwert erzielte eine gewisse “Vorspannung” des Sensors und damit eine ungemein höhere Empfindlichkeit:
  • Im absolutem Ruhezustand => 0 , und das durchgehend.
  • Ein Zigarettenpapier zusammengeknüllt in 20 cm Entfernung => 1 bis 3
    -Mausklick oder Mausrad (auf Mausteppich) in ca. 30 cm Entfernung => ca 10
    -Tisch mit Finger ganz zart am anderen Ende berühren (ohne klopfen) ebenfalls 10-15
  • Leichtes klopfen (halber Meter) => über 500, genau neben dem Sensor volle 1023
    Sogar das Umsetzen von einem Fuß unter dem Tisch bringt den Sensor zur anzeige.
    Gruß
    Marco

1.jpg

HotSystems: Ich kenne den Sensor nicht, aber vermute, du hast ihn falsch angeschlossen. Der Port 0, den du verwendest ist doch ein digitaler und zudem ein Serieller für den USB Port. Das kann so nicht funktionieren. Wenn du einen analogen Port brauchst, verwende den A0 bis A5.

Hallo

ich hab das gerade mal ausprobiert geht beides

Hardware UNO IDE 1.8.7

Heinz

//byte LDR = 0;
byte LDR=A0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  int wert = analogRead(LDR);
  Serial.println(wert);
  delay ( 1000);
}

Rentner: Hallo

ich hab das gerade mal ausprobiert geht beides

Hardware UNO IDE 1.8.7

Heinz

Was hat denn der LDR hier mit dem "Knock Sensor" zu tun ? LDR ist für Licht und der andere für Schall.

Hi

Tendenziell sind's Beides analoge Sensoren - zumindest lässt sich wohl der LDR mit beiden Varianten erfolgreich abfragen. (Aber Ja, fragte mich auch, wie wir jetzt auf LDR kommen)

MfG

HotSystems: Was hat denn der LDR hier mit dem "Knock Sensor" zu tun ? LDR ist für Licht und der andere für Schall.

Hallo,

der LDR hat mit dem Thema nichts zu tun, es ging mir um die unter #1 angegebene falsche Abfrage des Anaogeinganges A0. Mein Post hatte auch eindeutig einen Bezug zu #1 Ob das ein LDR oder ein Kocksensor ( Mikrofon ) ist ist spielt doch keine Rolle. Wie kommt Ihr darauf das ich einen LDR angeschlossen habe ? Nur weil der Eingang so heißt ?.

Ich hatte in meinem Beispiel ein analoges Signal an den Pin A0 angeschlossen und kann den Eingang sowohl als A0 als auch 0 deffinieren . Der eingelesene Wert ist in beiden Fällen gleich, das war der Sinn meines Beitrag´s.

Und das machte mich eigendlich etwas stutzig

Gruß Heinz

Rentner: Hallo,

der LDR hat mit dem Thema nichts zu tun, es ging mir um die unter #1 angegebene falsche Abfrage des Anaogeinganges A0. Mein Post hatte auch eindeutig einen Bezug zu #1 Ob das ein LDR oder ein Kocksensor ( Mikrofon ) ist ist spielt doch keine Rolle. Wie kommt Ihr darauf das ich einen LDR angeschlossen habe ? Nur weil der Eingang so heißt ?.

Ich hatte in meinem Beispiel ein analoges Signal an den Pin A0 angeschlossen und kann den Eingang sowohl als A0 als auch 0 deffinieren . Der eingelesene Wert ist in beiden Fällen gleich, das war der Sinn meines Beitrag´s.

Und das machte mich eigendlich etwas stutzig

Gruß Heinz

Dann solltest du das auch so beschreiben, damit auch alle wissen, was du gemeint hast. Wir können nicht wissen was du dabei denkst.

Hi

Aaah - Es dämmert :) Dem Rentner ging Es darum, daß analogRead(0) und analogRead(A0) identische Resultate liefert. Daran ist aber analogRead selber schuld - für Werte unter 14 wird +14 gerechnet (A0 entspricht 'D14' oder eben 14) - zumindest auf dem Uno.

MfG

postmaster-ino:
Hi

Aaah - Es dämmert :slight_smile:
Dem Rentner ging Es darum, daß analogRead(0) und analogRead(A0) identische Resultate liefert.
Daran ist aber analogRead selber schuld - für Werte unter 14 wird +14 gerechnet (A0 entspricht ‘D14’ oder eben 14) - zumindest auf dem Uno.

MfG

Hallo

richtig, danke , d.h der analogRead ist ein bischen buggi und liest zumindest beim UNO immer nur die Eingänge A0-A5. und analogRead(0) und analogRead(A0) sind identisch.

Gruß Heinz

d.h der analogRead ist ein bischen buggi

Vermutlich weiss ich nicht, was buggi bedeutet, aber ich bin sicher, das wurde absichtlich und aufwendig so gemacht, dass möglichst viele Idioten damit zurecht kommen. Und damit es möglichst hardware-unabhängig auf vielen Plattformen läuft.

Hehe

Was Du meinst ist 'Dau' ;) Idiot klingt doch recht hart, Dau ist Da viel runder im Mund :)

Das 'Umbiegen' von 0 auf A0 beim analogRead sehe ich nicht als Fehler an, sondern als Freiheit für den User, Der den Analogen Eingang 0 sowohl über die 0 einstellen kann (Er will ja analog Lesen, wo, wenn nicht am Analog-In?), A0 für den Analog-Eingang-Null oder 14, die 'interne' Pin-Nummer des Pin A0 (sonst könnte der µC den D0 nicht vom A0 unterscheiden - zugegeben, ein/zwei Kleinigkeiten gehen Da noch mehr vor sich, im Grunde soll Das aber als "weil's so ist" reichen)

MfG

Hallo,

Hot Systems hat in #1 die Aussage getroffen das das so nicht gehen kann. Da ich den Sketch des T0 zu dem Zeitpunkt mit einem LDR probiert habe, hatte ich festgestellt das analogRead(0) sehr wohl werte ergibt. Ich wollte mit meinem Post #5 lediglich darauf hinweisen das beides geht, was mich im Nachhinein etwas gewundert hat, deshalb meine Nachfrage. Naturlich ist das ein zus. Freiheitsgrad für den User, dennoch bin ich der Meinung das man es aus Grunden des besseren Verständinisses analogRead(A0) verwenden sollte.

Noch eine Bemerkung wenn ich darf, bin ja noch nicht so lange dabei. Ich finde es nicht gut hier im Forum öffentlich Leute als Idioten zu bezeichnen, auch wenn das nur ganz allgemein gemeint war und keiner persönlich angesprochen war. Ok es gibt hier manchmal Leute die mit wirklich wenig Kenntnissen schon mal "einfältige" Fragen stellen, aber jeder hat mal angefangen. Wir sollten uns angewöhnen den Umgangston zu waren. Es wird hier keiner gezwungen eine Antwort auf einen Post zu schreiben, und man kann sich auch mal was verkneifen. Ja in letzte Zeit gab es schon mal User die augenscheinlich versucht haben uns , um es nett zu sagen, auf die Schippe zu nehmen. Aber auch da ist die Beste Reaktion einfach nichts mehr zu Thema zu schreiben. Das ist der schnellte Weg das die Dinger hinten raus wandern. Zudem hat Uwe jederezeit die Möglichkeit die Posts zu sperren.

Ich finde das Forum hier wirklich toll, gute Beiträge, interessante Themen, und es wird immer versucht schnell zu helfen. Und natürlich macht man auch schon mal einen Fehler oder ist auf dem falschen Dampfer, aber das ist auch normal. Da gibt es dann zum Glück andere Forenteilnehmer die einen wieder auf den richtigen Weg bringen können. Keiner ist allwissend und fehlerfrei, und natürlich wird es auch unterscheidliche Meinungen zu einem Thema geben. Die Summe des Wissens macht doch das Forum stark und lebendig.

Gruß Heinz

Sorry. Ich wollte keinen hier (oder sonstwo) beleidigen. Und die Frage nach

analogRead(0)

ist tatsächlich OT bei der Diskussion der Brauchbarkeit eines Klopfsensors.

Auch wenn es manche nicht so wahrnehmen:
Dass man ab und zu einfach nix sagen sollte, ist auch mir bekannt und bewußt. (Und kommt auch öfter mal vor)