Hallo liebe community,
Durch einen PIR - Sensor (HC- SR501) soll ein Bewegungsablauf (Steuerung eines Elektromotors mit Hilfe von Relais) in Gang gesetzt werden.
Mein Problem ist, dass der Bewegungsablauf durchläuft obwohl der Bewegungsmelder keine Bewegung registriert hat und dann auch kontinuierlich weiter läuft. Dafür habe ich ihn mit einem T- Shirt abgedeckt. Das ist der Sketch:
int Relais1 = 8;
int Relais2 = 9;
int Relais3 = 10;
int Relais4 = 11;
int pirPin = 7; // Input for HC-S501 // pirPin ist LOW wenn keine Bewegung registriert wurde und wird HIGH wenn eine Bewegung registiriert wird
int pirValue = LOW; // Place to store read PIR Value // Platz an dem der gelesene PIR- Wert gespeichert wird
int Bewegungswert = LOW; // Der Bewegungswert ist zu Beginn LOW / 0
void setup() {
pinMode(Relais1, OUTPUT);
pinMode(Relais2, OUTPUT);
pinMode(Relais3, OUTPUT);
pinMode(Relais4, OUTPUT);
pinMode(pirPin, INPUT);
digitalWrite(Relais1, HIGH); // regelt, dass die Relais offen bleiben (normally open) wenn Strom angelegt wird
digitalWrite(Relais2, HIGH);
digitalWrite(Relais3, HIGH);
digitalWrite(Relais4, HIGH);
}
void loop() {
// Bewegungsablauf
pirValue = digitalRead(pirPin); // der gelesene Wert von pirPin wird auf pirValue gespeichert
if (pirValue == HIGH && Bewegungswert == LOW ) // wenn pirValue = HIGH und Bewegungswert = LOW
{
Bewegungswert = HIGH;
}
if ( Bewegungswert = HIGH)
{
delay(2000); // die Anfangspause soll dafür sorgen, dass die Bewegung erst beginnt, wenn die Bewegung des Anderen abgeschlossen ist!
digitalWrite(Relais1, LOW); // Aufwärtsbewegung
digitalWrite(Relais2, LOW);
delay (3000); // regelt die Zeit der Aufwärtsbewegung
digitalWrite(Relais1, HIGH);
digitalWrite(Relais2, HIGH);
delay (1000); //regelt die Zeit des Stillstandes
digitalWrite(Relais3, LOW); // Abwärtsbewegung
digitalWrite(Relais4, LOW);
delay(3000); // regelt die Zeit der Abwärtsbewegung
digitalWrite(Relais3, HIGH); // Bewegungsende
digitalWrite(Relais4, HIGH);
Bewegungswert = LOW; // Bewegungswert LOW setzen
}
}
Ich habe dann erstmal diesen Sketch hier ausprobiert mit Blick auf den seriellen Monitor, um auszuschließen, dass es nicht an einem defekten Bewegungsmelder liegt. Der Bewegungsmelder funktioniert jedoch einwandfrei.
//Der Bewegungsmelder funktioniert einwandfrei!
const int pPIR = 7; // Input for HC - S501
int pirValue; // Place to store read PIR Value
int lastValue = 0;
void setup()
{
// put your setup code here, to run once:
Serial.begin(115200); // das ist die Schnittstelle mit dem seriellen Monitor; Sie muss beim seriellen Monitor auch auf 115200 eingestellt werden!
delay(2500);
Serial.println("Motion Sensor working...");
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
pinMode(pPIR, INPUT);
}
void loop()
{
// put your main code here, to run repeatedly:
pirValue = digitalRead(pPIR);
digitalWrite(LED_BUILTIN, pirValue);
if(!pirValue) lastValue = 0;
if(pirValue && !lastValue)
{
Serial.print(millis());
Serial.println(" ms - Motion detected");
lastValue = pirValue;
}
}
Kann mir bitte jmd. weiter helfen:)?.
Herzliche Grüße Leonardo