Arduino - Bewegungsensor
Wenn du dich bestimmten Orten näherst, an denen sich Türen automatisch öffnen oder schließen, die Glühbirnen automatisch ein- oder ausgeschaltet werden oder die Rolltreppe automatisch aktiviert wird, hast du dir jemals die Frage gestellt: „Wie kann es das tun?“ Wenn ja, beantwortet dieses Tutorial nicht nur diese Frage, sondern zeigt dir auch, wie man es macht. Fangen wir an!
In diesem Tutorial werden wir lernen:
- Wie der HC-SR501-Bewegungssensor funktioniert
- Wie man den HC-SR501-Bewegungssensor mit dem Arduino verbindet
- Wie man den Arduino programmiert, den Zustand des HC-SR501-Bewegungssensors auszulesen
- Wie man Arduino und HC-SR501-Bewegungssensoren verwendet, um das Betreten durch eine Person zu erkennen und basierend darauf Maßnahmen zu ergreifen
Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
1 | × | DIYables STEM V3 Starter-Kit (Arduino enthalten) | |
1 | × | DIYables Sensor-Kit (30 Sensoren/Displays) | |
1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Über den HC-SR501-Bewegungssensor

HC-SR501-PIR-Sensor ist ein Sensor, der die Bewegung von Menschen (oder Tieren) erkennen kann. Er wird häufig verwendet, um die Anwesenheit von Menschen in vielen Anwendungen zu erkennen (automatisches Ein- und Ausschalten der Beleuchtung, Öffnen/Schließen der Tür, Aktivieren/Deaktivieren der Rolltreppe, Erkennen eines Eindringlings ...)
Pinbelegung
Der HC-SR501-Bewegungssensor hat drei Pins:
- GND-Pin: muss mit GND (0V) verbunden werden.
- VCC-Pin: muss mit VCC (5V) verbunden werden.
- OUTPUT-Pin: ist ein Ausgangspin: LOW, wenn keine Bewegung erkannt wird, HIGH, wenn eine Bewegung erkannt wird. Dieser Pin muss mit dem Eingangs-Pin des Arduino verbunden werden.
Der HC-SR501 hat außerdem einen Jumper und zwei Potentiometer, die verwendet werden, um die Einstellung des Sensors anzupassen. Behalten Sie zunächst die Standardeinstellung bei. Die Details werden im Abschnitt Fortgeschrittene Anwendungen beschrieben.

Wie es funktioniert
Der HC-SR501-Sensor erkennt Bewegungen anhand der Veränderung der Infrarotstrahlung des sich bewegenden Objekts. Um vom HC-SR501-Sensor erkannt zu werden, muss das Objekt zwei Bedingungen erfüllen:
- Bewegt sich oder zittert
- Sendet Infrarotstrahlung aus.
Also:
- Wenn sich ein Objekt bewegt, aber keine Infrarotstrahlung aussendet (z. B. Roboter oder Spielzeugauto), wird es vom Sensor NICHT erkannt.
- Wenn ein Objekt Infrarotstrahlung aussendet, sich aber NICHT bewegt (z. B. eine Person, die stillsteht), wird es vom Sensor NICHT erkannt.
Menschen und Tiere geben von Natur aus Infrarotstrahlung ab. Deshalb kann der Sensor die Bewegungen von Menschen und Tieren erkennen.
Zustand des Ausgangspins:
- Wenn sich im erkannten Bereich des Sensors keine Person (oder kein Tier) bewegt, ist der Ausgangspin des Sensors niedrig.
- Wenn sich eine Person (oder ein Tier) in den erkannten Bereich des Sensors bewegt, ändert sich der Ausgangspin des Sensors von niedrig zu hoch (⇒ Bewegung erkannt).
- Wenn sich eine Person (oder ein Tier) aus dem erkannten Bereich des Sensors entfernt, ändert sich der Ausgangspin des Sensors von hoch zu niedrig (⇒ Bewegung beendet).
Das oben gezeigte Video veranschaulicht im Prinzip, wie der Bewegungssensor funktioniert. In der Praxis funktioniert der Bewegungssensor etwas anders, je nach Einstellung des Sensors (im Abschnitt Fortgeschrittene Anwendungen beschrieben).
Erkennung der Anwesenheit eines Menschen
Der Sensor selbst erkennt nicht die Anwesenheit von Menschen, er erkennt lediglich die Bewegung. Wir verwenden Arduino (oder einen Mikrocontroller), um basierend auf der Bewegungserkennung des Sensors die Anwesenheit von Menschen abzuleiten, gemäß der folgenden Regel:
- Wenn Bewegung erkannt wird, sind die Menschen anwesend
- Wenn keine Bewegung erkannt wird, sind die Menschen nicht anwesend
Diese Regel ist in der Praxis inkorrekt: Die Menschen befinden sich im Sensorbereich, bewegen sich aber nicht. Die Bewegung wird nicht erkannt. Der Arduino (oder MCU) schlussfolgert, dass der Mensch nicht anwesend ist.
Ihr Meetingraum verwendet den Bewegungssensor, um das Licht automatisch ein- und auszuschalten. Das Licht wird automatisch eingeschaltet, wenn Personen den Raum betreten. Während der Besprechung, wenn alle still sitzen und sich nicht bewegen, wird Bewegung nicht erkannt – der Mensch ist nicht anwesend – das Licht wird automatisch ausgeschaltet. Um das Licht einzuschalten, muss sich jemand bewegen.
Allerdings ist dieses Problem nicht ernst zu nehmen und der Sensor ist billig. Daher wird der Sensor in vielen Anwendungen häufig verwendet, um den Menschen zu erkennen.
Arduino - HC-SR501 Bewegungssensor
Wenn ein Pin eines Arduino als digitaler Eingang konfiguriert ist, kann er den Zustand (LOW oder HIGH) von allem lesen, an das er angeschlossen ist.
Indem der Arduino-Pin mit dem OUTPUT-Pin des HC-SR501-Sensors verbunden wird, können wir im Arduino-Code den Wert des OUTPUT-Pins überprüfen, um Bewegung zu erkennen.
Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Initialeinstellung
Time Delay Adjuster | Screw it in anti-clockwise direction fully. |
Detection Range Adjuster | Screw it in clockwise direction fully. |
Repeat Trigger Selector | Put jumper as shown on the image. |

