ESP32 S3 - Bewegungssensor - Piezo-Summer

Dieses Tutorial zeigt Ihnen, wie Sie einen HC-SR501-Bewegungssensor und einen Piezo-Summer an eine ESP32 S3-Platine anschließen und sie so programmieren, dass sie mit einem Ton auf Bewegung reagiert. Sie bauen zwei praktische Projekte: eines, das bei erkannter Bewegung einen einfachen Ton abspielt, und ein weiteres, das eine vollständige Melodie abspielt, die durch Bewegung ausgelöst wird.

Was Sie bauen werden:

  1. Einen einfachen, bewegungsgesteuerten Tonalarm mit dem ESP32 S3 und dem HC-SR501-Sensor
  2. Einen bewegungsgesteuerten Melodie-Player mit einem passiven Piezo-Summer
  3. Automatisches Stoppen des Tons, wenn keine Bewegung erkannt wird
  4. Eine Grundlage für praxistaugliche Sicherheits- und Benachrichtigungssysteme

Überblick über Piezo Buzzer and Motion Sensor

Der HC-SR501 ist ein passiver Infrarot-Bewegungssensor (PIR), der Bewegungen erkennt, indem er die Infrarotstrahlung misst, die von warmen Körpern wie Menschen oder Tieren ausgeht. Der Piezo-Summer wandelt elektrische Signale in hörbare Töne um und ist damit ein ideales Ausgabegerät für bewegungsgesteuerte Warnungen. Zusammen bilden diese beiden Komponenten den Kern vieler praktischer Sicherheits- und Benachrichtigungssysteme.

Wir haben spezielle Tutorials zum Piezo-Summer und zum Bewegungssensor. Jedes Tutorial enthält ausführliche Informationen und Schritt-für-Schritt-Anleitungen zur Pinbelegung der Hardware, zum Funktionsprinzip, zur Verdrahtung mit dem ESP32 S3 und zum ESP32 S3-Code. Mehr dazu erfahren Sie unter den folgenden Links:

Wichtige Spezifikationen

  • Betriebsspannung des HC-SR501: 5V–20V DC
  • Erkennungsbereich des HC-SR501: bis zu 7 Meter (einstellbar)
  • Erkennungswinkel des HC-SR501: bis zu 120°
  • Spannung des aktiven Piezo-Summers: 3–24V DC
  • Passiver Piezo-Summer: benötigt ein PWM-Signal, um Töne und Melodien zu erzeugen

Bitte beachten Sie, dass dieses Tutorial einen 3–5V-Summer verwendet, Sie es aber für einen 12V-Summer anpassen können. Mehr über die Auswahl an Summern erfahren Sie im ESP32 S3 - Summer Tutorial.

Verdrahtungsdiagramm

Verbinden Sie den HC-SR501-Bewegungssensor und den Piezo-Summer gemäß den folgenden Diagrammen mit Ihrem ESP32 S3 und achten Sie bei beiden Komponenten auf die richtige Polarität.

Das Verdrahtungsdiagramm mit Stromversorgung über USB-Kabel

ESP32 S3 Bewegungssensor Piezo-Summer Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Modulkabel und dicke Kabel sitzen oft nicht gut in den Buchsenleisten. Ein Schraubklemmen-Board für ESP32 S3 löst dieses Problem. Stecken Sie den ESP32 S3 darauf und schrauben Sie die Kabel fest. So sieht es mit dem Schraubklemmen-Board aus:

ESP32 S3 Bewegungssensor Piezo-Summer Verdrahtungsdiagramm (Screw Terminal)

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Ein GPIO-Breakout-Board für ESP32 S3 geht ebenfalls. Neben den S-, 3,3V- und GND-Pins für jeden GPIO hat es zusätzliche 3,3V- und 5V-Pins:

ESP32 S3 Bewegungssensor Piezo-Summer Verdrahtungsdiagramm (GPIO Breakout Board)

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Das Verdrahtungsdiagramm mit Stromversorgung über 5V-Netzteil

