ESP8266 - Bewegungssensor

Hast du dich jemals gefragt, „Wie kann es das tun?“, wenn du auf Orte stößt, an denen Türen sich automatisch öffnen und schließen, Lampen, die sich ein- und ausschalten, oder Rolltreppen, die sich ohne menschliches Zutun aktivieren? Falls ja, wird dieses Tutorial nicht nur deine Frage beantworten, sondern dir auch zeigen, wie du es mithilfe des ESP8266 und eines Bewegungsmelders realisieren kannst. Legen wir los!

Dieses Tutorial erklärt dir, wie man den ESP8266 mit einem Bewegungssensor verwendet. Im Detail werden wir Folgendes lernen:

Erforderliche Hardware

1×ESP8266 NodeMCU
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×HC-SR501 Bewegungssensor
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP8266
1×(Empfohlen) Stromverteiler für ESP8266 Typ-C

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über HC-SR501-Bewegungssensor

HC-SR501 Bewegungsensor

Der HC-SR501 PIR-Sensor ist ein Modul, das Bewegungen von Menschen (oder Tieren) erkennen kann. Es wird häufig in vielen Anwendungen eingesetzt, um die Anwesenheit von Menschen zu erkennen, z. B. das automatische Einschalten/Ausschalten einer Glühbirne, das Öffnen/Schließen einer Tür, das Aktivieren/Deaktivieren einer Rolltreppe oder das Erkennen eines Eindringlings.

Die Pinbelegung des Bewegungssensors

Der HC-SR501-Bewegungssensor hat drei Anschlüsse:

  • GND-Pin: Dieser muss mit GND (0V) verbunden werden
  • VCC-Pin: Dieser muss mit VCC (5V) verbunden werden
  • Ausgangspin: Dies ist ein Ausgangspin. Er wird niedrig sein, wenn keine Bewegung erkannt wird, und hoch, wenn Bewegung erkannt wird. Dieser Pin muss an einen Eingangs-Pin des ESP8266 angeschlossen werden

Der HC-SR501 verfügt über einen Jumper und zwei Potentiometer, die dazu dienen, die Einstellungen des Sensors anzupassen.

Pinbelegung des HC-SR501 Bewegungsmelders

Wie es funktioniert

Der HC-SR501-Sensor kann Bewegungen anhand von Veränderungen der Infrarotstrahlung erkennen, die von einem sich bewegenden Objekt ausgehen. Damit der HC-SR501-Sensor das Objekt identifizieren kann, müssen zwei Kriterien erfüllt sein:

  • Das Objekt muss sich in Bewegung befinden oder vibrieren
  • Das Objekt muss Infrarotstrahlung aussenden

Folglich:

  • Wenn sich ein Objekt bewegt, aber keine Infrarotstrahlung abgibt (z. B. ein Roboter oder Spielzeugfahrzeug), wird es vom Sensor nicht erkannt.
  • Wenn sich ein Objekt Infrarotstrahlung abgibt, sich aber nicht bewegt (z. B. eine Person, die stillsteht), wird es vom Sensor nicht erkannt.

Menschen und Tiere sind die Quelle der Infrarotstrahlung. Daher kann der Sensor ihre Bewegungen erkennen.

Der Zustand des Ausgangspins des Sensors:

  • Wenn im erkannten Bereich kein Mensch (oder Tier) anwesend ist, ist es LOW.
  • Wenn ein Mensch (oder ein Tier) den erkannten Bereich betritt, wechselt der Pin von LOW zu HIGH, was darauf hinweist, dass eine Bewegung erkannt wurde.
  • Wenn ein Mensch (oder ein Tier) den erkannten Bereich verlässt, wechselt der Pin von HIGH zu LOW, was zeigt, dass die Bewegung gestoppt hat.

Das oben gezeigte Video zeigt, wie der Bewegungsmelder theoretisch funktioniert. In der Praxis funktioniert der Bewegungsmelder je nach den Einstellungen des Sensors etwas anders (diese Einstellungen sind im Abschnitt Fortgeschrittene Anwendungen erläutert).

Erkennung der Anwesenheit von Menschen

Der Sensor erkennt die Anwesenheit von Menschen nicht direkt. Er erkennt nur Bewegungen. Wir verwenden den ESP8266, um basierend auf der vom Sensor erkannten Bewegung abzuleiten, ob Menschen anwesend sind oder nicht, gemäß dieser Regel:

  • Wenn eine Bewegung erkannt wird, bedeutet dies, dass Menschen anwesend sind
  • Wenn keine Bewegung erkannt wird, bedeutet dies, dass Menschen nicht anwesend sind

