Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

Ультразвуковой дальномер

Пользовательские блоки расширяющие базовый функуионал программы по работе с различными датчиками и энкодерами
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#1

Сообщение Dryundel » 31.07.2019{, 16:42}

Ультразвуковой сенсор V1.0 (дальномер) NewPing
2019-07-31_112206.jpg
2019-07-31_112206.jpg (9.1 КБ) 4741 просмотр
Ультразвуковой_сенсор_V1.0_(CODE).ubi
(243.09 КБ) 324 скачивания
USonicV1.0 - блок для работы с ультазвуковыми датчиками HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax PING
Совместим со всей линейкой Arduino (и клонами), семейством Teensy (включая 96Mhz 32 bit Teensy 3.2) и микроконтроллерами, отличными от AVR.

Особенности:
- Измерение расстояния до 30 раз в секунду (минимальное время паузы между измерениями 29мс)
- Может работать на одном пине (кроме SRF06) для этого в насторйках пользователя для TRIGGER_PIN и ECHO_PIN указать один и тот же пин.
- Может расчитывать медиану (среднее значение) пакета измерений для более точных показаний.

Входы блока:
En - включение блока
maxDist - максимальная дистанция измерения (при превышении дистанции выводится "0")
paus - пауза между измерениями
median - включение функции расчета медианы (среднего значения пакета измерений)
pack - количество измерений в пакете для расчета медианы
reset - сброс показаний (Вход En является приоритетным) *
* Если на входах En и reset одновременно присутствует высокий уровень сброса показаний не происходит.

Выходы блока:
cm - расстояние в сантиметрах
inc - расстояние в дюймах
echo - время пинга (эхо-отклика) в микросекундах

Использована библиотека NewPing v1.9.1 https://bitbucket.org/teckel12/arduino- ... downloads/

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#2

Сообщение CraCk » 01.08.2019{, 00:03}

Dryundel писал(а):
31.07.2019{, 11:38}
CraCk, Попробуй скомпилировать на ESP8266. Если не пойдет переделаю на ту библиотеку что ты указал.
Проверил на ESP8266. При компиляции выдает предупреждение.
СпойлерПоказать
Снимок.JPG
Но компиляция успешная. Даже работает. И даже лучше. Меряет больше двух метров, на предыдущей только 1,5м меряло.
Можно и NewPingESP8266 добавить до полного комплекта. Чтоб все параметры были входами. Только пины параметрами для ESP8266 gpio 0-16.
Вопрос: NewPingESP8266 тоже использует прерывания также как и NewPing?

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#3

Сообщение Dryundel » 01.08.2019{, 08:59}

CraCk писал(а):
01.08.2019{, 00:03}
Вопрос: NewPingESP8266 тоже использует прерывания также как и NewPing?
У NewPingESP8266 и NewPing есть функции прерывания по таймеру, но в данном случае они не задействованы. Эти функции конечно интересны, но на практике мало применимы. К примеру ожидание возврата пинга и выполнения чего либо по успешному пингу либо завершение пингования. Ну как то так.

Отправлено спустя 4 часа 7 минут 27 секунд:
CraCk, тестируйте.
2019-08-01_130305.jpg
2019-08-01_130305.jpg (8.95 КБ) 2704 просмотра
Ультразвуковой_сенсор_ESP8266_(CODE).ubi
(397.63 КБ) 168 скачиваний

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#4

Сообщение CraCk » 12.08.2019{, 14:26}

Dryundel писал(а):
01.08.2019{, 13:06}
CraCk, тестируйте.
Погонял. Все работает. Только максимальное количество пинов для esp8266 нужно 16. Ну это мелочи. Еще иду блок ecoins погоняю.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#5

Сообщение Dryundel » 12.08.2019{, 17:07}

CraCk писал(а):
12.08.2019{, 14:26}
Dryundel писал(а):
01.08.2019{, 13:06}
CraCk, тестируйте.
Погонял. Все работает. Только максимальное количество пинов для esp8266 нужно 16. Ну это мелочи. Еще иду блок ecoins погоняю.
CraCk, открой редактирование блока и удали максимум и минимум в параметрах входов.

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#6