So programmieren Sie einen Bewegungsmelder
- Konfiguriere den Pin eines Arduinos auf den digitalen Eingabemodus, indem du die Funktion pinMode() verwendest.
- Den Zustand des OUTPUT-Pins des Sensors mittels der digitalRead()-Funktion auslesen.
- Bewegungsbeginn erkennen (Pin-Zustandsänderung von LOW nach HIGH)
- Bewegungsstopp erkennen (Pin-Zustandsänderung von HIGH nach LOW)
Arduino-Code
Schnelle Schritte
- Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino-IDE
- Klicken Sie in der Arduino-IDE auf die Schaltfläche Hochladen, um den Code auf den Arduino zu übertragen
- Öffnen Sie den seriellen Monitor
- Bewegen Sie Ihre Hand vor dem Sensorbereich
- Sehen Sie die Ausgabe im seriellen Monitor
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
Wie oben erwähnt können wir die Einstellung des Sensors mittels eines Jumpers und zweier Potentiometer ändern.
Detektionsbereichs-Einsteller
Dieses Potentiometer dient dazu, den Erkennungsbereich einzustellen (ungefähr 3 m bis 7 m).
- Wenn es vollständig im Uhrzeigersinn eingeschraubt ist, beträgt der Detektionsbereich etwa 3 Meter.
- Wenn es vollständig gegen den Uhrzeigersinn eingeschraubt ist, beträgt der Detektionsbereich etwa 7 Meter.

Wir können das Potentiometer einstellen, um den gewünschten Bereich zu erreichen (einen Wert zwischen 3 m und 7 m).
Zeitverzögerungsregler
Dieses Potentiometer wird verwendet, um die Zeitverzögerung einzustellen.
- Wenn es vollständig im Uhrzeigersinn eingeschraubt ist, beträgt die Verzögerungszeit ungefähr 5 Minuten.
- Wenn es vollständig gegen den Uhrzeigersinn eingeschraubt ist, beträgt die Verzögerungszeit ungefähr 3 Sekunden.
Die Bedeutung der Zeitverzögerung wird im nächsten Teil in Verbindung mit dem Wiederholungs-Auslöser erläutert.

Wiederholungsauslöser-Auswahl
Es gibt einen Jumper, der verwendet wird, um Trigger-Modi auszuwählen: Einzel-Trigger oder wiederholbarer Trigger.

