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¶
cpn_pir_motion
2. Code¶
Öffnen Sie die Datei
05-Motion_triggered_relay.ino
im Verzeichnisultimate-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.
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
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 }
Hauptlogik in der loop() Funktion
Die
loop()
Funktion enthält die Hauptlogik. Wenn der PIR-Sensor eine Bewegung erkennt, sendet er einHIGH
Signal, schaltet das Relais ein und aktualisiert dielastMotionTime
. 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; } }