Умные туалет и ванная.

Hamster
Offline
Зарегистрирован: 12.07.2015

Не открывается ссылка

Brewster
Offline
Зарегистрирован: 26.11.2017

А вы прям в али начните в поиске вбивать это название. Китайцы жгут. 

Probelzaelo
Offline
Зарегистрирован: 15.04.2011

Да уж, реально жгут - умный пирдатчик движения унитаза уф ...  уточнение места

знаем где   .com/item/PIR-16/32880924402.html

 

Rex
Offline
Зарегистрирован: 16.02.2018
001#define SENSOR1_PIN 2            //вход управления 1м электроклапаном
002#define SENSOR2_PIN 3            //вход управления 2м электроклапаном
003#define FLAP1_PIN 4              //выход управления 1м электроклапаном
004#define FLAP2_PIN 5              //выход управления 2м электроклапаном
005#define GERKON_PIN 6             //вход геркон
006#define SENSOR_PIN 7             //вход датчик движения
007#define LAMP_PIN 8               //выход управления освещением
008#define R_PIN 9                  //выход управления красным цветом
009#define G_PIN 10                 //выход управления зеленым цветом
010#define B_PIN 11                 //выход управления голубым цветом
011#define RGB_POWER 12             //выход вкл/выкл БП для RGB
012#define FAN_BUTTON_PIN 15        //вход управления вентилятором (кнопка)
013#define FAN_PIN 16               //выход управления вентилятором
014#define DEBOUNCE_DELAY 100       //время антидребезга кнопки вентилятора в мс
015#define FAN_ON_TIME 10           //время работы вентилятора после выкл. света, мин
016#define ON_FLAP1_ON 30           //время работы 1го клапана при активации сенсора, сек
017#define ON_FLAP1_OFF 2           //время работы 1го клапана при деактивации сенсора, сек
018#define ON_FLAP2_ON 30           //время работы 2го клапана при активации сенсора, сек
019#define ON_FLAP2_OFF 2           //время работы 2го клапана при деактивации сенсора, сек
020#define DEBOUNCE1_SENSOR 300     //задержка сработки для 1го электроклапана, мс
021#define DEBOUNCE2_SENSOR 300     //задержка сработки для 2го электроклапана, мс
022#define DELAY_LAMP_OFF_OPEN 40   //задержка выключения света после открытия двери, сек
023#define DELAY_LAMP_OFF_CLOSE 15  //задержка выключения света после закрытия двери, сек
024#define DELAY_DOOR_CLOSE 5       //задержка регистрации движения после закрытия двери, сек
025#define DEBOUNCE_GERKON 80       //время антидребезга геркона в мс
026#define INTERVAL 250             //интервал мигания светодиода индик. сработки датчика движения, мс
027 
028//переменные для управления кранами
029unsigned long int timeSensor1On, timeSensor1Off, timeSensor2On, timeSensor2Off;
030bool flap1On = false;      //переменная для хранения состояния 1го электроклапана
031bool flap2On = false;      //переменная для хранения состояния 2го электроклапана
032bool sensor1 = LOW;        //переменная для хранения состояния сенсора 1го электроклапана
033bool sensor2 = LOW;        //переменная для хранения состояния сенсора 2го электроклапана
034bool lastSensor1 = HIGH;   //переменная для хранения последнего состояния сенсора 1го электроклапана
035bool lastSensor2 = HIGH;   //переменная для хранения последнего состояния сенсора 2го электроклапана
036//////////////////////////////////////////////////////////////////////////////////
037 
038//переменные для управления освещением
039bool lamp;           //переменная для хранения состояния освещения (вкл/выкл)
040bool gerkon_flag;    //вспомогательная переменная для хранения состояния сработки геркона
041bool sensor_flag;    //вспомогательная переменная для хранения состояния датчика движения
042bool motionClose;    //переменная для индикации движения при закрытой двери
043bool motionOpen;     //переменная для индикации движения при открытой двери
044unsigned long doorClosedTime, doorOpenedTime, doorClosedDelay; //переменные для хранения времени момента закрытия и открытия двери
045//переменные для функции светодиодной индикации сработки датчика движения
046unsigned long int previousMillis = 0;
047bool ledMotionState;
048byte motionCount = 0;
049////////////////////////////////////////////////////////////////////////////////////
050 
051//переменные для управления вентилятором
052bool fanState;
053bool fanButtonState;
054bool lastFanButtonState;
055unsigned long int lastDebounceTime = 0, fanButtonOffTime, workTime = (long)FAN_ON_TIME * 60 * 1000;
056/////////////////////////////////////////////////////////////////////////////////////
057 
058//переменные для функции задержки (антидребезга) геркона
059bool _bounse3S = 1;
060bool _bounse3O = 1;
061unsigned long _bounse3P = 0UL;
062/////////////////////////////////////////////////////////////////////////////////////
063 
064//переменные для функций задержек (антидребезга) сенсоров электроклапанов
065bool _bounse1S = 1;
066bool _bounse1O = 1;
067unsigned long _bounse1P = 0UL;
068bool _bounse2S = 1;
069bool _bounse2O = 1;
070unsigned long _bounse2P = 0UL;
071/////////////////////////////////////////////////////////////////////////////////////
072 
073//переменные для управления RGB
074byte bright = 100; // яркость, от 0 до 100 (можно повесить на второй потенциометр при желании)
075byte R, G, B;
076 
077void setup() {          //конфигурация портов (вход или выход)
078  pinMode(SENSOR1_PIN, INPUT_PULLUP);   //подтягиваем вход к плюсу через внутренний резистор 20к
079  pinMode(FLAP1_PIN, OUTPUT);
080  pinMode(SENSOR2_PIN, INPUT_PULLUP);
081  pinMode(FLAP2_PIN, OUTPUT);
082  pinMode(GERKON_PIN, INPUT_PULLUP);
083  pinMode(LAMP_PIN, OUTPUT);
084  pinMode(SENSOR_PIN, INPUT);
085  pinMode(FAN_BUTTON_PIN, INPUT_PULLUP);
086  pinMode(FAN_PIN, OUTPUT);
087  pinMode(R_PIN, OUTPUT);
088  pinMode(G_PIN, OUTPUT);
089  pinMode(B_PIN, OUTPUT);
090  pinMode(RGB_POWER, OUTPUT);
091  pinMode(13, OUTPUT);
092}
093 
094//управление светодиодной лентой RGB (взято с сайта <a href="http://alexgyver.ru/arduino-algorithms/" title="http://alexgyver.ru/arduino-algorithms/" rel="nofollow">http://alexgyver.ru/arduino-algorithms/</a>)
095void rgbLed () {
096  int colorPot = analogRead(0); // получаем значение с потенциометра (0 - 1023)
097  // разбиваем диапазон 0 - 1023 на участки, и играемся с цветом согласно текущему значению
098  if (colorPot >= 10) {  //если значение больше 10, вкл. БП, иначе выкл.
099    digitalWrite(RGB_POWER, HIGH);
100  } else {
101    digitalWrite(RGB_POWER, LOW);
102  }
103  if (colorPot <= 10) {
104    R = 0;
105    G = 0;
106    B = 0;
107  } else if (colorPot > 10 && colorPot <= 20) {
108    byte k = map(colorPot, 10, 20, 0, 255);
109    R = 255;
110    G = 255;
111    B = 255;
112  } else if (colorPot > 20 /*&& colorPot <= 145*/) {
113    byte k = map(colorPot, /*10, 145*/20, 1023, 0, 255);
114    R = 255 - k;
115    G = 255 - k;
116    B = 255 - k;
117  } /*else if (colorPot > 145 && colorPot <= 290) {
118    byte k = map(colorPot, 145, 290, 0, 255);
119    R = 0;
120    G = 0;
121    B = k;
122  } else if (colorPot > 290 && colorPot <= 435) {
123    byte k = map(colorPot, 290, 435, 0, 255);
124    R = 0;
125    G = k;
126    B = 255;
127  } else if (colorPot > 435 && colorPot <= 580) {
128    byte k = map(colorPot, 435, 580, 0, 255);
129    R = k;
130    G = 255;
131    B = 255;
132  } else if (colorPot > 581 && colorPot <= 725) {
133    byte k = map(colorPot, 581, 725, 0, 255);
134    R = 255 - k;
135    G = k;
136    B = 0;
137  } else if (colorPot > 725 && colorPot <= 870) {
138    byte k = map(colorPot, 725, 870, 0, 255);
139    R = 0;
140    G = 255 - k;
141    B = k;
142  } else if (colorPot > 870) {
143    byte k = map(colorPot, 870, 1023, 0, 255);
144    R = k;
145    G = 0;
146    B = 255 - k;
147  }*/
148  // подаём ШИМ на светодиод, учитывая яркость
149  analogWrite(R_PIN, (bright * R / 100));
150  analogWrite(G_PIN, (bright * G / 100));
151  analogWrite(B_PIN, (bright * B / 100));
152}
153 
154//функция вкл/выкл вентилятора
155//вентилятор вкл/выкл кнопкой при включенном свете. После выключения света,
156//если вентилятор был включен, он выключится через время FAN_ON_TIME
157void fan(bool fanOff) {
158  bool reading = !digitalRead(FAN_BUTTON_PIN);
159  if (reading != lastFanButtonState) {
160    lastDebounceTime = millis() + DEBOUNCE_DELAY;
161  }
162  if (lastDebounceTime <= millis()) {
163    if (reading != fanButtonState) {
164      fanButtonState = reading;
165      if (!fanButtonState) {
166        fanState = !fanState;
167      }
168    }
169  }
170  lastFanButtonState = reading;
171 
172  if (fanOff && fanState) {  //если свет выключился и вентилятор включен
173    fanButtonOffTime = millis() + workTime;  //записываем время выключения света (с опережением millis())
174  }
175  if (fanButtonOffTime <= millis()) {  //если прошло время FAN_ON_TIME
176    fanState = LOW;  //выключить вентилятор
177  }
178  digitalWrite(FAN_PIN, fanState);
179}
180 
181//функция антидребезга для геркона
182//сформирована в программе FLProg
183bool bounseGerkon () {
184  bool   _bounceTmpD1 =  digitalRead (GERKON_PIN);
185  if (!_bounse3S)
186  {
187    if (millis() >= (_bounse3P + DEBOUNCE_GERKON))
188    {
189      _bounse3O =  _bounceTmpD1;
190      _bounse3S = 1;
191    }
192  }
193  else
194  {
195    if ( _bounceTmpD1 != _bounse3O )
196    {
197      _bounse3S = 0;
198      _bounse3P = millis();
199    }
200  }
201  return _bounse3O;
202}
203 
204//------------------------функция управления освещением, начало---------------------------
205/* Логики работы: открыли дверь - включился свет, начался отсчет выдержки. По окончании
206  выдержки свет выключается, если при открытой двери есть движение, отсчет выдержки
207  обновляется. Если закрыть дверь при включенном свете - начинается отсчет второй вы-
208  держки, по истечении которой свет выключится. Если есть движение при закрытой двери
209  и включенном свете и при сработке датчика движени три раза в течении DELAY_LAMP_OFF_OPEN, свет не выключится
210  до следующего открывания двери не зависимо будет ещё срабатывать датчик движения или нет.
211*/
212void lite() {
213  if (bounseGerkon () && !gerkon_flag) {   //если геркон разомкнулся (дверь открылась) и до этого был замкнут
214    gerkon_flag = HIGH;  //изменение переменной (дверь была открыта)
215    lamp = HIGH;  //включить свет
216    motionClose = LOW;  //сброс индикатора движения
217    doorOpenedTime = millis() + (long)DELAY_LAMP_OFF_OPEN * 1000;  //начало отсчета до выключения света при открытой двери
218  }
219  if (bounseGerkon () && gerkon_flag && digitalRead(SENSOR_PIN)) {  //если дверь открыта и есть движение
220    lamp = HIGH;  //включить свет
221    doorOpenedTime = millis() + (long)DELAY_LAMP_OFF_OPEN * 1000;  //обновление отсчета до выключения света при открытой двери
222  }
223  if (bounseGerkon () && gerkon_flag && doorOpenedTime <= millis()) {  //если дверь открыта и прошло время выдержки
224    lamp = LOW;  //выключить свет
225  }
226  if (!bounseGerkon () && gerkon_flag) {  //если геркон замкнулся (дверь закрылась) и до этого он был разомкнут
227    gerkon_flag = LOW;  //изменение переменной (дверь была закрыта)
228    doorClosedTime = millis() + (long)DELAY_LAMP_OFF_CLOSE * 1000;  //начало отсчета до выключения света при закрытой двери
229    doorClosedDelay = millis() + (long)DELAY_DOOR_CLOSE * 1000;  //начало задержки фиксации движения при закрытой двери
230  }
231  if (!bounseGerkon () && !gerkon_flag) {  //если дверь закрыта
232    if (doorClosedDelay <= millis()) {  //и если прошло время задержки до выключения света
233      if (digitalRead(SENSOR_PIN) && !sensor_flag) { //подсчет кол-ва сработок датчика движения при закрытой двери
234        sensor_flag = HIGH;                          //для предотвращение ложного включения света до следующего
235        motionCount ++;                              //открытия двери
236        motionClose = HIGH;                          //
237        if (!lamp) {  //если свет выключен
238          lamp = HIGH;  //включить свет
239          doorOpenedTime = millis() + (long)DELAY_LAMP_OFF_OPEN * 1000; //на время DELAY_LAMP_OFF_OPEN
240        }
241      }
242      if (!digitalRead(SENSOR_PIN) && sensor_flag) {  //если датчик движения деактивировался
243        sensor_flag = LOW;  //изменить переменную
244      }
245      if (motionCount >= 3) {
246        motionCount = 3;  //ограничение кол-ва сработок датчика движения при закрытой двери до 3
247      }
248    }
249  }
250  //если дверь закрыта, прошло время до выключения света и счетчик сработок меньше трех
251  if (!bounseGerkon () && !gerkon_flag && doorOpenedTime <= millis() && motionCount <= 2) {
252    lamp = LOW;  //выключить свет
253  }
254  //если дверь закрыта и движения не было и прошло время до выключения света при закрытой двери
255  if (!bounseGerkon () && !gerkon_flag && !motionClose && doorClosedTime <= millis()) {
256    lamp = LOW;  //выключить свет
257  }
258  digitalWrite(LAMP_PIN, lamp);  //передать состояние переменной lamp на пин LAMP_PIN
259 
260  if (!lamp) {  //если свет выключен
261    motionCount = 0;  //обнулить счетчик сработок датчика движения
262  }
263 
264  //индикация сработки датчика движения
265  //эту индикацию я сделал только для удобства мониторинга сработки датчика движения
266  if (digitalRead(SENSOR_PIN)) {                //если сработал датчик движения
267    digitalWrite(13, HIGH);    //включить светодиод
268  } else {
269    if (motionClose) {                               //мигание при сработке при закрытой двери
270      if (millis() - previousMillis >= INTERVAL) {   //
271        previousMillis = millis();                   //
272        if (ledMotionState == LOW) {                 //
273          ledMotionState = HIGH;                     //
274        } else {                                     //
275          ledMotionState = LOW;                      //
276        }                                            //
277        digitalWrite(13, ledMotionState);            //
278      }                                              //
279    } else {                 //при деактивации датчика движ., если не было сработки при закрытой двери,
280      digitalWrite(13, LOW); //выключить светодиод
281    }
282  }
283}
284//------------------------функция управления освещением, конец---------------------------
285 
286//функция задержки сработки для 1го электроклапана
287//сформирована в программе FLProg
288bool bounse1flap () {
289  bool   _bounceTmpD1 =  (digitalRead (SENSOR1_PIN));
290  if (!_bounse1S)
291  {
292    if (millis() >= (_bounse1P + DEBOUNCE1_SENSOR))
293    {
294      _bounse1O =  _bounceTmpD1;
295      _bounse1S = 1;
296    }
297  }
298  else
299  {
300    if ( _bounceTmpD1 != _bounse1O )
301    {
302      _bounse1S = 0;
303      _bounse1P = millis();
304    }
305  }
306  return _bounse1O;
307}
308 
309//функция задержки сработки для 2го электроклапана
310//сформирована в программе FLProg
311bool bounse2flap () {
312  bool   _bounceTmpD1 =  (digitalRead (SENSOR2_PIN));
313  if (!_bounse2S)
314  {
315    if (millis() >= (_bounse2P + DEBOUNCE2_SENSOR))
316    {
317      _bounse2O =  _bounceTmpD1;
318      _bounse2S = 1;
319    }
320  }
321  else
322  {
323    if ( _bounceTmpD1 != _bounse2O )
324    {
325      _bounse2S = 0;
326      _bounse2P = millis();
327    }
328  }
329  return _bounse2O;
330}
331 
332//функция управления 1м краном
333void flap1() {
334  sensor1 = bounse1flap ();                      //считывание состояние сенсора 1 с задержкой
335  if (sensor1 == LOW && lastSensor1 == HIGH) {   //если активен и последнее сост. - неактивен, то ...
336    digitalWrite(FLAP1_PIN, HIGH);                //включаем 1й электроклапан
337    lastSensor1 = LOW;                           //записываем последнее состояние сенсора 1
338    timeSensor1On = millis() + (ON_FLAP1_ON * 1000);       //записываем время сработки сенсора 1 +
339  }                                              //"опережаем время" на ON_FLAP1_ON для того,чтобы решить проблему
340  //с переполнением millis() т.е. "опережение времени" на ON_FLAP1_ON и ON_FLAP1_OFF
341  //(взято с сайта <a href="http://alexgyver.ru/arduino-algorithms/" title="http://alexgyver.ru/arduino-algorithms/" rel="nofollow">http://alexgyver.ru/arduino-algorithms/</a> от WakeUp4L1fe)
342 
343  if (sensor1 == HIGH && lastSensor1 == LOW) {   //если неактивен и последнее состояние сенсора 1 - активен
344    timeSensor1Off = millis() + (ON_FLAP1_OFF * 1000);     //записываем время деактивации сенсора 1 +
345    lastSensor1 = HIGH;                          //"опережаем время" на ON_FLAP1_OFF
346  }
347  if ((timeSensor1On <= millis() && sensor1 == LOW) ||   //если после активации сенсора 1 прошло время ON_FLAP1_ON
348      (timeSensor1Off <= millis() && lastSensor1 == HIGH)) { //или если после деактивации сенсора 1 прошло время ON_FLAP1_OFF
349    digitalWrite(FLAP1_PIN, LOW);   //то выключить кран
350  }
351}
352 
353//функция управления 2м краном
354void flap2() {
355  sensor2 = bounse2flap ();
356  if (sensor2 == LOW && lastSensor2 == HIGH) {
357    digitalWrite(FLAP2_PIN, HIGH);
358    lastSensor2 = LOW;
359    timeSensor2On = millis() + (ON_FLAP2_ON * 1000);
360  }
361  if (sensor2 == HIGH && lastSensor2 == LOW) {
362    timeSensor2Off = millis() + (ON_FLAP2_OFF * 1000);
363    lastSensor2 = HIGH;
364  }
365  if ((timeSensor2On <= millis() && sensor2 == LOW) ||
366      (timeSensor2Off <= millis() && lastSensor2 == HIGH)) {
367    digitalWrite(FLAP2_PIN, LOW);
368  }
369}
370 
371//основной цикл программы
372void loop() {
373  lite();
374  fan(lamp);
375  flap1();
376  flap2();
377  rgbLed ();
378}