Сообщение CraCk » 12.08.2019{, 17:21}

Dryundel писал(а):
12.08.2019{, 17:07}
CraCk, открой редактирование блока и удали максимум и минимум в параметрах входов.
Я так и сделал. Просто отписался. Если будете обновлять поправите.

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#7

Сообщение ecoins » 12.08.2019{, 17:31}

Перед тем как создавать свою библиотеку, ecoins изучал и библиотеку NewPing. Её особенностью является использование прерываний каждые 50mcs. При этом обработка занимает (для AV328) -6-10mcs, т.к. обработчик использует и digitalRead, и работу тайм-аута с 32-разрядными числами:
СпойлерПоказать
// ---------------------------------------------------------------------------
// Standard ping methods
// ---------------------------------------------------------------------------

unsigned int NewPing::ping(unsigned int max_cm_distance) {
if (max_cm_distance > 0) set_max_distance(max_cm_distance); // Call function to set a new max sensor distance.

if (!ping_trigger()) return NO_ECHO; // Trigger a ping, if it returns false, return NO_ECHO to the calling function.

#if URM37_ENABLED == true
#if DO_BITWISE == true
while (!(*_echoInput & _echoBit)) // Wait for the ping echo.
#else
while (!digitalRead(_echoPin)) // Wait for the ping echo.
#endif
if (micros() > _max_time) return NO_ECHO; // Stop the loop and return NO_ECHO (false) if we're beyond the set maximum distance.
#else
#if DO_BITWISE == true
while (*_echoInput & _echoBit) // Wait for the ping echo.
#else
while (digitalRead(_echoPin)) // Wait for the ping echo.
#endif
if (micros() > _max_time) return NO_ECHO; // Stop the loop and return NO_ECHO (false) if we're beyond the set maximum distance.
#endif

return (micros() - (_max_time - _maxEchoTime) - PING_OVERHEAD); // Calculate ping time, include overhead.
}

Надо также иметь ввиду использование библиотекой NewPing таймеров: для AVR328 - это таймер 2 на котором сидят пины 3,11 ШИМ. При переходе на другой контроллер (ESP32,STM32), будут проблемы - они пока не прописаны в библиотеке.
-------
Более естественным для этой задачи (по мнению ecoins) является использование аппаратных прерываний, которые поддерживаются всеми контроллерами, включенных в Arduino IDE.
Мне пока известна только одна такая библиотека для SR04 (Амперка) - но она написана только для AVR328, MEGA и при этом захватывает все пины работающие с прерываниями (6шт.) - скоростной счетчик или энкодер уже не подключить.
Отчасти трудности связаны с особенностью оформления прерываний в Arduino IDE.
-------------
В библиотеке и блоке RT_HW_HC_SR04.h не без труда удалось разрешить эти проблемы и блок работает по аппаратным внешним прерываниям, используя прерывания только от подключенного пина.
-----------
По использованию одного пина. Потребовались исследования (осциллограф, испытания и т.п.), чтобы прийти к некому решению:
1. Замкнуть echo и trig - во многих случаях работает, но не всегда;
2. Резистор 2 ком между echo и trig , устойчиво работает, но иногда не очень (от партии SR04 зависит).
3. Резистор 510 ом - устойчивое решение. Если посмотреть осциллограммы, станет понятно почему.
----
По усреднению.
Это во многом от лукавого. Датчик ловит отражения, особенно при движении датчика чего-то не так измеряет. И перевод времени в мм не столь линеен, как представлялось до испытаний. Самое верное - получать на выходе время и далее пользователь ставит фильтр по выбору.
На выходе блока ecoins можно получать результат в mcs, мм, см, тоже самое усредненное, и еще библиотека отбрасывает случайные измерения (бывают и такие).

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#8

Сообщение CraCk » 12.08.2019{, 18:08}

