5.5 Menschliche Bewegungen erkennen¶
Ein Passiv-Infrarotsensor (PIR-Sensor) ist ein verbreiteter Sensor, der Infrarotstrahlung (IR), die von Objekten in seinem Sichtfeld emittiert wird, messen kann. Einfach ausgedrückt empfängt er die von menschlichen Körpern ausgehende Infrarotstrahlung und erkennt somit die Bewegung von Personen und anderen Lebewesen. Genauer gesagt signalisiert er der Hauptsteuerplatine, dass jemand Ihren Raum betreten hat.
Benötigte Komponenten
Für dieses Projekt benötigen wir die folgenden Komponenten.
Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:
Name |
ARTIKEL IN DIESEM KIT |
LINK |
---|---|---|
ESP32 Starter Kit |
320+ |
Sie können diese auch separat über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG |
KAUF-LINK |
---|---|
- |
|
Verfügbare Pins
Verfügbare Pins
Hier ist eine Liste der verfügbaren Pins auf dem ESP32-Board für dieses Projekt.
Für Eingang
IO13, IO14, IO27, IO26, IO25, IO33, I35, I34, I39, I36, IO4, IO18, IO19, IO21, IO22, IO23
Für Ausgang
IO13, IO12, IO14, IO27, IO26, IO25, IO33, IO32, IO15, IO2, IO0, IO4, IO5, IO18, IO19, IO21, IO22, IO23
Bemerkung
IO32 kann in diesem Projekt nicht als Eingangspin verwendet werden, da er intern mit einem 1K-Pulldown-Widerstand verbunden ist, was seinen Standardwert auf 0 setzt.
Strapping Pins (Eingang)
Strapping-Pins sind eine spezielle Gruppe von Pins, die verwendet werden, um spezifische Boot-Modi während des Gerätestarts zu bestimmen (d.h. Power-On-Reset).
Strapping Pins
IO5, IO0, IO2, IO12, IO15
Generell wird nicht empfohlen, sie als Eingangspins zu verwenden. Wenn Sie diese Pins verwenden möchten, bedenken Sie die potenziellen Auswirkungen auf den Bootvorgang. Für weitere Details, siehe Abschnitt Strapping-Pins.
Schaltplan
Wenn das PIR-Modul eine Bewegung erkennt, wird IO14 hochschalten und die LED leuchtet auf. Andernfalls, wenn keine Bewegung erkannt wird, bleibt IO14 niedrig und die LED erlischt.
Bemerkung
Das PIR-Modul verfügt über zwei Potentiometer: eines zur Einstellung der Empfindlichkeit und das andere zur Einstellung der Erfassungsdistanz. Um das PIR-Modul besser zu nutzen, sollten Sie beide gegen den Uhrzeigersinn bis zum Anschlag drehen.
Verdrahtung
Code
Bemerkung
Öffnen Sie die Datei
5.5_detect_human_movement.py
, die sich im Pfadesp32-starter-kit-main\micropython\codes
befindet, oder kopieren Sie den Code in Thonny. Klicken Sie dann auf „Aktuelles Skript ausführen“ oder drücken Sie F5, um es auszuführen.Stellen Sie sicher, dass Sie den Interpreter „MicroPython (ESP32).COMxx“ in der unteren rechten Ecke auswählen.
import machine
import time
# Define pins
PIR_PIN = 14 # PIR sensor
LED_PIN = 26 # LED
# Initialize the PIR sensor pin as an input pin
pir_sensor = machine.Pin(PIR_PIN, machine.Pin.IN, machine.Pin.PULL_DOWN)
# Initialize the LED pin as an output pin
led = machine.Pin(LED_PIN, machine.Pin.OUT)
# Global flag to indicate motion detected
motion_detected_flag = False
# Function to handle the interrupt
def motion_detected(pin):
global motion_detected_flag
print("Motion detected!")
motion_detected_flag = True
# Attach the interrupt to the PIR sensor pin
pir_sensor.irq(trigger=machine.Pin.IRQ_RISING, handler=motion_detected)
# Main loop
while True:
if motion_detected_flag:
led.value(1) # Turn on the LED
time.sleep(5) # Keep the LED on for 5 seconds
led.value(0) # Turn off the LED
motion_detected_flag = False
Wenn das Skript läuft, leuchtet die LED für 5 Sekunden auf und geht dann aus, wenn das PIR-Modul jemanden erfasst, der vorbeigeht.
Bemerkung
Das PIR-Modul verfügt über zwei Potentiometer: eines zur Einstellung der Empfindlichkeit und das andere zur Einstellung der Erfassungsdistanz. Um das PIR-Modul besser zu nutzen, sollten Sie beide gegen den Uhrzeigersinn bis zum Anschlag drehen.
Wie funktioniert das?
Dieser Code richtet ein einfaches Bewegungserkennungssystem mit einem PIR-Sensor und einer LED ein. Wenn eine Bewegung erkannt wird, leuchtet die LED für 5 Sekunden auf.
Hier ist eine Aufschlüsselung des Codes:
Definieren Sie die Interrupt-Handler-Funktion, die ausgeführt wird, wenn eine Bewegung erkannt wird:
def motion_detected(pin): global motion_detected_flag print("Motion detected!") motion_detected_flag = True
Verknüpfen Sie den Interrupt mit dem PIR-Sensor-Pin, wobei der Auslöser auf „steigend“ eingestellt ist (d.h., wenn der Pin von niedriger auf hohe Spannung wechselt):
pir_sensor.irq(trigger=machine.Pin.IRQ_RISING, handler=motion_detected)
Dies richtet einen Interrupt am
pir_sensor
-Pin ein, der mit dem PIR-Bewegungssensor verbunden ist.Hier ist eine detaillierte Erklärung der Parameter:
trigger=machine.Pin.IRQ_RISING
: Dieser Parameter legt die Auslösebedingung für den Interrupt fest. In diesem Fall wird der Interrupt bei einer steigenden Flanke ausgelöst. Eine steigende Flanke tritt auf, wenn sich die Spannung am Pin von einem niedrigen Zustand (0V) auf einen hohen Zustand (typischerweise 3,3V oder 5V, abhängig von Ihrer Hardware) ändert. Bei einem PIR-Bewegungssensor wechselt der Ausgangspin normalerweise bei einer erkannten Bewegung von niedrig nach hoch, was die steigende Flanke zu einer geeigneten Auslösebedingung macht.handler=motion_detected
: Dieser Parameter gibt die Funktion an, die ausgeführt wird, wenn der Interrupt ausgelöst wird. In diesem Fall wird die Funktionmotion_detected
als Interrupt-Handler bereitgestellt. Diese Funktion wird automatisch aufgerufen, wenn die Interruptbedingung (steigende Flanke) ampir_sensor
-Pin erkannt wird.
Mit dieser Codezeile wird der PIR-Sensor so konfiguriert, dass er die Funktion
motion_detected
aufruft, wann immer Bewegung durch den Sensor erkannt wird, da der Ausgangspin von einem niedrigen zu einem hohen Zustand wechselt.In der Hauptschleife, wenn das
motion_detected_flag
aufTrue
gesetzt ist, wird die LED für 5 Sekunden eingeschaltet und dann ausgeschaltet. Das Flag wird dann aufFalse
zurückgesetzt, um auf das nächste Bewegungsereignis zu warten.while True: if motion_detected_flag: led.value(1) # Turn on the LED time.sleep(5) # Keep the LED on for 5 seconds led.value(0) # Turn off the LED motion_detected_flag = False