Здравствуйте! Хочу поделиться своими наработками. Я написал программу для управления освещением и вытяжкой в ванной, сделал сенсорное управление кранами на кухне и в ванной, а так же RGB светодиодной лентой для подсветки кухонного гарнитура. Я только начинаю изучать Arduino и программирование так что не судите строго. Может кому то пригодится или знающие люди подскажут может можно как-то оптимизировать код программы.

Логика работы сенсоров кранов: если поднести руки (или любой предмет) вода включится, после того как убрали руки вода выключится через 2 с. Если в зону действия сенсора на долго попал какой-то предмет, например поставили кастрюлю в раковину, вода выключится через 30 с. И включится только после того как предмет будет убран и сенсор будет активирован снова.

Логика управления освещением и вытяжкой: при открытии двери свет включается и начинается выдержка 40 с до выключения света. Если фиксируется движение, начало выдержки обновляется. При закрытии двери начинается выдержка 5 с, при которой не фиксируется движение. Я добавил эту выдержку потому, что иногда при выходе из ванной и закрытии двери срабатывает датчик движения и включается свет, когда в ванной никого нет. Когда защитная выдержка заканчивается, начинается фиксация движения. И если датчик движения сработал три раза до выключения света, свет останется включенным до открытия двери не зависимо будет ли дальнейшее движение или нет. После закрытия двери, если нет движения, свет выключится через 15 с.

Вытяжка включается/выключается шнурком с кнопкой. При выключении света, если вытяжка была включена, начинается отсчет выдержки (я сделал 10 мин) до ее выключения. Включение света во время 10ти минутной выдержки сбрасывает отсчет, он начнется заново после выключения света.

По началу я пробовал другой алгоритм работы освещения. Использовал два ИК сенсора и считал кол-во входящих/выходящих человек. Но так как сенсоры расположены на расстоянии 6 см (ширина дверной коробки) были ложные срабатывания. Может быть я еще не удачно выбрал высоту установки датчиков, все люди разного роста, еще датчик повторно срабатывал от заплетенных волос. А маленький ребенок вообще не мог выключить свет. Так что пришлось отказаться от такого управления светом.

Управление RGB лентой и её блоком питания я сделал с помощью переменного резистора. Программный код, с некоторыми переделками, я взял с сайта http://alexgyver.ru/arduino-algorithms/

В своём проекте я использовал Arduino Nano.

 

Hamster
Offline
Зарегистрирован: 12.07.2015

Rex пишет:

... Но так как сенсоры расположены на расстоянии 6 см (ширина дверной коробки) были ложные срабатывания.

Приветствую!

Такая же ситуация была - удалось решить переходом на прерывания (см. выше мои сообщения). Сейчас расстояние между ИК датчиками порядка ~25 мм...