ecoins писал(а):
12.08.2019{, 17:31}
и еще библиотека отбрасывает случайные измерения (бывают и такие).
По какому принципу отбрасывает случайные измерения? Используется какой то их этих методов?
viewtopic.php?t=3098

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 453
Откуда: Шатура
Имя: Энвер

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#9

Сообщение ecoins » 12.08.2019{, 18:39}

Если измерения за границами установленного диапазона (по умолчанию 2-150см), то оно принимается на третьем подряд показании. В этом случае измерению присваивается граничное значение.

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#10

Сообщение CraCk » 18.08.2019{, 23:15}

Собираю на дальномере датчи движения МК есп8266 с отправкой тривогы на mqtt сервер. Уже неделю борюсь с ложными срабатывания датчика. Сам датчик стоит неподвижно но часто отправляет сработку, происходит с интервалом 10 - 40 минут. Перепробовал кучу фыльтов еффекта никакого. Боле менее помог блок Аналоговый антидребезг viewtopic.php?f=72&t=5140
Но всеравно есть ложные срабатывания. Смотрю в болке есть Медианы. Как это работает? И как настроить? Может это поможет.
Вложения
HC-SR04.flp
(1.21 МБ) 140 скачиваний

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#11

Сообщение Dryundel » 03.09.2019{, 08:00}

CraCk писал(а):
18.08.2019{, 23:15}
Смотрю в болке есть Медианы. Как это работает? И как настроить?
Не увидел сразу вопрос.
Вроде как в описании все есть.
Для работы функции медиана надо поставить True (1) на вход median и выставить количество пингов в пакете на вход pack.
В этом случае на выход приходит измерение не одного пинга, а усредненное по пакету измерений, сильно отличающиеся (заведомо ложные) показания при этом отбрасываются.
Это и есть фильтр. В вашем случае возможно помогло бы.

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#12

Сообщение CraCk » 04.11.2019{, 21:19}

Приехал герметичный ультразуковой дальномер JSN-SR04T. Подключил вместо HC-SR04 без каких либо изменений в коде. Могу сказать что он работает как то криво. Расстояние меряет до двух метров и значения часто прыгаю в широком диапазоне, больше двух метров показывает 0 . Еще на самой плате дальномера есть лед диод, и он мерцает в такт пингования датчика.
Так же пробовал блок ecoins :) но там все глухо, показывает все время 2.
Потом взял стандартный блок. И могу сказать что датчик начал не плохо работать. Расстояние меряет без проблем до 7м. И значения расстояния практически не прыгают. А лед диод на палате все время светиться и нет никакого мерцания. Так было до тех пор, пока я не добавил весь набор wifi, mqtt, OTA. После усложнения кода дальномер перестал измерять расстояние. При этом датчик издает только по одинокие щелчки.
Так что я теперь снова без толком работающего блока. :smile37:

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#13

Сообщение Rovki » 04.11.2019{, 21:32}

CraCk писал(а):
04.11.2019{, 21:19}
Приехал герметичный ультразуковой дальномер JSN-SR04T. Подключил вместо HC-SR04 без каких либо изменений в коде. Могу сказать что он работает как то криво. Расстояние меряет до двух метров и значения часто прыгаю в широком диапазоне, больше двух метров показывает 0 . Еще на самой плате дальномера есть лед диод, и он мерцает в такт пингования датчика.
Так же пробовал блок ecoins :) но там все глухо, показывает все время 2.
Потом взял стандартный блок. И могу сказать что датчик начал не плохо работать. Расстояние меряет без проблем до 7м. И значения расстояния практически не прыгают. А лед диод на палате все время светиться и нет никакого мерцания. Так было до тех пор, пока я не добавил весь набор wifi, mqtt, OTA. После усложнения кода дальномер перестал измерять расстояние. При этом датчик издает только по одинокие щелчки.
Так что я теперь снова без толком работающего блока. :smile37:
Много раз было говорено в есп сложные и быстрые задачи не решаются совместно с вайфай :smile37:
Электронщик до мозга костей и не только

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#14

Сообщение CraCk » 04.11.2019{, 23:21}

Rovki писал(а):
04.11.2019{, 21:32}
Много раз было говорено в есп сложные и быстрые задачи не решаются совместно с вайфай
Это понятно но альтернативы на одном чипе нет. Но здесь еще проблема и в особенностях самого датчика. Весь тяжелый код с HC-SR04 работает а с JSN-SR04T не очень хочет.
Наверное еще попробую добить блок от ecoins. Но надежды мало. Там снова полетит в обратку высшая материя.

Аватара пользователя
Rovki
Полковник
Сообщения: 4872
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#15

Сообщение Rovki » 04.11.2019{, 23:58}

CraCk писал(а):
04.11.2019{, 23:21}
Rovki писал(а):
04.11.2019{, 21:32}
Много раз было говорено в есп сложные и быстрые задачи не решаются совместно с вайфай
Это понятно но альтернативы на одном чипе нет. Но здесь еще проблема и в особенностях самого датчика. Весь тяжелый код с HC-SR04 работает а с JSN-SR04T не очень хочет.
Наверное еще попробую добить блок от ecoins. Но надежды мало. Там снова полетит в обратку высшая материя.
Я как то пробовал с дальномером таким работать с массивами ,что бы усреднять не вышло ,не правильно усредняет или измеряет ..
В есп32 есть шанс ,там два проца
Электронщик до мозга костей и не только

CraCk
Лейтенант
Сообщения: 632
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 10

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#16

Сообщение CraCk » 05.11.2019{, 00:07}

Rovki писал(а):
04.11.2019{, 23:58}
Я как то пробовал с дальномером таким работать с массивами ,что бы усреднять не вышло ,не правильно усредняет или измеряет ..
В есп32 есть шанс ,там два проца
На все плюнул и взял любимую ардуину нано. Залил скетч с библиотекой NewPing. Измерение только до 2м и нестабильное. Попробовал стандартный блок все работает. Значит еще есть и проблема в библиотеке NewPing.

Sanbi4
Рядовой
Сообщения: 76
Зарегистрирован: 30.10.2019{, 17:58}
Репутация: 3
Имя: Сергей

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#17

Сообщение Sanbi4 » 13.01.2020{, 16:07}

всем привет! внесу поправки небольшие для датчика JSN-SR04T ver.2-0. На вывод триггера для запуска импульса измерения нужно подавать лог 0, эхо тоже работает по лог 0 - только так я добился более-менее стабильной работы данного комплекта, при отсутствии отражения датчик выводит 1023см (если длительность импульса делить на 58). в этом проекте я для теста сделал на несимметричном генераторе длительность импульса 200мс, длительность паузы 10мс и именно этой паузой запускается измерение, с этими параметрами можно поиграться. и в данном конфиге при отсутствии отраженного сигнала - на выходе счетчика стабильны показания измерения, зависания не происходит.

прошу прощения, если не в той теме отписался, возможно, данная информация поможет для разработки библиотеки.
Вложения
JSN-SR04T.flp
(30.39 КБ) 132 скачивания

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#18

Сообщение dizzyy » 14.01.2020{, 20:41}

Sanbi4, вылет сразу с ошибкой

Sanbi4
Рядовой
Сообщения: 76
Зарегистрирован: 30.10.2019{, 17:58}
Репутация: 3
Имя: Сергей

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#19

Сообщение Sanbi4 » 14.01.2020{, 23:45}

dizzyy, версия 6.1.1

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Ультразвуковой сенсор V1.0 (HC-SR04, SRF05, SRF06, DYP-ME007, JSN-SR04T & Parallax) NewPing

#20

Сообщение dizzyy » 15.01.2020{, 00:09}

Sanbi4, у меня 6.2.1
я поправил файл, смотрел проект, интересно отказатся от библиотек и использовать скоростной счетчик ..
например JSN-SR04M с библиотекой NewPing не работают.
тут есть блоки рабочие но там делей , что не гуд.. даже блок от ecoins с ними работает плохо..
тот что в стандартных - нет настройки периода..

Ответить

Вернуться в «Датчики и энкодеры»