Diese Regel ist nicht perfekt und funktioniert nicht in einem Szenario, in dem Menschen sich im Bereich des Sensors befinden, sich aber nicht bewegen; die Bewegung wird nicht erkannt und der ESP8266 schließt daraus, dass der Mensch nicht anwesend ist. Allerdings ist es dennoch akzeptabel, da Menschen normalerweise kleine Bewegungen machen.

Zum Beispiel wird im Besprechungsraum der Bewegungsmelder verwendet, um das Licht ein- und auszuschalten. Wenn Personen den Raum betreten, wird das Licht automatisch eingeschaltet. Wenn während des Meetings jedoch alle stillstehen, erkennt der Sensor keine Bewegung, was darauf hindeutet, dass niemand anwesend ist, und das Licht wird ausgeschaltet. Um das Licht wieder einzuschalten, muss sich jemand bewegen.

Allerdings ist dieses Problem NICHT gravierend und der Sensor ist kostengünstig. Daher wird der Sensor in vielen Anwendungen häufig eingesetzt, um Menschen zu erkennen.

ESP8266 - HC-SR501 Bewegungsmelder

Schließe einen digitalen Eingangspin eines Arduino-Boards an den OUTPUT-Pin des HC-SR501-Sensors an. Verwende den ESP8266-Code, um den Wert des OUTPUT-Pins zu prüfen, um Bewegung zu erkennen.

Verdrahtungsdiagramm

ESP8266 NodeMCU-Bewegungssensor-Verdrahtungsdiagramm

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

Weitere Informationen finden Sie unter ESP8266-Pinbelegung und wie man ESP8266 und andere Komponenten mit Strom versorgt.

Anfangseinstellung

Time Delay AdjusterScrew it in anti-clockwise direction fully.
Detection Range AdjusterScrew it in clockwise direction fully.
Repeat Trigger SelectorPut jumper as shown on the image.
Arduino-Bewegungsmelder Ersteinrichtung

Wie man einen Bewegungsmelder programmiert

  • Richten Sie einen digitalen Eingang an einem Arduino-Pin ein, indem Sie die Funktion pinMode() verwenden.
pinMode(MOTION_SENSOR_PIN, INPUT);
  • Lies den Zustand des Ausgangspins des Sensors mit der Funktion digitalRead().
motion_state = digitalRead(MOTION_SENSOR_PIN);
  • Identifizieren Sie, wann der Pin von LOW auf HIGH wechselt, was den Beginn der Bewegung anzeigt.
prev_motion_state = motion_state; // alten Zustand speichern motion_state = digitalRead(MOTION_SENSOR_PIN); // neuen Zustand lesen if (prev_motion_state == LOW && motion_state == HIGH) { // Pin-Zustandsänderung: LOW -> HIGH Serial.println("Motion detected!"); }
  • Identifizieren Sie, wann der Pin von einem HIGH-Zustand zu einem LOW-Zustand wechselt, was darauf hinweist, dass die Bewegung aufgehört hat.
prev_motion_state = motion_state; // alten Zustand speichern motion_state = digitalRead(MOTION_SENSOR_PIN); // neuen Zustand lesen if (prev_motion_state == HIGH && motion_state == LOW) { // Pin-Zustandsänderung: HIGH -> LOW Serial.println("Motion stopped!"); }

ESP8266-Code

/* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU 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/esp8266/esp8266-motion-sensor */ #define MOTION_SENSOR_PIN D7 // Der ESP8266-Pin D7 ist mit dem Ausgangspin des Bewegungssensors verbunden. int motion_state = LOW; // aktueller Zustand des Pins int prev_motion_state = LOW; // vorheriger Zustand des Pins void setup() { Serial.begin(9600); // Initialisiere die serielle Schnittstelle, um mit dem Serial Monitor zu kommunizieren. pinMode(MOTION_SENSOR_PIN, INPUT); // setze den Arduino-Pin in den Eingangsmodus, um den Wert vom Ausgangspin des Sensors zu lesen. } void loop() { prev_motion_state = motion_state; // alten Zustand speichern motion_state = digitalRead(MOTION_SENSOR_PIN); // lese den neuen Zustand if (prev_motion_state == LOW && motion_state == HIGH) { // Pin-Zustandsänderung: LOW -> HIGH Serial.println("Motion detected!"); // TODO: Alarm, Licht einschalten oder ein Gerät aktivieren ... hier } else if (prev_motion_state == HIGH && motion_state == LOW) { // Pin-Zustandsänderung: HIGH -> LOW Serial.println("Motion stopped!"); // TODO: Alarm, Licht ausschalten oder ein Gerät deaktivieren ... hier } }

Schnelle Schritte

