Схема вроде простая. Тинька85 плюс 2 HC-SR501. И через реле лампа на 220В. Есть еще фоторезистор, что бы в светлое время не работала. Вот код:
//Фоторезистор
#define InLight A0
//Датчик движения 1
#define DD1 PB0
//Датчик движения 2
#define DD2 PB2
//Выход на реле
#define RELE PB3
//Выход на светодиод
#define LED PB4
boolean lockLow = true; //Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
boolean takeLowTime;
long unsigned int lowIn; //Пауза, после которой движение считается оконченным
long unsigned int pause = 5000; //Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет
unsigned long tstab = 0;
uint16_t osv;
void setup() {
pinMode(DD1, INPUT);
pinMode(DD2, INPUT);
pinMode(InLight, INPUT);
pinMode(RELE, OUTPUT);
pinMode(LED, OUTPUT);
digitalWrite(DD1, LOW); //дадим датчикам время на калибровку 30 секунд
digitalWrite(DD2, LOW);
for (int i = 30; i >= 0; i--)
{
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
delay(500);
}
delay(50);
digitalWrite(LED, LOW);
}
void loop() {
osv = analogRead(InLight);
if (osv <= 100) {
//Работаем с датчиком движения, LockLow = false при обнаружении движения, True в состоянии покоя
if (digitalRead(DD1) == HIGH or digitalRead(DD2) == HIGH) {
//Если еще не вывели информацию об обнаружении
if (lockLow)
{
lockLow = false;
digitalWrite(LED, LOW);
digitalWrite(RELE, HIGH);
tstab = millis();
}
takeLowTime = true;
}
//Если движения нет
else
{
//Если время окончания движения еще не записано
if (takeLowTime)
{
lowIn = millis(); //Сохраним время окончания движения
takeLowTime = false; //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения
}
//Если время без движение превышает паузу => движение окончено
if (!lockLow && millis() - lowIn > pause)
{
//Изменяем значение флага, чтобы эта часть кода исполнилась лишь раз, до нового движения
lockLow = true;
tstab = millis();
digitalWrite(LED, HIGH);
digitalWrite(RELE, LOW);
}
}
}
}
Вот схема:
Так вот. Как видно из кода, при подаче питания происходит калибровка датчиков движения.
Так вот работать схема начинает только когда фоторезистор освещен. Начинает моргать светодиод. И как положено проморгается 30 раз. Но т.к. светло датчики не работают. Если же свет выключить (закрыть фоторезистор пальцем), то схема работать перестает. Если закрыть фоторезистор во время калибровки (моргания светодиода), то он перестает моргать. Как будто питание отключается от Тиньки. Но оно есть, я проверял.
Вот и не пойму, где проблема. При чем этот код для работы датчиков движения уже много где использовал без проблем. И лампу включал по датчику движения по такой же схеме.
Подскажите, может кто чего заметит.