Вопрос к вам - что за краны и что за клапаны?

Буду благодарен за ссылку

Rex
Offline
Зарегистрирован: 16.02.2018

Здравствуйте!
Я сделал сенсорное управление обычными смесителями на кухне и в ванной. Ручкой смесителя регулируется напор воды. Температура воды регулируется с помощью термостатического смесителя, его выход я подключил вместо горячей воды к смесителю на раковине.
Подача воды осуществляется с помощью клапана на подобии как в стиральной машине. Только я нашел на 12 В и с резьбой 1/2.
Включение клапана с помощью ИК сенсора.

Клапана такие:
https://s.click.aliexpress.com/e/cMCGLjj4

Термостатические смесители такие:
https://s.click.aliexpress.com/e/DJEFoYE

Сенсоры:
https://s.click.aliexpress.com/e/fRZL8dU

Hamster
Offline
Зарегистрирован: 12.07.2015

Rex пишет:
Клапана такие: https://s.click.aliexpress.com/e/cMCGLjj4 Термостатические смесители такие: https://s.click.aliexpress.com/e/DJEFoYE

Спасибо! Возьму на заметку.

Еще вопрос - на сколько громко срабатывают клапана и каково качество их изготовления?

Ну и фотки в студию! ))) В частности интересно было бы увидеть как вы примостили сенсоры вблизи крана ;)