Um mit dem ESP8266 in der Arduino-IDE zu beginnen, befolgen Sie diese Schritte:

  • Schau dir das Tutorial Anleitung zur Einrichtung der Umgebung für ESP8266 in der Arduino IDE an, falls du ESP8266 zum ersten Mal verwendest.
  • Verdrahte die Bauteile gemäß dem Diagramm.
  • Schließe das ESP8266-Board mit einem USB-Kabel an deinen Computer an.
  • Öffne die Arduino-IDE auf deinem Computer.
  • Wähle das richtige ESP8266-Board, zum Beispiel (z. B. NodeMCU 1.0 (ESP-12E-Modul)), und den entsprechenden COM-Port.
  • Kopiere den Code und öffne ihn mit der Arduino-IDE.
  • Klicke im Arduino IDE auf den Hochladen-Knopf, um den Code auf den ESP8266 zu übertragen.
  • Öffne den seriellen Monitor.
  • Bewege deine Hand vor dem Bereich des Sensors.
  • Schau dir die Ausgabe im seriellen Monitor an.
COM6
Send
Motion detected! Motion stopped!
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

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.

Fortgeschrittene Anwendungen

Dieser Abschnitt widmet sich vertieftem Wissen. Machen Sie sich KEINE Sorgen, wenn Sie es nicht verstehen. Überspringen Sie diesen Abschnitt, wenn er Sie überfordert, und kommen Sie an einem anderen Tag zurück. Lesen Sie weiter mit den folgenden Abschnitten.

Wie bereits erwähnt, können wir die Sensor-Konfiguration durch den Einsatz eines Jumpers und zweier Potentiometer ändern.

Detektionsreichweite-Einsteller

Dieses Potentiometer wird verwendet, um zu verändern, wie weit etwas erkannt werden kann (ungefähr 3 bis 7 Meter):

  • Wenn Sie es ganz nach rechts drehen, kann es nur Dinge innerhalb von 3 Metern erkennen.
  • Wenn Sie es ganz nach links drehen, kann es Dinge bis zu 7 Metern entfernt erkennen.
Erkennungsbereich des Bewegungssensors

Verzögerungszeitregler

Dieses Potentiometer dient dazu, die Zeitverzögerung zu verändern:

  • Wenn es ganz im Uhrzeigersinn gedreht wird, beträgt die Zeitverzögerung ungefähr 5 Minuten.
  • Wenn es ganz gegen den Uhrzeigersinn gedreht wird, beträgt die Zeitverzögerung ungefähr 3 Sekunden.

Der folgende Abschnitt erläutert das Konzept der Zeitverzögerung in Verbindung mit dem Wiederholungs-Auslöser.

Bewegungssensor Zeitverzögerung einstellen

Wiederholungs-Auslöser-Auswahl

Es gibt einen Jumper, der dazu verwendet wird, Trigger-Modi auszuwählen: entweder Einzeltrigger oder wiederholbarer Trigger.

Bewegungssensor-Auslöser-Auswahl

Lassen Sie uns die Zeitverzögerungseinstellung (die über den Time Delay Adjuster festgelegt wird) als time_delay bezeichnen. Wenn Sie sich über einen längeren Zeitraum im Bereich des Sensors bewegen (genannt motion_time) (mehrmals länger als time_delay):

  • Einzeltrigger-Modus: Der Zustand des OUTPUT-Pins wird mehrmals zwischen LOW und HIGH umgeschaltet. Die HIGH-Dauer wird gleich dem time_delay sein, während die LOW-Dauer auf 3 Sekunden festgelegt wird.
Bewegungssensor-Einzelauslösungsmodus
  • Wiederholbarer Trigger-Modus: Der Zustand des OUTPUT-Pins bleibt HIGH für die Dauer von (motion_time plus time_delay).
Bewegungssensor wiederholbarer Auslösemodus

