arduino piezo klopfsensor

Ein Piezo Sensor ist ein Bauelement, das unter Belastung (Druck, Vibration) eine Spannung erzeugt. Diese Spannung kann man über einen der Analog-Eingänge des Arduino messen und entsprechend darauf reagieren.

In diesem Tutorial bauen ich einen Klopfsensor, der – bei entsprechend empfindlicher Einstellung – sogar auf Anpusten reagiert und damit eine LED steuern kann. Neben dem Piezo (enthalten in allen gängigen Arduino Kits) benötigt ihr noch eine LED und einen 1 MegaOhm sowie einen 220 Ohm Widerstand.

Den grundsätzlichen Aufbau und eine kurze Erklärung des Arduino Sketch findet ihr in diesem Video:

Im Arduino-Sketch müsst ihr den Wert schwelle auf den eigenen Schaltungsaufbau abstimmen. Bei meinen Versuchen wurde bei nicht gedrücktem Piezo am Analogpin ein Wert zwischen 0 und ca. 15 gemessen, deswegen habe ich den Schwellenwert auf 20 gesetzt. Die gelieferte Spannung hängt aber sicher vom verwendeten Piezo Sensor ab. Hier habe ich einen ohne Kunststoff-Gehäuse verwendet, dieser hat als Sensor besser funktioniert als die Version mit Gehäuse.

Piezos sind ja Bauelemente, die nicht nur als Sensor sondern auch zur Ausgabe von Tönen verwendet werden können. Die Ansteuerung als Lautsprecher kommt aber mal in einem eigenen Tutorial.

Der Arduino Sketch für das Projekt „Mit Piezo Sensor eine LED ansteuern“:

// Ausgangspin für die LED
int ledPin = 13;

// Analog-Pin für den Piezo-Sensor
int piezoPin = 0;               

// Aktuell gemessener Wert
int wert = 0;

// Aktuelle Status der LED (wechselt bei Piezo-Klopfzeichen)
int ledStatus = LOW;

// WICHTIG: Diesen Wert zwischen 0 und 1023 anpassen, wenn Klopfzeichen nicht (oder zu oft) erkannt werden
int schwelle = 20;

// setup() wird einmalig beim Programmstart ausgeführt
void setup() {
 // Pin 13 für die LED als Ausgangspin setzen
 pinMode(ledPin, OUTPUT); 
 // Serielle Übertragung zum PC starten
 Serial.begin(9600);
}

// loop() wird nach setup() ununterbrochen ausgeführt
void loop() {
  // Eingangswert an A0 lesen
  wert = analogRead(piezoPin);   
  // Liegt der Wert über dem oben definierten Schwellenwert? Dann Ereignis auslösen  
  if (wert >= schwelle) {
    // Status der LED umkehren (1/0 = ein/aus)
    ledStatus = !ledStatus;
    // Pin 13 auf den Status setzen
    digitalWrite(ledPin, ledStatus);
    // Wert zu Testzwecken an den PC schicken
    Serial.println(wert);
    // Der Piezo braucht einige Zeit, um sich wieder zu beruhigen, daher 200ms warten.
    delay(200);
  }
//  Serial.println(wert);
  delay(10);
}
Code-Sprache: Arduino (arduino)

Fragen und Anmerkungen bitte in die Kommentare – entweder hier beim Blogpost oder beim Video auf Youtube.

5 thoughts on “Piezo Sensor am Arduino abfragen

  • 7. Juli 2015 at 22:08
    Permalink

    I have tried your code for the piezo switch but you have an f in your code that stops it compiling so could not program my arduino

    Many thanks Bob

    Reply
    • 9. Juli 2015 at 22:49
      Permalink

      Thanks a lot! No idea how the superfluous „f“ got in there. I corrected the sketch.

      Reply
  • 13. Februar 2017 at 19:45
    Permalink

    hi, how can i turn on and off more than one led with more piezos?

    Reply
  • 22. Dezember 2019 at 14:07
    Permalink

    Danke für das super Tutorial!
    Ich habe noch nie mit einem Arduino gearbeitet möchte aber die Kräfte Messen die in einen Skischuh auftreten. Dazu überlege ich solche Sensoren zu verwenden: https://www.robotshop.com/de/de/single-point-5mm-kraftsensor-lotzunge.html und an einen Arduino oder ESP32 anzuschließen…
    Kann das klappen?

    Zudem möchte ich auch Beschleunigungssensoren am Ski montieren um Vibrationen, Kantwinkel etc. zu messen. Da wäre es gut das Signal über Bluetooth an den ESP32 zu schicken. Weisst Du wie viele Sensoren ich über Bluetooth gleichzeitig am ESP32 verbinden kann?

    Im Idealfall werden dann alle Daten in ein File geschrieben…

    Hast Du ein paar Tips für mich?
    Welche Sensoren? Wo kaufen?
    ESP32 oder Arduino oder?

    Danke & lg Chris

    Reply

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Time limit is exhausted. Please reload the CAPTCHA.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.