ESP32 S3 Bewegungssensor Piezo-Summer Verdrahtungsdiagramm 5V-Netzteil

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Möchten Sie einen saubereren und sichereren Aufbau? Der ESP32 S3 passt auf ein Schraubklemmen-Board für ESP32 S3, das jeden Pin zu einer Schraubklemme macht. Die Pins ändern sich nicht. Schließen Sie jedes Kabel einfach an die passende Schraubklemme an:

ESP32 S3 Bewegungssensor Piezo-Summer Verdrahtungsdiagramm 5V-Netzteil (Screw Terminal)

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Sie können auch ein GPIO-Breakout-Board für ESP32 S3 verwenden. Jeder GPIO hat eigene S-, 3,3V- und GND-Pins, sodass die Modulkabel direkt aufgesteckt werden:

ESP32 S3 Bewegungssensor Piezo-Summer Verdrahtungsdiagramm 5V-Netzteil (GPIO Breakout Board)

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Sicherheitshinweise

Der Sensor HC-SR501 benötigt 5V–20V an seinem VCC-Pin, während die GPIO-Pins des ESP32 S3 mit 3,3-V-Logikpegeln arbeiten. Das Ausgangssignal des Sensors beträgt typischerweise 3,3 V und ist damit mit den Eingängen des ESP32 S3 kompatibel. Überprüfen Sie immer, dass der Pluspol des Summers mit dem vorgesehenen GPIO-Pin und der Minuspol mit GND verbunden ist, um eine Verpolung zu vermeiden.

Grundeinstellung

Einsteller für Erkennungsbereich Drehen Sie ihn vollständig im Uhrzeigersinn.
Einsteller für Verzögerungszeit Drehen Sie ihn vollständig gegen den Uhrzeigersinn.
Wahlschalter für wiederholte Auslösung Setzen Sie den Jumper wie im folgenden Bild.
ESP32 S3 Bewegungssensor Grundeinstellung

ESP32 S3-Code - Einfacher Ton

Der folgende Code programmiert den ESP32 S3 so, dass er den HC-SR501-Bewegungssensor überwacht und den Piezo-Summer sofort aktiviert, sobald eine Bewegung erkannt wird. Ist keine Bewegung vorhanden, bleibt der Summer still. So entsteht ein einfaches akustisches Warnsystem. Laden Sie diesen Sketch auf Ihren ESP32 S3 hoch und testen Sie ihn, indem Sie Ihre Hand vor dem Sensor bewegen.

/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-s3/esp32-s3-motion-sensor-piezo-buzzer */ /* * This ESP32-S3 code is created by esp32io.com * * This ESP32-S3 code is released in the public domain * * For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-s3-motion-sensor-piezo-buzzer */ #define MOTION_SENSOR_PIN 42 // ESP32-S3 pin GPIO42 connected to the OUTPUT pin of motion sensor #define BUZZER_PIN 41 // ESP32-S3 pin GPIO41 connected to Buzzer's pin int motionStateCurrent = LOW; // current state of motion sensor's pin int motionStatePrevious = LOW; // previous state of motion sensor's pin void setup() { Serial.begin(9600); // initialize serial pinMode(MOTION_SENSOR_PIN, INPUT); // set ESP32-S3 pin to input mode pinMode(BUZZER_PIN, OUTPUT); // set ESP32-S3 pin to output mode } void loop() { motionStatePrevious = motionStateCurrent; // store old state motionStateCurrent = digitalRead(MOTION_SENSOR_PIN); // read new state if (motionStatePrevious == LOW && motionStateCurrent == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!, making sound"); digitalWrite(BUZZER_PIN, HIGH); // turn on } else if (motionStatePrevious == HIGH && motionStateCurrent == LOW) { // pin state change: HIGH -> LOW Serial.println("Motion stopped!, stops making sound"); digitalWrite(BUZZER_PIN, LOW); // turn off } }

