Тема: Проблема с PIR датчиком
Доброго времени суток. Вродебы простая задача но столкнулся со след. проблемой - есть вот такой датчик http://arduino.shopium.ua/products/arduino-pir-sensor/ , по срабатыванию датчика должен включаться свет в комнате с пом. реле,на ардуину залил стандартный скетч из примеров
01 //Время калибровки датчика (10-60 сек. по даташиту)
02 int calibrationTime = 30;
03
04 //Время, в которое был принят сигнал отсутствия движения(LOW)
05 long unsigned int lowIn;
06
07 //Пауза, после которой движение считается оконченным
08 long unsigned int pause = 1000;
09
10 //Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет
11 boolean lockLow = true;
12 //Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
13 boolean takeLowTime;
14
15 int pirPin = 41; //вывод подключения PIR датчика
16 int ledPin = 50; //вывод сигнального диода
17 int relayPin = 40; //реле пин
18 int PhotoRPin = A8; //Фоторезистор
19 int PhotoRValue;
20
21 void setup()
22 {
23 Serial.begin(9600);
24
25 pinMode(pirPin, INPUT);
26 pinMode(ledPin, OUTPUT);
27 pinMode(relayPin, OUTPUT);
28
29 //!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять HIGH на LOW
30 digitalWrite(relayPin, LOW);
31 delay(4000);
32 digitalWrite(pirPin, LOW);
33
34 //дадим датчику время на калибровку
35 for(int i = 0; i < calibrationTime; i++)
36 {
37 //Во время калибровки будет мигать сигнальный диод
38 i % 2 ? digitalWrite(ledPin, HIGH) : digitalWrite(ledPin, LOW);
39 delay(1000);
40 }
41 //По окончанию калибровки зажжем сигнальный диод
42 digitalWrite(ledPin, HIGH);
43 Serial.println("SENSOR ACTIVE");
44 delay(50);
45 dht.begin();
46 }
47
48 void loop()
49 {
50
51 {
52 PhotoRValue = analogRead(PhotoRPin);
53 Serial.println(PhotoRValue);
54 delay(1000);
55 }
56 //Если обнаружено движение
57 if(digitalRead(pirPin) == HIGH)
58 {
59 //Если до этого момента еще не включили реле
60 if(lockLow)
61 {
62 lockLow = false;
63
64 //Включаем реле.
65 //!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять LOW на HIGH
66 if (PhotoRValue<50)
67 {
68 digitalWrite(relayPin, HIGH);
69 digitalWrite(ledPin, HIGH);
70 delay(50);
71 }
72 }
73 takeLowTime = true;
74 }
75
76 //Ели движения нет
77 if(digitalRead(pirPin) == LOW)
78 {
79 //Если время окончания движения еще не записано
80 if(takeLowTime)
81 {
82 lowIn = millis(); //Сохраним время окончания движения
83 takeLowTime = false; //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения
84 }
85 //Если время без движение превышает паузу => движение окончено
86 if(!lockLow && millis() - lowIn > pause)
87 {
88 //Изменяем значение флага, чтобы эта часть кода исполнилась лишь раз, до нового движения
89 lockLow = true;
90 digitalWrite(relayPin, LOW);
91 digitalWrite(ledPin, LOW);
92 delay(50);
93 } }}
Проблема в следующем - при движении датчик срабатывает и свет включается но через определённый интервал (выставленный физически регулятором на самом датчике ) свет гаснет не зависимо от того было ли движение в течении этого времени или нет. По логике нужно так , что после первого движения включается свет , потом если через время, например 3 минуты, движения небыло - свет выключается, если за это время было движение, то отсчёт опять обнуляется и опять ждём 3 минуты. Но сейчас срабатывает только на первое движение а на последующие нет реакции(если они входят в этот отведённый интервал установленный регулятором на датчике). Помогите пожалуйста решить проблему. кстати переменную long unsigned int pause = 1000; ставил значение и 180000, езультат тотже (((