Testen

  • Einzel-Auslöser-Modus:
    • Setzen Sie den Jumper, um den Einzel-Auslöser-Modus auszuwählen
    • Bewegen Sie Ihre Hand etwa 10 Sekunden vor dem Sensor
    • Bringen Sie Ihre Hand außerhalb des Erfassungsbereichs des Sensors
    • Warten Sie 3 Sekunden, und Sie werden die Ausgabe im seriellen Monitor wie folgt beobachten:
    COM6
    Send
    Motion detected! Motion stopped! Motion detected! Motion stopped! Motion detected! Motion stopped!
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Wiederholbarer Trigger-Modus:

    • Setzen Sie den Jumper, um den wiederholbaren Trigger-Modus auszuwählen.
    • Schwenken Sie Ihre Hand etwa 10 Sekunden lang vor dem Sensor.
    • Bewegen Sie Ihre Hand aus dem Erfassungsbereich des Sensors.
    • Warten Sie 3 Sekunden; Sie sehen die Ausgabe im seriellen Monitor wie folgt:
    COM6
    Send
    Motion detected! Motion stopped!
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Wir können beobachten, dass im Einzel-Auslösemodus der Sensor zwei- oder dreimal auslöst. Im wiederholbaren Auslösemodus hingegen löst er nur einmal aus.

    ※ Notiz:

    Während der LOW-Zeit (3 Sekunden), die festgelegt und nicht einstellbar ist, kann der Sensor keine Bewegung erkennen. Dies verursacht in der Praxis keine Probleme.

    Es wird empfohlen, den wiederholbaren Trigger-Modus zu verwenden.

    In vielen realen Anwendungen schalten wir Maschinen oder Geräte ein oder aktivieren sie, wenn eine Person anwesend ist, und wir schalten sie nicht sofort aus oder deaktivieren sie, wenn die Person nicht mehr anwesend ist. Stattdessen warten wir auf eine Auszeit, bevor wir sie ausschalten oder deaktivieren.

    Wie man eine Zeitverzögerung verwendet

    Wenn keine Person erkannt wird, wartet das Automatisierungssystem eine bestimmte Zeit, bevor es Maßnahmen ergreift.

    Die Zeitverzögerung kann am Bewegungssensor und am ESP8266-Code angepasst werden:

    • Beim Bewegungssensor liegt das Minimum bei 3 Sekunden und das Maximum bei 5 Minuten, was über den Zeitverzögerungseinsteller erfolgt.
    • Beim ESP8266-Code kann jeder Wert festgelegt werden, was durch Programmieren geschieht.

    Wenn wir im ESP8266-Code kein Timeout angeben, ist der Timeout-Wert derselbe wie die Verzögerungszeit in der Sensor-Konfiguration.

    Wenn wir im ESP8266-Code ein Timeout festlegen, setzt sich die Gesamtdauer der Verzögerung aus der im Sensor festgelegten Verzögerung und der im ESP8266-Code angegebenen Verzögerung zusammen.

    Festlegen der Zeitverzögerung im ESP8266-Code

    /* * Dieser ESP8266 NodeMCU Code wurde von newbiely.de entwickelt * Dieser ESP8266 NodeMCU 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/esp8266/esp8266-motion-sensor */ #define MOTION_SENSOR_PIN D7 // Der ESP8266-Pin D7, verbunden mit dem Ausgangspin des Bewegungsmelders int motion_state = LOW; // aktueller Zustand des Pins int prev_motion_state = LOW; // vorheriger Zustand des Pins const unsigned long DELAY_TIME_MS = 30000; // 30000 Millisekunden ~ 30 Sekunden bool delay_enabled = false; unsigned long delay_start_ms; void setup() { Serial.begin(9600); // Initialisiere die serielle Schnittstelle zur Kommunikation mit dem Serial Monitor. pinMode(MOTION_SENSOR_PIN, INPUT); // Setze den Arduino-Pin in den Eingangsmodus, um den Wert vom Ausgangspin des Sensors zu lesen } void loop() { prev_motion_state = motion_state; // Zustand speichern motion_state = digitalRead(MOTION_SENSOR_PIN); // Neuen Zustand lesen if (prev_motion_state == LOW && motion_state == HIGH) { // Pin-Zustandsänderung: LOW -> HIGH Serial.println("Motion detected!"); Serial.println("Turning on / activating"); delay_enabled = false; // Verzögerung deaktivieren // TODO: Alarm, Licht einschalten oder ein Gerät hier aktivieren ... } else if (prev_motion_state == HIGH && motion_state == LOW) { // Pin-Zustandsänderung: HIGH -> LOW Serial.println("Motion stopped!"); delay_enabled = true; // Verzögerung aktivieren delay_start_ms = millis(); // Startzeit festlegen } if (delay_enabled == true && (millis() - delay_start_ms) >= DELAY_TIME_MS) { Serial.println("Turning off / deactivating"); delay_enabled = false; // Verzögerung deaktivieren // TODO: Alarm, Licht ausschalten oder ein Gerät hier deaktivieren ... } }

    Wenn der wiederholbare Auslösemodus aktiviert ist, wird die Verzögerung auf 30 Sekunden plus time_delay festgelegt, die in den Einstellungen des Sensors mit dem Zeitverzögerungsregler angepasst werden kann.

Fordere dich selbst heraus

Verwenden Sie den Bewegungssensor, um eines der folgenden Projekte zu realisieren:

  • Aktiviere die Lichter, wenn du dein Zimmer betrittst, und deaktiviere sie 30 Sekunden nachdem du gegangen bist. Tipp: Schau dir ESP8266 - Relais an.
  • Löse einen Alarm aus, wenn sich jemand deinen Wertsachen nähert. Tipp: Schau dir ESP8266 - Piezo-Buzzer an.

Funktionsreferenzen

※ 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!