Автоматическое включение света в ванной. Счетчик посетителей

На основе ИК датчиков и Arduino pro min  сделал счетчик посетителей. Программа определяет направление движения и если кто то зашел в ванную автоматически включается свет.

ИК датчик

sku_148556_3

Датчики в дверном проеме. Устанавливал уже в установленную дверную коробку, просверлив два отверстия на 18 мм перьевым сверлом.  Arduino стоит за наличником дверной коробки.

IMG_1071_

Герконы покупал врезные

Встроенный-тип-сигнализации-магнитный-датчик-DoorWindow-встраиваемые-геркон-Белый

Так выглядит геркон в дверной коробке

IMG_1278!

А это магнит в двери
IMG_1280!

Код для Arduino

bool flag=0;
bool flag2=0;
bool state=0;
bool state2=0;
int DoorPin = 10; //Геркон
int pause=500;
int StatusDoor=0;
int status1=0;
int status2=0;
 
void setup(){          
	// Serial.begin(9600);
	 pinMode(13,OUTPUT);  // Импульс если зашли
         pinMode(12,OUTPUT);  // Импульс если вышли
         pinMode(DoorPin, INPUT);  //
         digitalWrite(DoorPin, HIGH);  // включить подтягивающий резистор
         pinMode(2, INPUT);
         pinMode(3, INPUT);
         digitalWrite( 12 , LOW );
         digitalWrite( 13 , LOW );
	    }
void loop(){
  StatusDoor = digitalRead(DoorPin);    // узнаём состояние двери
  if(StatusDoor==HIGH){                 // Если Дверь открыта, считаем сколько зашло
	  if(!digitalRead(2) && !flag){
	    delay(5);
	    flag = 1;
	      if(flag2 == 0){
	         state = 1;
	      }
	  }
         if(!digitalRead(3) && !flag2) {
	    delay(5);
	    flag2 = 1;
	       if(flag == 0) {
	       state2 = 1;
	      }
         }
	 if(digitalRead(3) && digitalRead(2)) {
     	    if(!flag || !flag2){
	        state = 0;
	        state2 = 0;
	        flag = 0;
	        flag2 = 0;
	    }  
           if(flag && state2){ //Зашли
              digitalWrite( 13 , HIGH );
              delay(pause);
              digitalWrite( 13 , LOW );
	      flag = 0;
	      flag2 = 0;
	      state2 = 0;
	   }
	   if(flag2 && state){ //Вышли
              digitalWrite( 12 , HIGH );
              delay(pause);
              digitalWrite( 12 , LOW );
	      flag = 0;
	      flag2 = 0;
              state = 0;
	   }
	 }
  }
}

12
Отправить ответ

avatar
7 Цепочка комментария
5 Ответы по цепочке
3 Последователи
 
Популярнейший комментарий
Цепочка актуального комментария
7 Авторы комментариев
instalatorAlexander MextnerAlexanderTimАндрей Авторы недавних комментариев
Новые вначале Старые вначале По голосам
Владимир
Гость
Владимир

Если Вас не затруднит, можно подробнее про датчики. Модель, аналоги.
Как определяется статус двери?
Буду благодарен ответу на почту ar4er06@mail.ru

алекс
Гость
алекс

как вы монтировали эти датчики в коробку? уже на установленной?

фото установки геркона тоже было бы интересно

алекс
Гость
алекс
Андрей
Гость
Андрей

Добрый день, хочу у себя использовать датчики E18-D80NK, как они у вас работают? есть жалобы на них?

Tim
Гость
Tim

большая просьба, если можно написать код для одной ардуины управления светом в ванной на основе счетчика посетителей, я про эту статью: geektimes.ru/post/270140
у меня каждая ардуина сама по себе (без основного контроллера)

Alexander
Гость
Alexander

Данный код имеет один изъян: если посетитель постоит в двери и уйдет/зайдет обратно, то программа будет считать его как вошедшего или вышедшего, в зависимости от того с какой стороны он был до того.
Решение:
в 25 строке написать: if(!digitalRead(2) && digitalRead(3) && !flag) {
а в 32 строке написать: if(!digitalRead(3) && digitalRead(2) && !flag2) {

Alexander Mextner
Гость

Всё ещё пользуетесь этим решением с двумя датчиками пересечения? нормально работает? . . Я когда думал как сделать решил не делать так, потому что кажется что если «не аккуратно» проходить, то будет некорректно определяться (можно зайти вдвоём и выйти по-раздельности, или махать руками проходя или ещё что). . . Я решал задачу определения занятости ванной, не важно каким количеством человек, статистика тоже не нужна Сделал геркон+датчик движения 1. если дверь закрылась и затем было движение, значит в помещении кто-то есть пока дверь не откроется 2. если дверь открыта считать что внутри кто-то есть пока после последнего движение не прошло N… Читать далее »