Nennen wir die Verzögerungseinstellung (wird über den Time Delay Adjuster festgelegt) time_delay. Angenommen, Sie bewegen sich im Bereich des Sensors über einen längeren Zeitraum weiter (genannt motion_time) (mehrfach länger als time_delay).
- Einzeltrigger-Modus: Der Zustand des OUTPUT-Pins wird mehrmals zwischen LOW und HIGH umgeschaltet. Die HIGH-Dauer entspricht time_delay. Die LOW-Dauer ist fest auf 3 Sekunden festgelegt.

- Wiederholbarer Trigger-Modus: Der Zustand des OUTPUT-Pins bleibt HIGH während (motion_time + time_delay).

Tests
Um zu sehen, wie die Trigger-Modi funktionieren, führen wir einen Test durch. Stellen Sie den Zeitverzögerungsregler ganz gegen den Uhrzeigersinn ein, sodass die Verzögerung 3 Sekunden beträgt.
- Einzel-Auslöser-Modus:
- Stellen Sie den Jumper so ein, dass der Einzel-Auslöser-Modus ausgewählt wird
- Bewegen Sie Ihre Hand etwa 10 Sekunden lang vor dem Sensor.
- Bewegen Sie Ihre Hand außerhalb des Sensorbereichs.
- Warten Sie 3 Sekunden; die Ausgabe im seriellen Monitor wird wie folgt angezeigt:
- Wiederholbarer Trigger-Modus:
- Stellen Sie den Jumper so ein, dass der wiederholbare Trigger-Modus gewählt wird.
- Bewegen Sie Ihre Hand etwa 10 Sekunden lang vor dem Sensor.
- Bringen Sie Ihre Hand außerhalb des Erfassungsbereichs des Sensors.
- Warten Sie 3 Sekunden; die Ausgabe im seriellen Monitor wird wie folgt angezeigt:
- Wir schalten Geräte/Maschinen unmittelbar ein oder aktivieren sie, sobald eine Person anwesend ist
- Wir schalten Geräte/Maschinen nicht sofort ab, sobald keine Person mehr anwesend ist. Wir schalten sie nach einer Wartezeit aus.
- Beim Bewegungsmelder: Die Mindestdauer beträgt 3 Sekunden und die Höchstdauer 5 Minuten. Mittels Time Delay Adjuster.
- Im Arduino-Code: Beliebiger Wert, durch Programmierung festgelegt.
Wie man sieht, löst der Sensor im Einzeltrigger-Modus zweimal oder dreimal aus. Im wiederholbaren Trigger-Modus löst der Sensor nur einmal aus.
※ Notiz:
In beiden Fällen kann der Sensor während der LOW-Zeit (3 Sekunden), dem festen und nicht einstellbaren Wert, keine Bewegung erkennen. Mit anderen Worten, der Sensor ist in diesem Zeitraum blockiert. In der Praxis verursacht es kein Problem.
Es wird empfohlen, den wiederholbaren Trigger-Modus zu verwenden.
In vielen realen Anwendungen:
So verwenden Sie die Zeitverzögerung
Wenn der Mensch nicht anwesend ist, ergreift das Automatisierungssystem nach einer Zeitverzögerung Maßnahmen.
Die Zeitverzögerung kann am Bewegungsmelder und im Arduino-Code eingestellt werden:
Wenn wir im Arduino-Code kein Timeout festlegen, ist der Timeout gleich der Verzögerungszeit in der Sensor-Einstellung.
Wenn wir im Arduino-Code ein Timeout setzen, ist das Timeout die Summe der Verzögerung in der Einstellung des Sensors und der Verzögerung im Arduino-Code.
Festlegen der Zeitverzögerung im Arduino-Code
Angenommen, der wiederholbare Trigger-Modus ist aktiviert. Die Verzögerung in diesem Code beträgt 30 Sekunden. Das bedeutet, dass die Verzögerungszeit 30 Sekunden plus time_delay beträgt, was in den Einstellungen des Sensors festgelegt ist (über den Zeitverzögerungsregler).
Fordere dich heraus
Verwenden Sie den Bewegungssensor, um eines der folgenden Projekte durchzuführen:
- Schalte das Licht automatisch ein, wenn du dein Zimmer betrittst, und schalte es 30 Sekunden nach dem Verlassen wieder aus. Hinweis: Siehe Arduino - Relay.
- Löse automatisch einen Alarm aus, wenn sich jemand deinem wertvollen Besitz nähert. Hinweis: Siehe Arduino - Piezo Buzzer.