Rex
Offline
Зарегистрирован: 16.02.2018

Hamster пишет:

Rex пишет:
Клапана такие: https://s.click.aliexpress.com/e/cMCGLjj4 Термостатические смесители такие: https://s.click.aliexpress.com/e/DJEFoYE

Спасибо! Возьму на заметку.

Еще вопрос - на сколько громко срабатывают клапана и каково качество их изготовления?

Ну и фотки в студию! ))) В частности интересно было бы увидеть как вы примостили сенсоры вблизи крана ;)

Звук сработки клапанов такой же как на стиральной машине. Особо на него не обращаю внимания. Качество хорошее, работают уже около 3х месяцев. Термостатические смесители работают с 2015 года уже на второй квартире.

Фотки выложу позже. Сенсор я разместил в боковом сливном отверстии раковины. Но в новой квартире думаю перенести ИК диод и TSOP в корпус смесителя, чтобы не было срабатываний от противоположной стороны раковины. У меня стальная раковина и при настройке сенсора на сработку от рук в ценре раковины, и когда убираешь руки датчик начинает срабатывать отражаясь от противоположной стенки раковины. Поэтому пришлось уменьшить дальность до пропадания ложных срабатываний. Еще я заменил резистор для настройки дальности на многооборотный для большей точности.

Rex
Offline
Зарегистрирован: 16.02.2018

Обещанные фотографии:

Термостатический смеситель и клапан.

Термостатический смеситель и клапан.

ИК сенсор с внутренней стороны раковины:

ИК сенсор с наружи:

Геркон в дверном косяке:

PIR и вентилятор. На время опытов смонтировал так. В дальнейшем думаю смонтировать PIR в такой же светильник в какие смонтированы лампы освещения.

Hamster
Offline
Зарегистрирован: 12.07.2015

Кузяво! )

У меня два вопроса:

1. ИК сенсор как то защищен от влаги? если нет - то как долго он уже в работе?

2. Про геркон. Как вы надрессировали домашних, чтобы они дверь постоянно закрывали? ))) Судя по фото она к тому еще и откатная?

По сравнению с готовыми решениями для смесителей с ИК (от ~8к руб) схема вполне годная, только мне кажется надо что-то с ИК датчиком придумать...

Rex
Offline
Зарегистрирован: 16.02.2018

1. В сливное отверстие вставлен обрезок маркера и загерметизирован. С одной стороны приклеен прозрачный пластик. Так что на сенсор влага не попадает. В работе около полугода.

2. Дверь обычная. На фото видна дверь шкафа купе в ванной. Свет выключается и при открытой двери, у меня через 40 сек, если PIR не срабатывает.

В будущем я буду монтировать ИК сенсор в смеситель. Сейчас пока все находится в режиме тестов.

Hamster
Offline
Зарегистрирован: 12.07.2015

Понятно. Спасибо!

Rex пишет:

В будущем я буду монтировать ИК сенсор в смеситель

Интересно будет посмотреть что получилось. Удачи вам!

Hamster
Offline
Зарегистрирован: 12.07.2015

avton пишет:

http://ru.aliexpress.com/item/1pcs-IR-Infrared-Obstacle-Avoidance-Sensor...

Излучающий светодиод выпаивается и ставится напротив в дверном проеме,надо 2 таких датчика 

Доброго времени суток!

Подскажите, если кто владеет информацией, не смог сам найти, какова длина волны и мощность излучающего ИК светодиода на подобных датчиках?

В широком дверном проёме не добивает до приёмника ((

Хочу попробовать поставить помощнее ИК светодиод, типа такого:

https://ru.aliexpress.com/item/5-3/32953182050.html?spm=a2g0s.13010208.9...

 

nzl
Offline
Зарегистрирован: 05.12.2015

Hamster пишет:

avton пишет:

http://ru.aliexpress.com/item/1pcs-IR-Infrared-Obstacle-Avoidance-Sensor...

Излучающий светодиод выпаивается и ставится напротив в дверном проеме,надо 2 таких датчика 

Доброго времени суток!

Подскажите, если кто владеет информацией, не смог сам найти, какова длина волны и мощность излучающего ИК светодиода на подобных датчиках?

В широком дверном проёме не добивает до приёмника ((

Хочу попробовать поставить помощнее ИК светодиод, типа такого:

https://ru.aliexpress.com/item/5-3/32953182050.html?spm=a2g0s.13010208.9...

 

У меня проем в 100 см пробивает без проблем, светодиод самособой выпаян и помещен напротив

Hamster
Offline
Зарегистрирован: 12.07.2015

nzl пишет:

У меня проем в 100 см пробивает без проблем, светодиод самособой выпаян и помещен напротив

в моем случае проем 120 см. грешу на датчики, в этот раз попались какие то странные - в неразобранном виде на максимуме регулятора срабатывают на препятствие только в пределах 10 см.

я думаю стоит воздержаться от покупок данного устройства вот у этого продавца:

https://ru.aliexpress.com/item/Free-shipping-IR-Infrared-Obstacle-Avoida...

Hamster
Offline
Зарегистрирован: 12.07.2015

Всех приветствую! Докладаю.

Приобретенные ИК светодиоды повышенной мощности (3W 700mA 940nm 60degree) вот здесь:

https://www.aliexpress.com/store/product/5-PCS-3W-Infrared-IR-High-Power...

действительно улучшают срабатывание ИК барьера. Стабильного срабатывания удалось достичь на 100 см. Далее уже требуется более точная настройка пары друг на друга. Точность срабатывания уменьшается по мере все более частого попадания солнечного света в помещение. Придется скорее всего переходить на лазер типа VL53L0XV2.

Brewster
Offline
Зарегистрирован: 26.11.2017

«Вы все ещё кипятите?» Безо всяких ИК барьеров ванная работает на ПИРах, туалет - ПИР и ИК дальномер (сверху вниз). Год работы без влезания в алгоритм по санузлу. Полет нормальный. Минимум вторжения в интерьер. 

kinguf
Offline
Зарегистрирован: 21.04.2019

Мой вариант работы ИК датчиков в дверном проеме. Взял за основу один из кодов этой темы и переделал под прерывания дуни. На макете проверил все отрабатывает, в реальных условиях дверных не смотрел.

 

Hamster
Offline
Зарегистрирован: 12.07.2015

Brewster пишет:

«Вы все ещё кипятите?»

мы кипятим, ага ) а ещё жжем )) а вы свет выключаете, если в ванной помедитировать? )))

