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

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

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

Ультразвуковой сенсор 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 КБ) 290 просмотров
Ультразвуковой_сенсор_V1.0_(CODE).ubi
(243.09 КБ) 15 скачиваний
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
Лейтенант
Сообщения: 533
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 6

Ультразвуковой сенсор 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
Лейтенант
Сообщения: 303
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 66
Откуда: Ярославль
Имя: Андрей

Ультразвуковой сенсор 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 КБ) 194 просмотра
Ультразвуковой_сенсор_ESP8266_(CODE).ubi
(397.63 КБ) 15 скачиваний

Аватара пользователя
CraCk
Лейтенант
Сообщения: 533
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 6

Ультразвуковой сенсор 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
Лейтенант
Сообщения: 303
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 66
Откуда: Ярославль
Имя: Андрей

Ультразвуковой сенсор 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
Лейтенант
Сообщения: 533
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 6

Ультразвуковой сенсор 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
Лейтенант
Сообщения: 335
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 39
Откуда: Шатура
Имя: Энвер

Ультразвуковой сенсор 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
Лейтенант
Сообщения: 533
Зарегистрирован: 10.09.2015{, 21:51}
Репутация: 6

Ультразвуковой сенсор 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
Лейтенант
Сообщения: 335
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 39
Откуда: Шатура
Имя: Энвер

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

#9

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

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

Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость