19.01.2026

WiFi-Bewegungswarnsystem mit PIR-Sensor

Qwiic
Inkplate
Arduino
Raspberry Pi
WiFi Motion Alert System using PIR sensor

Table of contents

Einführung Wie funktioniert es? Verzögerungszeit Bewegung erkennen PIR WiFi-Alarm-Projekt
Table of contents
Einführung Wie funktioniert es? Verzögerungszeit Bewegung erkennen PIR WiFi-Alarm-Projekt

Einführung

Bewegungssensoren sind überall um uns herum, sichern Räume leise ab und reagieren, ohne dass wir es überhaupt bemerken. Von automatischen Flurlichtern, die sich einschalten, wenn man vorbeigeht, über Alarmsysteme, die unerwartete Bewegungen erkennen, bis hin zu bewegungsgesteuerten Überwachungskamera-Netzwerken – PIR-Sensoren (Passive Infrared) spielen eine wichtige Rolle in der alltäglichen Automatisierung und Sicherheit. Einst hauptsächlich in kommerziellen Produkten zu finden, sind Komponenten wie PIR-Sensoren dank leistungsfähigerer DIY-Elektronikprojekte heute als einfache Plug-and-Play-Module für jedermann erhältlich.

Dieser Artikel führt Sie durch die Funktionsweise von PIR-Sensoren, wie sie Bewegung erkennen und schließlich, wie Sie Ihren Mikrocontroller so einstellen können, dass er eine bestimmte Aufgabe ausführt, wie z. B. das Einschalten eines Lichts oder das Senden einer Benachrichtigung, basierend darauf, ob eine Bewegung erkannt wurde.

Wie funktioniert es?

Ein Passiv-Infrarot-Sensor ist ein elektronisches Gerät, das ein sich bewegendes Objekt erkennt, wenn es in sein Sichtfeld eintritt, was eine Änderung der Infrarotwerte verursacht. Alle Objekte und Personen, die Wärme abstrahlen, geben auch eine geringe Menge an Infrarotstrahlung ab, abhängig von ihrer Temperatur. Je heißer das Objekt, desto mehr Strahlung gibt es ab.

Diese Geräte basieren auf zwei ausbalancierten Streifen aus pyroelektrischem Material, die parallel zueinander angeordnet sind und so einen pyroelektrischen Sensor bilden. Dieser erkennt thermische Energie in der Umgebung. Zusätzlich ist ein Infrarotfilter enthalten, um alle anderen Lichtwellenlängen auszublenden. Sobald also eine Änderung der Signaldifferenz zwischen zwei pyroelektrischen Elementen erkannt wird, löst der PIR-Sensor aus und sendet ein Signal.

Verzögerungszeit

Ein wichtiges Konzept bei PIR-Bewegungssensoren ist die Haltezeit (manchmal auch „Verzögerungszeit“ oder "Delay time" genannt), also die Zeitspanne, in der der Ausgang des Sensors nach der Erkennung einer Bewegung auf HIGH bleibt. Einfacher ausgedrückt: Es ist die Zeit, wie lange der Sensor „Bewegung erkannt“ meldet, bevor er auf LOW zurückkehrt.

Einige PIR-Sensormodelle verfügen über ein kleines integriertes Potentiometer, mit dem Sie die Sensorverzögerung einstellen können. Dies ist wichtig, da es hilft, falsche Auslösungen oder schnelles Ein-/Ausschalten zu vermeiden; es ist auch nützlich in Beleuchtungs- oder Sicherheitssystemen, wo Sie ein stabiles „Bewegung erkannt“-Signal wünschen.

Bewegung erkennen

Nachdem wir die Grundlagen verstanden haben, erstellen wir ein einfaches Beispiel, das eine Nachricht auf dem seriellen Monitor ausgibt, wenn eine Bewegung erkannt wird. Unser PIR-Bewegungssensor-Board gibt es in zwei Varianten:

  • Standardversion - verwendet DOUT- und SOUT-Pins für die Ausgabe
  • I2C-Version - verwendet einen Qwiic/easyC-Anschluss für eine einfache Verbindung (Standardadresse 0x30)

Beispiel: Einfache Bewegungserkennung mit verzögerter Ausgabe

#define SOUT_PIN 2
#define DOUT_PIN 4

