Bewegungsgesteuertes Relais

Dieses Arduino-Projekt hat zum Ziel, eine mit einem Relais gesteuerte Lampe mithilfe eines passiven Infrarot-(PIR)-Sensors zu steuern. Sobald der PIR-Sensor eine Bewegung erkennt, wird das Relais aktiviert und die Lampe eingeschaltet. Die Lampe bleibt für 5 Sekunden nach der zuletzt erkannten Bewegung eingeschaltet.

Warnung

Zur Demonstration verwenden wir ein Relais zur Steuerung eines RGB-LED-Moduls. In realen Anwendungsfällen ist diese Herangehensweise jedoch eventuell nicht die praktikabelste.

Beim Anschluss des Relais an andere Geräte in realen Anwendungen ist äußerste Vorsicht im Umgang mit HOHER Wechselspannung geboten. Unfachgemäße oder falsche Handhabung kann zu schweren Verletzungen oder sogar zum Tod führen. Daher richtet sich dieses Projekt an Personen, die sich mit HOHER Wechselspannung auskennen. Sicherheit hat stets oberste Priorität.

1. Schaltkreis aufbauen

../_images/05-fun_Motion_triggered_relay_circuit.png

2. Code

  1. Öffnen Sie die Datei 05-Motion_triggered_relay.ino im Verzeichnis ultimate-sensor-kit\fun_project\05-Motion_triggered_relay oder kopieren Sie diesen Code in die Arduino IDE.

3. Code-Erklärung

Das Projekt basiert auf der Fähigkeit des PIR-Bewegungssensors, Bewegungen zu erkennen. Bei erkannter Bewegung sendet der Sensor ein Signal an den Arduino, der das Relais aktiviert, wodurch wiederum eine Lampe eingeschaltet wird. Die Lampe bleibt für eine festgelegte Zeit (in diesem Fall 5 Sekunden) nach der letzten erkannten Bewegung an, sodass der Bereich kurzzeitig beleuchtet bleibt, auch wenn keine Bewegung mehr erfolgt.

  1. Initiale Einrichtung und Variablendeklarationen

    In diesem Abschnitt werden Konstanten und Variablen definiert, die im gesamten Code verwendet werden. Wir legen die Pins für das Relais und den PIR-Sensor sowie eine Zeitverzögerungskonstante für die Bewegung fest. Außerdem gibt es eine Variable zur Verfolgung des letzten Zeitpunkts einer erkannten Bewegung und ein Flag zur Überwachung, ob eine Bewegung erkannt wurde.

    // Define the pin number for the relay
    const int relayPin = 9;
    
    // Define the pin number for the PIR sensor
    const int pirPin = 8;
    
    // Motion delay threshold in milliseconds
    const unsigned long MOTION_DELAY = 5000;
    
    unsigned long lastMotionTime = 0;  // Timestamp of the last motion detection
    bool motionDetected = false;       // Flag to track if motion is detected
    
  2. Konfiguration der Pins in der setup() Funktion

    In der setup() Funktion konfigurieren wir die Pinmodi für das Relais und den PIR-Sensor und initialisieren das Relais so, dass es zu Beginn ausgeschaltet ist.

    void setup() {
      pinMode(relayPin, OUTPUT);    // Set relayPin as an output pin
      pinMode(pirPin, INPUT);       // Set the PIR pin as an input
      digitalWrite(relayPin, LOW);  // Turn off the relay initially
    }
    
  3. Hauptlogik in der loop() Funktion

    Die loop() Funktion enthält die Hauptlogik. Wenn der PIR-Sensor eine Bewegung erkennt, sendet er ein HIGH Signal, schaltet das Relais ein und aktualisiert die lastMotionTime. Wenn innerhalb der festgelegten Verzögerung (in diesem Fall 5 Sekunden) keine Bewegung mehr erkannt wird, wird das Relais ausgeschaltet.

    Diese Methode gewährleistet, dass die Lampe auch bei sporadischen oder kurzen Bewegungen für mindestens 5 Sekunden nach der letzten erkannten Bewegung eingeschaltet bleibt und somit eine gleichmäßige Beleuchtungsdauer erreicht wird.

    void loop() {
      if (digitalRead(pirPin) == HIGH) {
        lastMotionTime = millis();     // Update the last motion time
        digitalWrite(relayPin, HIGH);  // Turn on the relay (and hence the light)
        motionDetected = true;
      }
    
      // If motion was detected earlier and 5 seconds have elapsed, turn off the relay
      if (motionDetected && (millis() - lastMotionTime >= MOTION_DELAY)) {
        digitalWrite(relayPin, LOW);  // Turn off the relay
        motionDetected = false;
      }
    }