Brewster
Offline
Зарегистрирован: 26.11.2017

Так сам через пять минут выключится, если неподвижно медитировать. :)

Hamster
Offline
Зарегистрирован: 12.07.2015

Brewster пишет:

Так сам через пять минут выключится, если неподвижно медитировать. :)

 

)) вот именно поэтому то ИК барьеры и ставим (а кто-то и лазерные)  ;)

KindMan
Offline
Зарегистрирован: 19.12.2018

Brewster пишет:

Так сам через пять минут выключится, если неподвижно медитировать. :)

А я наоборот люблю, с утра, не проснувшись, сидишь, а свет выключился. Если надо, шевельнулся и снова горит. Один датчик движения на потолке. А мучиться с этими барьерами и прочим, лишняя фигня, ИМХО

Rex
Offline
Зарегистрирован: 16.02.2018

Я изменил программу. Теперь у меня светом в санузле управляют геркон и PIR. С помощью задержек я настроил программу так, что свет не выключится при закрытой двери даже если нет движения. Еще добавил сторожевой таймер.

 

sstrob
Offline
Зарегистрирован: 21.10.2018

Добрый день. Пытаюсь освоить тему.

      IR1_state_new = !IR1_state_new;

      if (!IR1_state_old && !IR2_state_old && IR1_state_new && !IR2_state_new){Human_Counter_New++; }

        else{

          if (IR1_state_old && !IR2_state_old && !IR1_state_new && !IR2_state_new){Human_Counter_New--; }

            }

     flag = 1;

Вот у нас человек входит, те срабатывает сначала IR1 и потом  IR2. Объясните пожалуйста поэтапно как это будет по скетчу.

 

sstrob
Offline
Зарегистрирован: 21.10.2018

Это был вопрос по скетчу из сообщения #568   kinguf