Выключение света по датчику движения
- Войдите на сайт для отправки комментариев
Это моя первая тема на форуме, прошу сильно не пинать. Прошу помощи, уважаемые форумчане.
Делаю потихоньку свой умный, пока на начальном этапе решил начать с управления освещением. Идея такова: в каждой комнате ставиться по датчику движения, и выключатели без фиксации(кнопки) типа 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 } }
P.S. Забыл указать, всё это будет управляться Ардуино pro mini, планирую подключить от 3х до 5 датчиков движения и кнопок. В коде переменная объявлена для реле, у меня используется оптосимисторная развяка moc3061 + bta16
То есть спокойно посидеть за компом или почитать книгу вы не сможете, придётся каждые 10 минут перед датчиком ходить? :)
То есть спокойно посидеть за компом или почитать книгу вы не сможете, придётся каждые 10 минут перед датчиком ходить? :)
автор планирует много кнопок задействовать, значит кнопка будет возле компа находиться тоже или на сиденье стульчика (нажата при появлении на ней попы)
Это пока примерное время, нужно понаблюдать, сколько времени будешь находиться в комнате в среденем, и от этого уже отталкиваться, и увеличивать время.
То есть спокойно посидеть за компом или почитать книгу вы не сможете, придётся каждые 10 минут перед датчиком ходить? :)
автор планирует много кнопок задействовать, значит кнопка будет возле компа находиться тоже или на сиденье стульчика (нажата при появлении на ней попы)
Кнопок и датчиков движения будет задействовано ровно столько, сколько имеется ламп освещения. Т.е., комнаты, зал, кухня и т.д.
zver12r, я ещё в домикроконтроллерную эпоху пытался ввести автоматику дома, но ограничился лишь управлением света с ИК пульта. Это реально нужно, когда уже лёг в кровать, а вставать гасить свет лень. Остальное всё излишества, всегда найдётся такая ситуация, когда автоматика сделает не то, что нужно. Выключит свет, когда не нужно, или включит когда не нужно. И это о-о-очень бесит.. ))).
Поставил я себе датчик движения в коридоре, теперь и собака им пользоватся научилась. Страшно ей ночью похоже, вот и пользуется))) Зараза.
zver12r, я ещё в домикроконтроллерную эпоху пытался ввести автоматику дома, но ограничился лишь управлением света с ИК пульта. Это реально нужно, когда уже лёг в кровать, а вставать гасить свет лень. Остальное всё излишества, всегда найдётся такая ситуация, когда автоматика сделает не то, что нужно. Выключит свет, когда не нужно, или включит когда не нужно. И это о-о-очень бесит.. ))).
конечно согласен что автоматика может сделать не то, но ведь из-за чего я стал рассматривать такой вариант, свет может быть включен во всем доме, а находиться реально только в одной комнате, тут я рассматриваю вариант отключения света как неоходимость - в целях экономии электроэнергии. Если такой вариант приживется, то будет очень хорошо, в противном случае сделаю выключение с пульта(уже работает в прихожей, вторую неделю).