Schnelle Schritte

  1. Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
  2. Führen Sie die Verdrahtung wie im obigen Diagramm gezeigt durch.
  3. Verbinden Sie die ESP32 S3-Platine über ein USB-Typ-C-Kabel mit Ihrem PC.
  4. Öffnen Sie die Arduino IDE auf Ihrem PC.
  5. Wählen Sie die richtige ESP32 S3-Platine und den COM-Port aus.
  6. Kopieren Sie den obigen Code und fügen Sie ihn in die Arduino IDE ein.
  7. Kompilieren Sie den Code und laden Sie ihn auf die ESP32 S3-Platine hoch, indem Sie in der Arduino IDE auf die Schaltfläche Upload klicken.
  8. Bewegen Sie Ihre Hand vor dem Sensor.
  9. Hören Sie auf den Ton des Piezo-Summers.
  10. Profi-Tipp: Stellen Sie die Potentiometer für Empfindlichkeit und Verzögerung am HC-SR501 ein, um den Erkennungsbereich und die Dauer, die der Summer nach dem Ende der Bewegung ertönt, genau abzustimmen.

Zeilenweise Code-Erklärung

Der obige ESP32 S3-Code enthält eine zeilenweise Erklärung. Bitte lesen Sie die Kommentare im Code!

ESP32 S3-Code - Melodie

Der folgende Code erweitert das Projekt, indem er eine vollständige Melodie über einen passiven Piezo-Summer abspielt, sobald der HC-SR501 eine Bewegung erkennt. Dieser Ansatz nutzt die PWM-Frequenzsteuerung, um einzelne Musiknoten zu erzeugen, und die Wiedergabe stoppt automatisch, wenn keine Bewegung erkannt wird. Folgen Sie den nachstehenden Schritten, um die Header-Datei für die Tonhöhen einzurichten, die dieser Sketch benötigt.

/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-s3/esp32-s3-motion-sensor-piezo-buzzer */ /* * This ESP32-S3 code is created by esp32io.com * * This ESP32-S3 code is released in the public domain * * For more detail (instruction and wiring diagram), visit https://esp32io.com/tutorials/esp32-s3-motion-sensor-piezo-buzzer */ #include "pitches.h" #define MOTION_SENSOR_PIN 42 // ESP32-S3 pin GPIO42 connected to the OUTPUT pin of motion sensor #define BUZZER_PIN 41 // ESP32-S3 pin GPIO41 connected to Buzzer's pin // notes in the melody: int melody[] = { NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5, NOTE_D5, NOTE_G5 }; // note durations: 4 = quarter note, 8 = eighth note, etc, also called tempo: int noteDurations[] = { 8, 8, 4, 8, 8, 4, 8, 8, 8, 8, 2, 8, 8, 8, 8, 8, 8, 8, 16, 16, 8, 8, 8, 8, 4, 4 }; void setup() { Serial.begin(9600); // initialize serial pinMode(MOTION_SENSOR_PIN, INPUT); // set ESP32-S3 pin to input mode } void loop() { int motionState = digitalRead(MOTION_SENSOR_PIN); // read new state if (motionState == HIGH) { Serial.println("The motion is detected"); buzzer(); } } void buzzer() { // iterate over the notes of the melody: int size = sizeof(noteDurations) / sizeof(int); for (int thisNote = 0; thisNote < size; thisNote++) { // to calculate the note duration, take one second divided by the note type. //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc. int noteDuration = 1000 / noteDurations[thisNote]; tone(BUZZER_PIN, melody[thisNote], noteDuration); // to distinguish the notes, set a minimum time between them. // the note's duration + 30% seems to work well: int pauseBetweenNotes = noteDuration * 1.30; delay(pauseBetweenNotes); // stop the tone playing: noTone(BUZZER_PIN); } }

Schnelle Schritte

  1. Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
  2. Kopieren Sie den obigen Code und fügen Sie ihn in die Arduino IDE ein.
  3. Erstellen Sie die Datei pitches.h in der Arduino IDE wie folgt:
  • Klicken Sie entweder auf die Schaltfläche direkt unter dem Symbol des Seriellen Monitors und wählen Sie New Tab, oder verwenden Sie die Tasten Ctrl+Shift+N.
Arduino IDE 2 fügt Datei hinzu
  • Geben Sie der Datei den Namen pitches.h und klicken Sie auf die Schaltfläche OK.
Arduino IDE 2 fügt Datei pitches.h hinzu
  • Kopieren Sie den folgenden Code und fügen Sie ihn in die erstellte Datei pitches.h ein.
