Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Освещение

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.08.2014, 22:12   #31
Midway
Junior Member
 
Регистрация: 14.08.2014
Сообщений: 5
Вес репутации: 0
Midway is an unknown quantity at this point
По умолчанию Re: Датчик движения

Как оказалось, в коде, о котором я писал, присутствует баг. Если проводим рукой туда или обратно, то все нормально. Но если задержались (закрыты оба фоторезистора), то программа начинала прибавлять людей.
Сын обещал исправить в свободное время.
Пришлось сесть за учебники и написать свою версию. Код далек от совершенства, простой и деревянный. Программисты отполируют надеюсь. Багов пока не нашел. Давайте искать вместе. Это моя первая прога, не смеяться и сильно не пинать)))

Код:
/*==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);
    }  
  }
Midway вне форума   Ответить с цитированием
Старый 17.08.2014, 22:36   #32
Midway
Junior Member
 
Регистрация: 14.08.2014
Сообщений: 5
Вес репутации: 0
Midway is an unknown quantity at this point
По умолчанию Re: Датчик движения

Сорри, нашел неисправность. Если человек, входя в комнату, остановился в проеме, вспомнив что забыл на кухне чай и уйдет обратно, счетчик вычтет одного человека. Аналогично, выходя из комнаты, в проеме двери вспоминаем, что забыли сигареты, возвращаемся, счетчик прибавляет человека. Выходим, программа думает, что в комнате еще один остался и свет не выключает.
Лечится легко. В разделе "Считаем хьюманов..." в проверке событий вместо 3 и 7, надо соответственно поставить 4 и 8.
Код:
// Считаем хьюманов...    
    {
      if (debug) Serial.println ("Human count in room WAS : " +String(humanCount) );
      if (event == 4) humanCount++;
      if (event == 8) humanCount--;
      humanCount = max(humanCount, 0);
      if (debug) Serial.println ("Human count in room NOW : " +String(humanCount) );
    }
Midway вне форума   Ответить с цитированием
Старый 17.08.2014, 22:47   #33
Midway
Junior Member
 
Регистрация: 14.08.2014
Сообщений: 5
Вес репутации: 0
Midway is an unknown quantity at this point
По умолчанию Re: Датчик движения

В качестве источника света хочу взять 5-вольтовые лазеры Как думаете, подойдет? Жрать поди много будут... если в каждом проеме по 2 шт. поставить.
По совету Admina надо попробовать ИК решение.
Midway вне форума   Ответить с цитированием
Старый 17.08.2014, 23:20   #34
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Датчик движения

Нужно не просто луч света посылать, а кодовоимпульсные посылки отправлять, иначе будет срабатывать на помехи
Admin вне форума   Ответить с цитированием
Старый 01.10.2014, 10:06   #35
smarthome2014
Junior Member
 
Регистрация: 25.09.2014
Сообщений: 2
Вес репутации: 0
smarthome2014 is an unknown quantity at this point
По умолчанию Re: Датчик движения

Я сейчас занимаюсь продажей продукции белоруской фирмы Ноолайт. Не все еще оттестировал сам, но если по теме, то есть у них в линейке беспроводной датчик движения.

PM111 является ТЕПЛОВЫМ датчиком движения, предназначенным для работы в составе системы nooLite. При появлении движущихся объектов с температурой выше окружающей среды в зоне действия датчика он подает по радиоканалу команду включения на силовой блок, к которому привязан. По прошествии заданного времени после прекращения движения в зоне действия датчика он подает команду выключения. Кроме того, датчик PM111 снабжен фотосенсором для измерения освещенности, что позволяет исключить срабатывание датчика в светлое время суток.
Чувствительность теплового сенсора, порог освещенности и время включения света после прекращения движения регулируются.

Возможно регистрация именно по тепловому излучению будет более чувствительна. Сейчас его тестирую сам.
smarthome2014 вне форума   Ответить с цитированием
Старый 08.10.2015, 12:39   #36
lazuredt
Junior Member
 
Регистрация: 08.10.2015
Сообщений: 5
Вес репутации: 0
lazuredt is an unknown quantity at this point
По умолчанию Re: Датчик движения

Привет всем. Купили 5 датчиков движения, сегодня больше чем пол дня ставили... увешали ими двор...

срабатывают чётко... отрегулировали, все как положено - выставили время, "темноту"...

зашли в дом, а свет периодически включается... начали выяснять...

Итог - датчик движения срабатывает на собак и котов...Регулировки чувствительности нет...

Из живности которая теперь может включать свет - 3 собаки, 2 кота...

Короче столько потерять времени и сделать свет во дворе для котов и собак как бы не айс...

Как отрегулировать? У кого была такая проблема?
lazuredt вне форума   Ответить с цитированием
Старый 08.10.2015, 12:53   #37
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Датчик движения

Нужно было датчики брать которые не срабатывают на дом.животных
У них линзы не фокусируют излучение ниже одного метра
Admin вне форума   Ответить с цитированием
Старый 28.10.2015, 15:46   #38
ГендГав
Junior Member
 
Регистрация: 28.10.2015
Сообщений: 1
Вес репутации: 0
ГендГав is an unknown quantity at this point
По умолчанию Re: Датчик движения

Да нормально. Руками помахать лень что-ли. С утра зарядочка, самое-то )
ГендГав вне форума   Ответить с цитированием
Старый 27.01.2016, 08:39   #39
NovaOlya
Junior Member
 
Регистрация: 27.01.2016
Сообщений: 1
Вес репутации: 0
NovaOlya is an unknown quantity at this point
По умолчанию Re: Датчик движения

Цитата:
Сообщение от Admin Посмотреть сообщение
Нужно было датчики брать которые не срабатывают на дом.животных
У них линзы не фокусируют излучение ниже одного метра
О, у нас та же проблема. Подскажите, какой параметр датчика движения нужно смотреть? ибо не вижу такого в описаниях магазинов.
NovaOlya вне форума   Ответить с цитированием
Старый 27.01.2016, 11:20   #40
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9820
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Датчик движения

Датчик движения с защитой от животных
Admin вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 19 (пользователей: 0 , гостей: 19)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 12:50. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика