Arduino Nano – Bewegungssensor

Haben Sie sich schon einmal gefragt: „Wie kann es das tun?“, wenn Sie auf Orte mit automatischen Türen, Beleuchtung und Rolltreppen stoßen? Wenn ja, wird dieses Tutorial nicht nur Ihre Frage beantworten, sondern Ihnen auch zeigen, wie Sie es durch die Verwendung eines Arduino Nano und eines Bewegungssensors realisieren können. Legen wir los!

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

Erforderliche Hardware

1×Official Arduino Nano
1×Alternativ: DIYables ATMEGA328P Nano Development Board
1×USB-A-zu-Mini-B-Kabel
1×HC-SR501 Bewegungssensor
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano

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 den HC-SR501-Bewegungssensor

HC-SR501 Bewegungssensor

Der HC-SR501 PIR-Sensor kann die Bewegung von Menschen (oder Tieren) erkennen. Er wird häufig in verschiedenen Anwendungen eingesetzt, z. B. um eine Glühbirne automatisch ein- oder auszuschalten, eine Tür zu öffnen und zu schließen, eine Rolltreppe zu aktivieren oder zu deaktivieren, und einen Eindringling zu erkennen.

Pinbelegung des Bewegungssensors

Der HC-SR501-Bewegungssensor hat drei Pins:

  • GND-Pin: Dieser Pin sollte mit GND (0V) verbunden werden.
  • VCC-Pin: Dieser Pin sollte mit VCC (5V) verbunden werden.
  • OUTPUT-Pin: Dies ist ein Ausgangspin und er wird LOW sein, wenn keine Bewegung erkannt wird, und HIGH, wenn Bewegung erkannt wird. Dieser Pin muss mit dem Eingangspin des Arduino verbunden werden.

Der HC-SR501 verfügt über einen Jumper und zwei Potentiometer, mit denen die Einstellungen des Sensors angepasst werden.

Pinbelegung des HC-SR501-Bewegungsmelders

Wie es funktioniert

Der HC-SR501-Sensor ist in der Lage, Bewegungen anhand der Veränderungen der Infrarotstrahlung eines sich bewegenden Objekts zu erkennen. Damit der HC-SR501-Sensor das Objekt erkennen kann, müssen zwei Kriterien erfüllt werden:

  • Das Objekt muss in Bewegung sein oder sich schütteln
  • Das Objekt muss Infrarotstrahlung aussenden

Folglich:

  • Wenn sich ein Objekt bewegt, aber keine Infrarotstrahlung aussendet (z. B. ein Roboter oder Spielzeugfahrzeug), 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 sind Quellen von Infrarotstrahlung. Daher kann der Sensor ihre Bewegungen erkennen.

Zustand des Ausgangspins:

  • Wenn kein Mensch (oder ein Tier) im erfassten Bereich des Sensors vorhanden ist, liegt der Ausgangspin des Sensors im LOW-Zustand.
  • Wenn ein Mensch (oder ein Tier) den erfassten Bereich des Sensors betritt, wechselt der Ausgangspin vom LOW-Zustand in den HIGH-Zustand, was darauf hinweist, dass eine Bewegung erkannt wurde.
  • Wenn ein Mensch (oder ein Tier) den erfassten Bereich des Sensors verlässt, wechselt der Ausgangspin vom HIGH- in den LOW-Zustand, was darauf hinweist, dass die Bewegung beendet ist.

Das oben gezeigte Video demonstriert die grundlegende Funktionsweise eines Bewegungsmelders. In der Praxis kann der Bewegungsmelder je nach Konfiguration unterschiedlich arbeiten (was im Abschnitt Fortgeschrittene Anwendungen beschrieben ist).

Die Anwesenheit von Menschen erkennen

Der Sensor selbst erkennt die Anwesenheit von Menschen nicht. Er erkennt nur die Bewegung. Wir verwenden ein Arduino Nano, um die Anwesenheit von Menschen anhand der vom Sensor erkannten Bewegung abzuleiten, gemäß dieser Regel:

  • Wenn Bewegung erkannt wird, dann sind Menschen anwesend.
  • Wenn keine Bewegung erkannt wird, dann sind Menschen nicht anwesend.

Diese Regel funktioniert in der Praxis nicht perfekt: Wenn sich Menschen im Bereich des Sensors befinden, sich aber nicht bewegen, wird die Bewegung nicht erkannt. Infolgedessen wird der Arduino Nano zu dem Schluss kommen, dass keine Menschen anwesend sind.

Zum Beispiel ist der Bewegungsmelder in Ihrem Besprechungsraum so eingerichtet, dass die Lichter aktiviert werden, wenn Personen anwesend sind. Wenn die Besprechung im Gange ist und sich niemand bewegt, wird die Bewegung nicht erkannt und damit die menschliche Anwesenheit nicht erkannt, wodurch die Lichter ausgeschaltet werden. Um sie wieder einzuschalten, muss sich jemand bewegen.