/************************************************* * Public Constants *************************************************/ #define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 58 #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
  1. Kompilieren Sie den Code und laden Sie ihn auf die ESP32 S3-Platine hoch, indem Sie in der Arduino IDE auf die Schaltfläche Upload klicken.
  2. Bewegen Sie Ihre Hand vor dem Sensor.
  3. Hören Sie auf die Melodie des Piezo-Summers.
  4. Profi-Tipp: Ersetzen Sie das Melodie-Array im Sketch durch Ihre eigene Notenfolge, um die Warnmelodie zu personalisieren.

Zeilenweise Code-Erklärung

Der obige ESP32 S3-Code enthält eine zeilenweise Erklärung. Bitte lesen Sie die Kommentare im Code!

※ Notiz:

Der obige Code verwendet die Funktion delay(). Diese blockiert anderen Code während der Melodiewiedergabe. Um das Blockieren von anderem Code zu vermeiden, verwenden Sie stattdessen die Bibliothek ezBuzzer. Diese Bibliothek ist dafür ausgelegt, dass der Summer piept oder eine Melodie abspielt, ohne anderen Code zu blockieren.

Ausgabe im Seriellen Monitor

Öffnen Sie nach dem Hochladen des Codes den Seriellen Monitor in der Arduino IDE (Baudrate auf 9600 einstellen). Sie sollten eine Ausgabe ähnlich den folgenden Werten sehen, wobei die Zeitstempel die Momente wiedergeben, in denen eine Bewegung erkannt wird und wieder endet.

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
2026-06-16 08:12:03 - Motion detected — buzzer ON 2026-06-16 08:12:07 - No motion — buzzer OFF 2026-06-16 08:12:45 - Motion detected — buzzer ON 2026-06-16 08:12:52 - No motion — buzzer OFF
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2

Anwendungen

Mit dem ESP32 S3 gebaute bewegungsgesteuerte Summersysteme sind praktische und vielseitige Komponenten für eine Vielzahl realer Projekte im Haushalt, im Büro und in der Industrie.

  1. Heimsicherheitsalarm: Lösen Sie einen Alarm aus, wenn ein Eindringling einen Raum oder gesperrten Bereich betritt.
  2. Türklingelsystem: Piepen Sie automatisch, wenn sich jemand einer Tür oder einem Eingang nähert.
  3. Kindersicherheits-Monitor: Warnen Sie Eltern, wenn ein Kind einen gefährlichen Bereich wie eine Treppe oder den Poolbereich betritt.
  4. Kundenbegrüßung im Einzelhandel: Spielen Sie einen Begrüßungston ab, wenn ein Kunde ein Geschäft betritt.
  5. Wildtiererkennung: Lösen Sie einen Summer aus, wenn sich Tiere einem Garten oder geschützten Bereich nähern.
  6. Belegungsanzeige im Büro: Geben Sie eine Warnung aus, wenn jemand einen unbesetzten Besprechungsraum betritt.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Sehen Sie sich unten die Schritt-für-Schritt-Videoanleitung für dieses ESP32 S3-Projekt an.

Herausforderungen

Diese Herausforderungen sollen Ihr Verständnis des ESP32 S3, der Bewegungserkennung und der Summersteuerung über die in diesem Tutorial vorgestellten Grundlagen hinaus erweitern.

  1. Einsteiger: Ändern Sie den Code so, dass der Summer bei erkannter Bewegung dreimal piept (kurze Impulse), anstatt dauerhaft zu ertönen.
  2. Fortgeschritten: Fügen Sie neben dem Summer eine LED-Anzeige hinzu, sodass Licht und Ton bei erkannter Bewegung gemeinsam aktiviert werden und beide ausgehen, wenn die Bewegung endet.
  3. Experte: Implementieren Sie mithilfe der internen Uhr des ESP32 S3 eine zeitbasierte Stummschaltung, sodass der Summer während der Nachtstunden (z. B. 22 Uhr bis 7 Uhr) deaktiviert ist, auch wenn eine Bewegung erkannt wird.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!