Выключение света по датчику движения

zver12r
Offline
Зарегистрирован: 20.01.2015

Это моя первая тема на форуме, прошу сильно не пинать. Прошу помощи, уважаемые форумчане. 

Делаю потихоньку свой умный, пока на начальном этапе решил начать с управления освещением. Идея такова: в каждой комнате ставиться по датчику движения,  и выключатели без фиксации(кнопки) типа Legrand, либо же переделка обычных выключателей , и добавление в них вот таких кнопок: http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku . Дак вот, свет должен включаться только с помощью кнопки, а выключаться при отсутствии движения (первоначаьно 10 минут)  и с помощью повторного нажатия на кнопку. Т.е., если будет обнаружено движение в тот момент, когда свет выключен, то свет в комнате не должен включиться. 

Скетч для управления датчиком движения, взят с http://zelectro.cc/PIR_sensor

//Время, в которое был принят сигнал отсутствия движения(LOW)
long unsigned int lowIn;        

//Пауза, после которой движение считается оконченным
long unsigned int pause = 60000; 

//Флаг. false = значит движение уже обнаружено, true - уже известно, что движения нет
boolean lockLow = true;
//Флаг. Сигнализирует о необходимости запомнить время начала отсутствия движения
boolean takeLowTime; 

int pirPin = 2;    //вывод подключения PIR датчика
int relayPin = 4;  //реле пин

void setup()
{
  pinMode(pirPin, INPUT);
  pinMode(relayPin, OUTPUT);

  //!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять HIGH на LOW
  digitalWrite(relayPin, HIGH);
  delay(4000);
  digitalWrite(pirPin, LOW);

  
}

void loop()
{
  //Если обнаружено движение
  if(digitalRead(pirPin) == HIGH)
  {
    //Если до этого момента еще не включили реле
    if(lockLow)
    {
      lockLow = false;      
      //Включаем реле.
      //!ВНИМАНИЕ! При использовании n-p-n реле необходимо в след. строчке поменять LOW на HIGH
      digitalWrite(relayPin, LOW);
      delay(50);
    }        
    takeLowTime = true;
  }

  //Ели движения нет
  if(digitalRead(pirPin) == LOW)
  {      
    //Если время окончания движения еще не записано
    if(takeLowTime)
    {
      lowIn = millis();          //Сохраним время окончания движения
      takeLowTime = false;       //Изменим значения флага, чтобы больше не брать время, пока не будет нового движения
    }
    //Если время без движение превышает паузу => движение окончено
    if(!lockLow && millis() - lowIn > pause)
    { 
      //Изменяем значение флага, чтобы эта часть кода исполнилась лишь раз, до нового движения
      lockLow = true;                
      digitalWrite(relayPin, HIGH);
      delay(50);
    }
  }
}

Для управления кнопками: 

int flag=0; 
int but = 9;
int led = 6
void setup()    
{ 
       
    pinMode(led, OUTPUT);         
      
        
} 

void loop() 

{ 
        
     if(digitalRead(but)==HIGH&&flag==0)//если кнопка нажата    
     // и перемення flag равна 0 , то ... 
     
     { 
           
       digitalWrite(led,!digitalRead(led)); 
       flag=1; 
        //это нужно для того что бы с каждым нажатием кнопки 
        //происходило только одно действие 
        // плюс защита от "дребезга"  100% 
        
     } 
        
      if(digitalRead(but)==LOW&&flag==1)//если кнопка НЕ нажата 
     //и переменная flag равна - 1 ,то ... 
     { 
           
        flag=0;//обнуляем переменную flag 
     } 
} 

 

 

zver12r
Offline
Зарегистрирован: 20.01.2015

P.S. Забыл указать, всё это будет управляться Ардуино pro mini, планирую подключить от 3х до 5 датчиков движения и кнопок. В коде переменная объявлена для реле, у меня используется оптосимисторная развяка moc3061 + bta16

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

То есть спокойно посидеть за компом или почитать книгу вы не сможете, придётся каждые 10 минут перед датчиком ходить? :)

verhmax
Offline
Зарегистрирован: 21.12.2014

dimax пишет:

То есть спокойно посидеть за компом или почитать книгу вы не сможете, придётся каждые 10 минут перед датчиком ходить? :)

автор планирует много кнопок задействовать, значит кнопка будет возле компа находиться тоже или на сиденье стульчика (нажата при появлении на ней попы)

zver12r
Offline
Зарегистрирован: 20.01.2015

Это пока примерное время, нужно понаблюдать, сколько времени будешь находиться в комнате в среденем, и от этого уже отталкиваться, и увеличивать время. 

zver12r
Offline
Зарегистрирован: 20.01.2015

verhmax пишет:

dimax пишет:

То есть спокойно посидеть за компом или почитать книгу вы не сможете, придётся каждые 10 минут перед датчиком ходить? :)

автор планирует много кнопок задействовать, значит кнопка будет возле компа находиться тоже или на сиденье стульчика (нажата при появлении на ней попы)

Кнопок и датчиков движения будет задействовано ровно столько, сколько имеется ламп освещения. Т.е., комнаты, зал, кухня и т.д.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

zver12r, я ещё в домикроконтроллерную эпоху пытался ввести автоматику дома, но ограничился лишь управлением света с ИК  пульта. Это реально нужно, когда уже лёг в кровать, а вставать гасить свет лень.  Остальное всё излишества, всегда найдётся такая ситуация, когда  автоматика сделает не то, что нужно.  Выключит свет, когда не нужно, или включит когда не нужно.  И это о-о-очень бесит.. ))).

bwn
Offline
Зарегистрирован: 25.08.2014

Поставил я себе датчик движения в коридоре, теперь и собака им пользоватся научилась. Страшно ей ночью похоже, вот и пользуется))) Зараза.

zver12r
Offline
Зарегистрирован: 20.01.2015

dimax пишет:

zver12r, я ещё в домикроконтроллерную эпоху пытался ввести автоматику дома, но ограничился лишь управлением света с ИК  пульта. Это реально нужно, когда уже лёг в кровать, а вставать гасить свет лень.  Остальное всё излишества, всегда найдётся такая ситуация, когда  автоматика сделает не то, что нужно.  Выключит свет, когда не нужно, или включит когда не нужно.  И это о-о-очень бесит.. ))).

конечно согласен что автоматика может сделать не то, но ведь из-за чего я стал рассматривать такой вариант, свет может быть включен во всем доме, а находиться реально только в одной комнате,  тут я рассматриваю вариант отключения света как неоходимость - в целях экономии электроэнергии. Если такой вариант приживется, то будет очень хорошо, в противном случае сделаю выключение с пульта(уже работает в прихожей, вторую неделю).