Dieses Problem ist jedoch NICHT ernst und der Sensor ist kostengünstig. Daher wird er in vielen Anwendungen häufig eingesetzt, um Menschen zu erkennen.

Arduino Nano – HC-SR501 Bewegungsmelder

Schließen Sie den digitalen Eingangspin des Arduino an den OUTPUT-Pin des HC-SR501-Sensors an. Mit dem Arduino Nano-Code können wir den Wert des OUTPUT-Pins überprüfen, um Bewegung zu erkennen.

Verdrahtungsdiagramm

Arduino Nano Bewegungsmelder-Schaltplan

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

Siehe Der beste Weg, den Arduino Nano und andere Komponenten mit Strom zu versorgen.

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-Bewegungssensor Ersteinrichtung

Wie man einen Bewegungsmelder programmiert

  • Richte den Pin eines Arduino-Boards als digitalen Eingang ein, indem du die Funktion pinMode() verwendest.
pinMode(MOTION_SENSOR_PIN, INPUT);
  • Überprüfen Sie den Zustand des Ausgangspins des Sensors mit der digitalRead() Funktion.
motion_state = digitalRead(MOTION_SENSOR_PIN);
  • Bestimme, wann die Bewegung beginnt (der Pin-Zustand ändert sich von LOW zu HIGH).
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-Zustandswechsel: LOW -> HIGH Serial.println("Motion detected!"); }
  • Erkennen, wann der Zustand des Pins von HIGH auf LOW gewechselt ist, was darauf hindeutet, dass die Bewegung gestoppt wurde.
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!"); }

Arduino Nano-Quellcode

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano/arduino-nano-motion-sensor */ #define MOTION_SENSOR_PIN 2 // The Arduino Nano pin connected to the OUTPUT pin of motion sensor int motion_state = LOW; // current state of pin int prev_motion_state = LOW; // previous state of pin void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(MOTION_SENSOR_PIN, INPUT); // set arduino pin to input mode to read value from OUTPUT pin of sensor } void loop() { prev_motion_state = motion_state; // store old state motion_state = digitalRead(MOTION_SENSOR_PIN); // read new state if (prev_motion_state == LOW && motion_state == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); // TODO: turn on alarm, light or activate a device ... here } else if (prev_motion_state == HIGH && motion_state == LOW) { // pin state change: HIGH -> LOW Serial.println("Motion stopped!"); // TODO: turn off alarm, light or deactivate a device ... here } }

Schnelle Schritte

  • Kopieren Sie den obigen Code und öffnen Sie ihn in der Arduino IDE.
  • Klicken Sie auf die Hochladen-Schaltfläche in der Arduino IDE, um den Code zu kompilieren und auf den Arduino Nano hochzuladen.
  • Öffnen Sie den seriellen Monitor.
  • Bewegen Sie Ihre Hand innerhalb des Bereichs des Sensors.
  • Überprüfen Sie die Ausgabe im seriellen Monitor.
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 Konfiguration des Sensors mit einem Jumper und zwei Potentiometern ändern.

Detektionsbereich-Einsteller

Dieses Potentiometer kann beeinflussen, wie weit etwas erkannt werden kann (etwa 3 bis 7 Meter).

  • Wenn man es ganz nach rechts dreht, erkennt es Objekte in einer Entfernung von bis zu 3 Metern.
  • Wenn man es ganz nach links dreht, erkennt es Objekte in einer Entfernung von bis zu 7 Metern.
Erfassungsbereich des Bewegungssensors

Wir können das Potentiometer verwenden, um einen Wertebereich zwischen 3 m und 7 m einzustellen.

Zeitverzögerungsregler

Dieses Potentiometer wird verwendet, um die Zeitverzögerung einzustellen:

  • 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: Verzögerungszeit einstellen

Wiederholungs-Auslöser-Auswahl

Es gibt einen Jumper, der dazu verwendet wird, zwischen Trigger-Modi zu wählen: Einzeltrigger oder wiederholbarer Trigger.

Bewegungssensor-Auslöser-Auswahl

Nennen wir die Zeitverzögerungseinstellung, die über den Zeitverzögerungsregler festgelegt wird, als time_delay. Wenn Sie sich im Erfassungsbereich des Sensors über einen längeren Zeitraum bewegen (bekannt als motion_time), der um ein Vielfaches länger ist als time_delay:

  • Im Einzeltrigger-Modus: Der Zustand des OUTPUT-Pins wird mehrmals zwischen LOW und HIGH umgeschaltet. Die HIGH-Dauer entspricht time_delay, während die LOW-Dauer auf 3 Sekunden festgelegt ist.
