![]() |
|
![]() |
#1 |
Junior Member
Регистрация: 24.07.2012
Сообщений: 9
Вес репутации: 0 ![]() |
![]()
а я о датчике препятствия слышал,правда, не знаю, как у нас в стране, а вот за границей слепые у себя в домах такое ставят.
|
![]() |
![]() |
![]() |
#2 |
Junior Member
Регистрация: 01.11.2012
Сообщений: 28
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
А ультразвуковых датчиков что нет в продаже? Я сам поставил в прихожую датчик движения, согласен - иногда приходится руками помахать (раз в 5 мин примерно), чтобы он включился.
|
![]() |
![]() |
![]() |
#3 |
Junior Member
Регистрация: 08.08.2014
Сообщений: 4
Вес репутации: 0 ![]() |
![]()
Ультразвук не самый лучшее решение. Помнится наплакались с ними автоалярмщики, окно недозакрыл - ложняк. Мороз и солнце - ложняк. Сквозняки и любые движения воздуха враг ультразвука. А ванна это вытяжка и незакрытая дверь регулярно. Ну и всякие там занавески для ванн, висящие полотенца и т.п. Не самый лучший выбор ИМХО.
|
![]() |
![]() |
![]() |
#4 |
Member
Регистрация: 14.02.2014
Сообщений: 33
Вес репутации: 0 ![]() |
![]()
Есть конечно, но пока они дороже своих альтернатив
|
![]() |
![]() |
![]() |
#5 |
Junior Member
Регистрация: 14.08.2014
Сообщений: 5
Вес репутации: 0 ![]() |
![]()
На днях получил "стартер кит". Разумеется зачесались руки, что бы такого замутить? Первая мысль - автоматический включатель лампочки в комнате (интересно, это только у меня?). Походил по форумам... был немало удивлен, что нормально работающего решения не обнаружил.
Под "нормально работающим" подразумевается: 1.Никаких нажатий кнопок. 2.Никаких маханий руками каждые 5 минут. 3.Захожу в комнату - свет включается. Выхожу выключается. 4.Захожу в комнату - свет включается. Заходит жена, свет продолжает гореть. Заходит еще 5 человек, свет так же продолжает гореть. Выхожу, свет горит. Выходит жена, свет горит. Выходят 5 человек и как только дверной проем покидает последний свет гаснет. Если это реализовать, то нетрудно будет сделать плавное включение-выключение, а так же вкл-выкл днем, но при занавешаных шторах или жалюзи (полумрак). Не скажу, что прошел интернет вдоль и поперек, думал что ответ будет в первых строках поисковиков, ан нет... Может кто встречал? В "стартер ките" пришла Мега2560 (эт так, на всякий пожарный...) Я пока дилетант в этом направлении. Светодиодами поморгал, шаговый моторчик покрутил. Прикольно. Хочется большего. |
![]() |
![]() |
![]() |
#6 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Готовых решений я не встречал
Мое видение того как это должно выглядеть: IR thermosensor + линза френеля + PIRsensor+линза френеля PIRsensor регистрирует движение включает таймер 1 мин. или 30сек IR thermosensor измеряет температуру Если движения нет и температура ниже чем 1 минуту назад, то свет выключаем |
![]() |
![]() |
![]() |
#7 |
Junior Member
Регистрация: 14.08.2014
Сообщений: 5
Вес репутации: 0 ![]() |
![]()
2 Admin
Интересное решение. Спасибо. Принцип понятен (я бы никогда не додумался). Решил сделать тупо и просто (как у военных)), но дешево и надежно. Пока на столе. Взял два фоторезистора, положил их под настольную лампу (на брэдборде разумеется). На вход их. И два диода на выход подцепил (про подтяжку не забыл), для контроля. Набросал скетч простенький (не сразу получилось). В результате: провожу рукой над фоторезисторами (последовательно), имитирую прохождение человека. Светодиоды так же последовательно загораются (и гаснут), сначала один, потом второй. В обратную сторону так же корректно моргают в обратном порядке. А это значит, что если правильно написать код, то ардуинка сможет считать сколько человек прошло в одном направлении и сколько в другом. Ну... может через месяц упорного изучения я бы и написал такой скетч (не факт). Но подвернулся сын (в кодах шарит). "Кроха сын к отцу пришел и спросила кроха...")) я рассказал чего хочу... Через полчаса приходит: -Давай пробовать. Не сразу заработало, он пару раз код поправил и завелось!)) Мучали ардуину полчаса. Работает исправно. В обоих направлениях. Сразу видно, людей считать любит больше чем медведь бороться)) Теперь надо два ИК фотоприемника (в комплекте только один), светодиод (ИК) и пробовать по аналогии. Если заработает, монтировать в дверной проем. Фоторезистор приладить и дописать скетч (это даже я смогу), чтоб не включал свет днем. Ну и купить приблуду для плавного включения-выключения света. Надеюсь получится. Как считаете? Если кому интересно, скетч выложу. Схема банальнейшая (для детского садика)), тоже без проблем. Последний раз редактировалось Midway; 15.08.2014 в 19:22. Причина: орфография |
![]() |
![]() |
![]() |
#8 |
Member
Регистрация: 06.01.2014
Сообщений: 42
Вес репутации: 0 ![]() |
![]() |
![]() |
![]() |
![]() |
#9 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
А Вы попробуйте на ИК приемник направить пульт ДУ и понажимайте кнопки
|
![]() |
![]() |
![]() |
#10 |
Junior Member
Регистрация: 14.08.2014
Сообщений: 5
Вес репутации: 0 ![]() |
![]()
Как оказалось, в коде, о котором я писал, присутствует баг. Если проводим рукой туда или обратно, то все нормально. Но если задержались (закрыты оба фоторезистора), то программа начинала прибавлять людей.
Сын обещал исправить в свободное время. Пришлось сесть за учебники и написать свою версию. Код далек от совершенства, простой и деревянный. Программисты отполируют надеюсь. Багов пока не нашел. Давайте искать вместе. Это моя первая прога, не смеяться и сильно не пинать))) Код:
/*==Created by Midway========== ====МЕГА КРУТОЙ ВЫКЛЮЧАТЕЛЬ)))==== */ // Светодиоды пины-выходы int ledOUT1 = 20; //контрольный int ledOUT2 = 21; //контрольный int ledOUT3 = 19; //Как бы освщение в комнате // Фоторезисторы пины-входы int sensorPin1 = A0; int sensorPin2 = A1; // Данные с фоторезисторов int sensorVal1 = 0; int sensorVal2 = 0; // Событие int event; // Количество людей в комнате int humanCount; // Аналоговые входы фоторезисторов буду преобразовывать // в сигналы: либо сработал, либо нет boolean sens1; boolean sens2; // У двух датчиков может быть 4 состояния: (--), (-+), (++), (+-) // Нужно отслеживать предыдущее и текущее состояние int status_curr = 0; int status_prev = 0; // Порог срабатывания фоторезисторов. Подбирается индивидуально int tresh = 700; // Для отладки. Потом можно убрать boolean debug; void setup() { // Режимы светодиодов pinMode(ledOUT1, OUTPUT); pinMode(ledOUT2, OUTPUT); pinMode(ledOUT3, OUTPUT); digitalWrite(ledOUT3, LOW); // Передача Serial.begin(9600); } void loop() { // Для отладки. Потом можно убрать debug = false; // Начальные значения сенсоров sens1 = false; sens2 = false; // Считываем значение с фоторезисторов sensorVal1 = analogRead(sensorPin1); sensorVal2 = analogRead(sensorPin2); // Если фоторезистор сработал, переводим в значение сенсора TRUE if (sensorVal1<tresh) sens1 = true; debug = true; if (sensorVal2<tresh) sens2 = true; debug = true; // Если сработал первый, if (sens1) { //зажигаем первый светодиод digitalWrite(ledOUT1, HIGH); } else digitalWrite(ledOUT1, LOW); // Если второй, if (sens2) { //зажигаем второй светодиод digitalWrite(ledOUT2, HIGH); } else digitalWrite(ledOUT2, LOW); // Состояние сенсоров (фоторезисторов) { // Здесь текущий статус (состояние) фоторезисторов превращается в предыдущий status_prev = status_curr; // Здесь определяется текущий статус (--), (-+), (++), (+-) if (sens1 == false && sens2 == false) status_curr = 0; if (sens1 == true && sens2 == false) status_curr = 1; debug = true; if (sens1 == true && sens2 == true) status_curr = 2; debug = true; if (sens1 == false && sens2 == true) status_curr = 3; debug = true; } // При переходе с предыдущего состояния к текущему (если состояние датчиков //изменилось), в нашем случае может произойти 8 вариантов развития событий. //Нас интересуют события 3 и 7 (остальные так, на всякий...) { if (status_prev == 0 && status_curr == 1) event = 1; if (status_prev == 0 && status_curr == 3) event = 5; if (status_prev == 1 && status_curr == 2) event = 2; if (status_prev == 1 && status_curr == 0) event = 8; if (status_prev == 2 && status_curr == 3) event = 3; if (status_prev == 2 && status_curr == 1) event = 7; if (status_prev == 3 && status_curr == 0) event = 4; if (status_prev == 3 && status_curr == 2) event = 6; // Если текущее состояние не отличается от предыдущего, то никаких событий не произошло if (status_curr == status_prev) return; // Для отладки. Потом можно убрать if (debug) Serial.println ("Previous Status = " + String(status_prev)); if (debug) Serial.println ("Current Status = " + String(status_curr)); if (debug) Serial.println ("Event = " + String(event)); } // Считаем хьюманов... { if (debug) Serial.println ("Human count in room WAS : " +String(humanCount) ); if (event == 3) humanCount++; if (event == 7) humanCount--; humanCount = max(humanCount, 0); if (debug) Serial.println ("Human count in room NOW : " +String(humanCount) ); } // ...и зажигаем { if (humanCount > 0) digitalWrite(ledOUT3, HIGH); else digitalWrite(ledOUT3, LOW); } } |
![]() |
![]() |
![]() |
Здесь присутствуют: 5 (пользователей: 0 , гостей: 5) | |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|