Датчик HB100 - как определить наличие движения ?
- Войдите на сайт для отправки комментариев
Пнд, 27/08/2018 - 22:37
Доброго времени суток !
Пытаюсь работать с датчиком HB100
с целью определять с его помощью отсутствие или наличие движения.
Собрал предусилитель в соответствии с инструкцией производителя.
Теперь в недоумении - сигнал идет с датчика всегда.
Я так понимаю это оказывается высокочастотный сигнал, который достаточно сложно анализировать и из него нужно как то вытягивать информацию о движении и его скорости ?
Я имею в виду применительно к подключению его к ардуино и анализу на нем )
Кто решил эту проблему, отзовитесь, плиз :)
Купите готовый, с релюшкой, он стоит от трёх до семи долларов.
Подскажите где - если Россия, Украина и пр. то нормально.
Если через ebay и жди месяц то хуже, но все равно интерестно
Жду информации и ссылок - плиз :)
На 3.3 Вольта 73 их копейки:
https://www.ebay.com/itm/RCWL-0516-Microwave-Radar-Sensor-Switch-Module-...
С выбором по дальности от 84 их копейки:
https://www.ebay.com/itm/Microwave-Radar-Sensor-Switch-RCWL-0516-3-7m-4-...
От полутора до семи их рублей, от 3 до 5, 12, 24, 220 Вольт питания, в корпусе или без:
https://www.ebay.com/itm/5-8GHZ-Microwave-Radar-Sensor-Smart-Switch-DC12...
Дальше сами, я устал удалять хэши......
На 3.3 Вольта 73 их копейки:
https://www.ebay.com/itm/RCWL-0516-Microwave-Radar-Sensor-Switch-Module-...
С выбором по дальности от 84 их копейки:
https://www.ebay.com/itm/Microwave-Radar-Sensor-Switch-RCWL-0516-3-7m-4-...
От полутора до семи их рублей, от 3 до 5, 12, 24, 220 Вольт питания, в корпусе или без:
https://www.ebay.com/itm/5-8GHZ-Microwave-Radar-Sensor-Smart-Switch-DC12...
Дальше сами, я устал удалять хэши......
Извините, и тот и другой датчик мне хорошо знакомы и неоднократно поюсаны :)
И по чуствительности и по возможности экранирования сигнала "сзади" они уступают HB100 намного
Я просил помощи по HB100 , по принципам его работы, а вы мне предлагаете не разьяснения а установку полуигрушечных датчиков вместо него :)
https://www.stm32duino.com/viewtopic.php?t=2496
http://arduino.ru/forum/apparatnye-voprosy/kak-podklyuchat-datchik-dvizh...
https://www.avrfreaks.net/forum/hb100-radar-module?page=all
https://www.limpkin.fr/index.php?post/2013/08/09/Making-the-electronics-...
все, не интересно стало?
Мне стало интересно, я вот сделал уселитель для HB100 по инструкции с
https://www.instructables.com/id/Radar-With-Arduino-HB100-and-MAX446/
https://www.pjrc.com/teensy/td_libs_FreqMeasure.html
Стабильного и четкого срабатывания на движение не добился
На форумах хвалят данный датчик но с ним не получается нормальной работы.
Более мение он работает по примеру с сайта
https://navody.arduino-shop.cz/navody-k-produktum/doppler-radar-hb100-10...
Кто работал с данным датчиком, что можно сделать для стабильности работы его.
VitalikNic, маленький вопрос, а как вы понимаете текст
взял из даташита
Более мение он работает по примеру с сайта
https://navody.arduino-shop.cz/navody-k-produktum/doppler-radar-hb100-10...
посмотреть бы на код, а то регистрацию просит при попытки загрузки.
Разобрался с датчиком теперь работает как надо, доработал по примеру как указано на форуме https://www.stm32duino.com/viewtopic.php?t=2496,
Заменил входной конденсатор на 1 мкФ и резистор R5 на 100 ом.
Пример кода с сайта https://navody.arduino-shop.cz/navody-k-produktum/doppler-radar-hb100-10-525-ghz.html
// Doppler radar 10.525GHz // nastavení propojovacího pinu #define pinIF A0 // vytvoření proměnné pro načtení dat // a proměnné s počtem měřených vzorků int data; const int pocetMereni = 100; void setup() { // inicializace komunikace po sériové lince // rychlostí 9600 baud Serial.begin(9600); } void loop() { // vynulování proměnné s výsledky data = 0; // postupné načtení nastaveného počtu vzorků // do proměnné s 1ms odstupem for (int i = 0; i < pocetMereni; i++) { data += analogRead(pinIF); delay(1); } // vytvoření průměru z počtu provedených měření data = data / pocetMereni; // pokud je načtená hodnota menší nebo větší než klidová, // vypiš informace o detekci pohybu po sériové lince, // pro hledání klidové hodnoty stačí vyměnit // podmínku za: if (data > 0) if (data < 15 | data > 17) { Serial.println("Detekovana prekazka!"); Serial.print("Nactena hodnota: "); Serial.println(data); Serial.println(); } }Но сдесь реализация мне больще понравилась https://www.pjrc.com/teensy/td_libs_FreqMeasure.html
#include <FreqMeasure.h> //long previousMillis = 0; int val=0; const int ledPin = 7; int ledState = LOW; long previousMillis = 0; long interval = 1000; void setup() { Serial.begin(57600); FreqMeasure.begin(); pinMode(ledPin, OUTPUT); } double sum=0; int count=0; void loop() { if (FreqMeasure.available()) { sum = sum + FreqMeasure.read(); count = count + 1; if (count > 10) { float frequency = FreqMeasure.countToFrequency(sum / count); Serial.println(frequency); sum = 0; count = 0; if ( frequency > 1.0){ ledState=HIGH; digitalWrite(ledPin, ledState); } } } unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; if (ledState == HIGH) ledState = LOW; digitalWrite(ledPin, ledState); } }Остался маленький момент, доработать код, чтоб при повторном срабатывании светодиод не гас и сново включался ..
Частота фиксирует с 0,2 герц!
Переделкой с микрофонного уселителя остался доволен MAX4466, мне кажется лутше чем на LM324 нет паразитных шумов, проверял осцилогрофом.
а теперь внимание - лайхак..:
вместо датчика движения цепляете микрофон!!
Ставите в помещении, закрываете окна и двери ...ииии.... теперь как только открывете двери или окно - ДАТЧИК СРАБАТЫВАЕТ! :)
такой датчик можно ставить в любом месте помещения. Микрофон - электретный.
Борьба за стабильность работы продолжается, много ложных сработок дает, снизив чуствительность датчика, зона наблюдения уменьшаетс,я увеличив чуствительность, зона наблюдения увеличивается но и ложных срабатываний тоже увеличивается в разы. Программным методом я так понимаю не реализуемо...
А еще к питанию датчика HB100 очень чуствительное, от импульсного источника питания ловит дополнительные наводки.
это проблема любого аналога - там никогда не бывает ничего ровного и паралельного. Надо считать несколько раз, отсеять ошибки и наводки, а затем принимать решение.
Программным методом я так понимаю не реализуемо...
.
Надо считать несколько раз, отсеять ошибки и наводки, а затем принимать решение.
Есть аналоговые фильтры, а есть цифровые. В данном случае нужно думать о цифровом. Т.е если в течении времени t пришло <x – ложное, >x – правда. – фильтр примитив, но потом его можно усложнить…
Есть аналоговые фильтры, а есть цифровые. В данном случае нужно думать о цифровом. Т.е если в течении времени t пришло <x – ложное, >x – правда. – фильтр примитив, но потом его можно усложнить…
Каким образом определить ложное и правдивое, если мы точно не знаем кто из них кто. Если считать за определенное время количество срабатываней датчика, то за один и тотже промежуток временни, срабатываний может быть разное. Как определить... ?
Каким образом определить ложное и правдивое, если мы точно не знаем кто из них кто. Если считать за определенное время количество срабатываней датчика, то за один и тотже промежуток временни, срабатываний может быть разное. Как определить... ?
то за один и тотже промежуток временни, срабатываний может быть разное.
смысл в том, что по логике ложных срабатываний должно быть меньше, чем истиных.
Как определить... ?
по первому сигналу запустить самый простой таймер и посчитать, сколько еще сигналов пришло за отведенное время. Значения подобрать.
Более сложное решение: по первому срабатыванию запустить таймер, если пришел сигнал в течении этого времени - таймер перезапустить, некую переменную увеличить и т.д. если сигнал не пришел таймер и переменную обнулить. Если переменная приняла значение больше порогового – сигнал не ложный. Ну и аналогичен алгоритм факта присутствия объекта в области видимости датчика после получения сигнала истины, только таймер уже другой – чтоб лишнего не светилось и не мигало каждый раз, если нужен свет на большее время, чем заданное время свечения по умолчанию.
Написал вроде правильно, но уж сильно мудрено… надеюсь понятно будет не только мне :)))))))))
Кроме того я бы предположил наличие шума в датчике 5%, а в китайском варианте и 10% от измеренного значения. Соответственно надо учесть в программе эту вилку.
смысл в том, что по логике ложных срабатываний должно быть меньше, чем истиных.
Спасибо за подскаску !!! Думал не реально отловить когда сработал когда нет датчик движения
Начал думать в направлении масива, и понеслось...... Поиск чтение материала а также методом проб и ошибок нашел!!! нашел!!! готовый код для датчика НВ100. Немного адаптировал и ложные срабатывания ушли даже от плохого питания :)
Можно ссылки на другой сайт давать ?
Сам код выглядит вот так
const int ledPin = 7; int ledState = LOW; long previousMillis = 0; long interval = 1000; int sensorPin = A0; // номер аналогового входа // функция считывает аналоговый вход заданное количество раз // и возвращает отфильтрованное значение int readMean(int pin, int samples){ // переменная для хранения суммы считанных значений int sum = 0; // чтение и складывание значений for (int i = 0; i < samples; i++){ sum = sum + analogRead(pin); } // делим сумму значений на количество измерений sum = sum/samples; // возвращаем среднее значение return sum; } // функция считывает аналоговый вход заданное количество раз // и возвращает медианное отфильтрованное значение int readMedian (int pin, int samples){ // массив для хранения данных int raw[samples]; // считываем вход и помещаем величину в ячейки массива for (int i = 0; i < samples; i++){ raw[i] = analogRead(pin); } // сортируем массив по возрастанию значений в ячейках int temp = 0; // временная переменная for (int i = 0; i < samples; i++){ for (int j = 0; j < samples - 1; j++){ if (raw[j] > raw[j + 1]){ temp = raw[j]; raw[j] = raw[j + 1]; raw[j + 1] = temp; } } } // возвращаем значение средней ячейки массива return raw[samples/2]; } void setup(){ Serial.begin(9600); pinMode(7, OUTPUT); } void loop(){ // выводим значение на аналоговом входе в монитор порта Serial.print(analogRead(sensorPin)); Serial.print(" "); // выводим среднеизмеренное значение Serial.print(readMean(sensorPin, 15)); Serial.print(" "); // выводим медианное отфильтрованное значение Serial.println(readMedian(sensorPin, 15)); delay(100); if ((readMean(sensorPin, 15) < 140 || readMean(sensorPin, 15)>850 ) && (readMedian(sensorPin, 15)< 140 || readMedian(sensorPin, 15)> 850) ){ ledState=HIGH; digitalWrite(ledPin, ledState); } unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; if (ledState == HIGH) ledState = LOW; digitalWrite(ledPin, ledState); } }Значение readMean и readMedian нужно подбирать в зависимости от зашумленности...
И почемуто эти значения разные между нано и мини про при одинаковом питании
Можно ссылки на другой сайт давать ?
не только можно, но и нужно - ЕСЛИ по теме. На этом сайте ревнивых нет :))))))))))
И почемуто эти значения разные между нано и мини про при одинаковом питании
помехи по питанию, даже имея хороший опыт трудно чем увидеть. Я имею ввиду осциллограф. А в купе с наводками, влиянием длины проводов (в некотором случае) и барабашки ... Так что вы получили первый признак нестабильно работающей схемы, как минимум требуется обратить внимание на ВЧ блокировку по питанию.
http://geekmatic.in.ua/filtracia_shumov_analogovogo_signala
М да рано обрадовался, на столе датчик отработал пол дня стабильно, установил в другое место перестал работать, подключил рх тх к ардуинки и увидел совсем другие значения по которым реагирует, подкоректировал параметры сейчас пока все стабильно и четко срабатывает...
Сейчас думаю как завязать датчик ардуино и ESP8266 с мажордомом
То есть я получаю значения с ардуино к которому подключен датчик по вайфаю и нахожу значения по котором у меня идет сработка и прописываю их в ардуино через вайфай... и так я смогу настроить датчики и привязать к мажордому...
Еще я сейчас пробую http://digitrode.ru/computing-devices/mcu_cpu/988-detektor-urovnya-zvuka-na-arduino-svoimi-rukami.html
Подстраиваю под себя но похоже я никуда не денусь пока не получу стабильное питание...