// Variables that hold the time since the last measurement for specific pins
unsigned long dout_delay = 0;
unsigned long sout_delay = 0;

void setup()
{
  // Set the pins as input
  pinMode(DOUT_PIN, INPUT);
  pinMode(SOUT_PIN, INPUT);

  // Initialize serial communication
  Serial.begin(115200);

  Serial.println("Warming up sensor...");
  // Wait 20s so the sensor can warm up
  delay(20000);

  Serial.println("Warmup done!");
}

void loop()
{
  // If the pin is set to HIGH and at least 4s have passed since the last measurement, print detection
  if (digitalRead(DOUT_PIN) && millis() - dout_delay >= 4000)
  {
    Serial.println("DOUT Motion detected!");
    dout_delay = millis();
  }

  // If the pin is set to HIGH and at least 4s have passed since the last measurement, print detection
  if (digitalRead(SOUT_PIN) && millis() - sout_delay >= 4000)
  {
    Serial.println("SOUT Motion detected!");
    sout_delay = millis();
  }
}

Wie Sie der Ausgabe des seriellen Monitors entnehmen können, überschreitet der DOUT-Pin die von uns festgelegte 4-Sekunden-Verzögerungsschwelle. Dies liegt daran, dass der Pin für weitere 2 Sekunden einen HIGH-Messwert („Bewegung erkannt“) liefert, wenn das integrierte Potentiometer auf die höchste Verzögerung (gegen den Uhrzeigersinn) eingestellt ist. Das Anpassen dieses Werts kann für Projekte nützlich sein, bei denen ein Bewegungsmelder erstellt wird, der nicht zu empfindlich auf kleine Bewegungen reagiert.

PIR WiFi-Alarm-Projekt

Verwendete Komponenten:

  • ESP32
  • PIR-Sensormodul
  • LED
  • 330 Ohm Widerstand

Dieses Projekt nutzt die WiFi-Fähigkeiten des ESP32, um eine E-Mail-Alarmbenachrichtigung zu senden, wenn eine Bewegung erkannt wurde; die E-Mail enthält Datum und Uhrzeit der erkannten Bewegung. Zusätzlich können Benachrichtigungen über einen vom ESP32 erstellten Webserver EIN/AUS geschaltet werden. Um darauf zuzugreifen, stellen Sie sicher, dass Sie mit demselben Netzwerk wie der ESP verbunden sind, und geben Sie dann einfach die auf dem seriellen Monitor ausgegebene IP-Adresse in die URL Ihres Webbrowsers ein.

Unten ist die Kernlogik dargestellt, die zeigt, wie der Loop Interrupts verarbeitet und die E-Mail-Benachrichtigung auslöst:

void loop()
{
  // Handle incoming client requests for the web server
  server.handleClient();

  // If motion is detected (set by ISR) and at least 4 seconds have passed from last detection
  if (motionDetected)
  {
    // Reset the flag safely
    noInterrupts();
    motionDetected = false;
    interrupts();

    const unsigned long now = millis();
    // Debounce/Delay check
    if (now - lastHandledMS >= 4000)
    {
      lastHandledMS = now;
      Serial.println("MOTION DETECTED");
      updateTime(); // Sync time for timestamp
      
      // If notifications are enabled via web UI, send alert email
      if (notificationsEnabled)
      {
        sendMotionNotification("Movement detected on " + print_last_detection_time() + "!!");
      }
    }
  }
}

// Interrupt Service Routine (ISR) for PIR sensor
void IRAM_ATTR onPIRDetection()
{
  motionDetected = true;
}

Die Logik der Hauptschleife (Main Loop) prüft zunächst, ob ein Gerät eine HTTP-Anfrage an das ESP32-Board gestellt hat. Wenn dann eine Bewegung erkannt wurde und seit der letzten Verarbeitung einer Bewegung mindestens 4 Sekunden vergangen sind, aktualisiert sie den Zeitstempel, gibt eine entsprechende Meldung aus und sendet eine Bewegungsalarm-E-Mail, sofern Benachrichtigungen aktiviert sind.

Webseite + E-Mail-Benachrichtigung:

Erfolgreiche Nachrichtenausgabe:

In diesem Artikel erwähnte Produkte

Verwandte Artikel