Bewegungssensor Einzelauslösungsmodus
  • Wiederholbarer Trigger-Modus: Der Zustand des Ausgangspins bleibt HIGH für einen Zeitraum von (motion_time + 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.
    • Bewegen Sie Ihre Hand aus dem Bereich des Sensors.
    • Warten Sie 3 Sekunden; die Ausgabe im seriellen Monitor sollte wie folgt aussehen:
    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
    • Winken Sie Ihre Hand vor dem Sensor für etwa 10 Sekunden
    • Bewegen Sie Ihre Hand aus dem Erfassungsbereich des Sensors
    • Warten Sie 3 Sekunden; die Ausgabe wird im seriellen Monitor wie folgt sichtbar sein:
    COM6
    Send
    Motion detected! Motion stopped!
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

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

    ※ Notiz:

    Während der LOW-Zeit (3 Sekunden, ein fester und unverstellbarer Wert) ist der Sensor nicht in der Lage, jegliche Bewegung zu erkennen. Das verursacht in der Praxis keine Probleme.

    Es wird empfohlen, den wiederholbaren Triggermodus zu verwenden.

    In vielen realen Szenarien:

    • Wir schalten Geräte/Maschinen ein oder aktivieren sie, sobald eine Person anwesend ist
    • Wir schalten Geräte/Maschinen NICHT sofort ab, nachdem eine Person nicht mehr anwesend ist. Wir schalten Geräte/Maschinen erst nach einer bestimmten Zeit aus bzw. deaktivieren sie.

    Wie man eine Zeitverzögerung verwendet

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

    Der Bewegungssensor verfügt über einen Zeitverzögerungsregler, mit dem die Zeitverzögerung auf ein Minimum von 3 Sekunden und ein Maximum von 5 Minuten eingestellt werden kann. Darüber hinaus kann der Arduino Nano-Code verwendet werden, um jeden Wert für die Zeitverzögerung festzulegen.

    Wenn wir im Code des Arduino Nano kein Timeout festlegen, entspricht dieses Timeout der im Sensor festgelegten Zeitverzögerung.

    Wenn im Arduino Nano-Code ein Timeout festgelegt wird, ergibt sich die Summe aus der Zeitverzögerung in der Sensor-Konfiguration und der Zeitverzögerung im Arduino Nano-Code.

    Festlegen der Verzögerungszeit im Arduino Nano-Code

    /* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano/arduino-nano-motion-sensor */ #define MOTION_SENSOR_PIN 2 // The Arduino Nano pin connected to the OUTPUT pin of motion sensor int motion_state = LOW; // current state of pin int prev_motion_state = LOW; // previous state of pin const unsigned long DELAY_TIME_MS = 30000; // 30000 miliseconds ~ 30 seconds bool delay_enabled = false; unsigned long delay_start_ms; void setup() { Serial.begin(9600); // Initialize the Serial to communicate with the Serial Monitor. pinMode(MOTION_SENSOR_PIN, INPUT); // set arduino pin to input mode to read value from OUTPUT pin of sensor } void loop() { prev_motion_state = motion_state; // store state motion_state = digitalRead(MOTION_SENSOR_PIN); // read new state if (prev_motion_state == LOW && motion_state == HIGH) { // pin state change: LOW -> HIGH Serial.println("Motion detected!"); Serial.println("Turning on / activating"); delay_enabled = false; // disable delay // TODO: turn on alarm, light or activate a device ... here } else if (prev_motion_state == HIGH && motion_state == LOW) { // pin state change: HIGH -> LOW Serial.println("Motion stopped!"); delay_enabled = true; // enable delay delay_start_ms = millis(); // set start time } if (delay_enabled == true && (millis() - delay_start_ms) >= DELAY_TIME_MS) { Serial.println("Turning off / deactivating"); delay_enabled = false; // disable delay // TODO: turn off alarm, light or deactivate a device ... here } }

    Wenn der wiederholbare Auslösemodus aktiviert ist, beträgt die Verzögerung im Code 30 Sekunden zuzüglich time_delay, welche in den Sensoreinstellungen über den Time Delay Adjuster festgelegt wird.

Fordere dich heraus

Verwenden Sie den Bewegungssensor, um eines dieser Projekte durchzuführen:

  • Aktiviere das Licht, wenn du dein Zimmer betrittst, und schalte es nach 30 Sekunden deiner Abwesenheit aus. Tipp: Sieh dir Arduino Nano - Relay an.
  • Aktiviere einen Alarm, wenn sich jemand deinen wertvollen Besitztümern nähert. Tipp: Sieh dir Arduino Nano - 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!