Измерение расстояния с помочью двух Ультразвуковых датчиков HC-SR04

PashaDnepr
Offline
Зарегистрирован: 03.10.2017

Здраствуйте, во время создания одного моего проекта у меня возникла проблемма с измерением расстояния с помочью датчика HC-SR04. Может быть я говорю то, что в принципе нельзя аппаратно сделать, но все же. Все мы знаем принцип работы ультразвукового датчика (по сути есть динамик и есть микрофон. и с помощью изменения паузы между выходом и входом измеряется расстояние), так вот -  Можно ли измерять расстояние с помощью trig(звука) одного ультразвукового датчика и echo(микрофона) другово датчика. Просто основная важность моего проекта - это измерение растояния между двумя определёными точками. тоесть в идеале я хочу, чтобы один датчик издавал сигнал, другой принял, потом второй тоже издал(так как он только принимал сигнал), и первый принимал(так как он только издавал) .В итоге у нас должно получиться 2 значения : 1 - расстояние между первым динамиком и вторым ухом, 2 - расстояние между вторым динамиком и первым ухом. 

Буду очень брагодарен ЛЮБОЙ вашей помощи. 

С уважением 

Паша К

PS: через пару минут покажу какой код я написал и некоторые фотографии. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Проблему я вижу в праильном определении момента, начиная с которого второй (или первый) датчик начинает слушать. Потому что именно так он измеряет - свистнул и начинает отсчитывать, когда обратно прилетело эхо.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Глюкавее этого ультрасоника только шарповские инфракрасные дальномеры.

Если нужно до двух метров - попробуйте    VL53L0X

https://www.ebay.com/itm/VL53L0X-Time-of-Flight-Distance-Measurement-Sen...

Я недавно получил, работает прекрасно и стабильно.
При этом поверхность для отражения может быть даже пушистая вата :).

ki314
Offline
Зарегистрирован: 03.03.2017

Сами то уже что-то пробовали делать?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

trembo, Ви просто не умеете их готовить. :)

ТС-у: такое использование достаточно проблематично в оригинальном исполнении, если вообще возможно без переделки аппаратной части.

ki314
Offline
Зарегистрирован: 03.03.2017

Например, при создании объекта:

iarduino_HC_SR04_int ОБЪЕКТ( ВЫВОД_TRIG , ВЫВОД_ECHO );

поменять местами выводы от датчика1 датчика2.

то есть условно:

1й датчик подключен к пин1 и пин2.

2й датчик подключен к пин3 и пин4

объект создавать так:

iarduino_HC_SR04_int объект1 (1,4)

iarduino_HC_SR04_int объект1 (3,2)

Это первое, что я бы попробовал. Что называется "в лоб".

Если не получиться -  значит надо лезть в библиотеку и править ее под свои нужды. Но я так понимаю, что если бы вы это могли, то сюда такие вопросы не задавали бы.

 

P.S. или сделать то же самое, но не в коде, а на железе -поменять местами пины подключения у двух датчиков.

ki314
Offline
Зарегистрирован: 03.03.2017

Ну если туго с программной реализацией - вариант с членовредительством. Но это вообще топорно.

Нужны 4 датчика.

Запараллеливаем Trig и Echo (ну и питание тоже)  в одной паре и так же в другой.

В каждой паре - на одном датчике выпаиваем (можно просто заклеить) излучатель, на втором - приемник. Разносим их.

Теперь подавая Trig - на первом датчике в паре срабатывает излучаетель, но Echo мы будем получать со второго датчика.

Дерзайте :)

ki314
Offline
Зарегистрирован: 03.03.2017

Теоретически - оба варианта рабочие, так как датчик этот "тупой" - он только посылает-принимает сигналы, соответственно все расчеты идут на ардуине, которая просто вычисляет время прошедшее между выставлением сигнала на pin'е trig и появляеним сигнала на пине echo. То есть этой библиотекой можно пользоваться вообще без датчика - выставляя сигнал на echo хоть ручным переключением.

sadman41
Offline
Зарегистрирован: 19.10.2016

Вариант с затыканием свистка на одном датчике синей изолентой интересен, как идея. Можно запараллелить Trig или посадить их на один порт (не пин) МК и путем прямой записи в регистры заставить их одновременно свистнуть. Но эхо слушать только на одном (втором). Какая будет точность - покажет только эксперимент.

ki314
Offline
Зарегистрирован: 03.03.2017

Почему нельзя запараллелить триг и эхо двух датчиков и посадить их на один  пин ?

sadman41
Offline
Зарегистрирован: 19.10.2016

Мы же не знаем, какие конкретно датчики у ТС. Основная идея - запустить процесс на них одновременно. Чтобы эхо не путало - устранить одному испускатель сигнала. 

Впрочем, если ему нужно еще и обратку измерять, то затыкание не поможет - это верно. 

Но мне кажется, что мы сейчас размышляем о том, как сделать курсовую ТС, а он сам в это время пиво хлещет.

ki314
Offline
Зарегистрирован: 03.03.2017

sadman41 пишет:

Но мне кажется, что мы сейчас размышляем о том, как сделать курсовую ТС, а он сам в это время пиво хлещет.

Пофиг. Отвлекся от работы и занял голову отвлеченной задачей. Не жалко же.

Но да, чел просто не научится самстоятельно находить решения :)

sadman41
Offline
Зарегистрирован: 19.10.2016

Впрочем, мне всё-таки кажется, что для замерения с учетом обратки нет нормальных вариантов. Потому как перед следующим измерением нужно выжидать не менее 50мс, чтобы эхо успокоилось. В данном случае необходимо, чтобы перед свистком второго прошёл данный промежуток. Иначе начнется какАфония и никакого осмысленного результата ожидать не придется.

ki314
Offline
Зарегистрирован: 03.03.2017

sadman41 пишет:

Мы же не знаем, какие конкретно датчики у ТС.

В названии темы фигурируют HC-SR04.

ki314
Offline
Зарегистрирован: 03.03.2017

sadman41 пишет:

Впрочем, мне всё-таки кажется, что для замерения с учетом обратки нет нормальных вариантов. Потому как перед следующим измерением нужно выжидать не менее 50мс, чтобы эхо успокоилось. В данном случае необходимо, чтобы перед свистком второго прошёл данный промежуток. Иначе начнется какАфония и никакого осмысленного результата ожидать не придется.

Почему нет. Измерения проводятся не одновременно, а последовательно - все нормально с этим. Условия одновременной работы не было.

Дома валяется пара hc-sr04. Вечером из любопытства попробую.

sadman41
Offline
Зарегистрирован: 19.10.2016

ki314 пишет:

sadman41 пишет:

Мы же не знаем, какие конкретно датчики у ТС.

В названии темы фигурируют HC-SR04.

Мне кажется, что я видел такие и с тремя ногами и с четырьмя. Возможно, что путаю с SR05 каким-нибудь.

ki314
Offline
Зарегистрирован: 03.03.2017

sadman41 пишет:

[о я видел такие и с тремя ногами и с четырьмя. Возможно, что путаю с SR05 каким-нибудь.

Только 4. GND, VCC, Trig, Echo.

sadman41
Offline
Зарегистрирован: 19.10.2016

ki314 пишет:

Почему нет. Измерения проводятся не одновременно, а последовательно - все нормально с этим. Условия одновременной работы не было.

Дома валяется пара hc-sr04. Вечером из любопытства попробую.

Цитата из условия: "чтобы один датчик издавал сигнал, другой принял, потом второй тоже издал(так как он только принимал сигнал)"

Лично я понял так, что второй принял и сразу свистнул.

ki314
Offline
Зарегистрирован: 03.03.2017

sadman41 пишет:

Лично я понял так, что второй принял и сразу свистнул.

"Сразу" это не техническая величина. А "потом"  - означает последовательные действия :)

sadman41
Offline
Зарегистрирован: 19.10.2016

ki314 пишет:

sadman41 пишет:

Лично я понял так, что второй принял и сразу свистнул.

"Сразу" это не техническая величина. А "потом"  - означает последовательные действия :)

На счет того, что в действительности имелось в виду я строить теории. Не лень - пробуйте. ТС вам только спасибо скажет. И еще будет хвастаться, как сумел ботанов заставить за него задачку решить ;)

ki314
Offline
Зарегистрирован: 03.03.2017

ваще насрать, что он там будет делать. мне самому интересно. было.

первый способ - замена номеров пинов при создании объекта - не работает (ну это с библиотекой, если работать с портами - может и будет работать)

а второй способ с запараллеливанием вывод датчиков мне стало лень делать - китайская bread board совсем плохая стала, сплошной неконтакт.

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Пробовался подход с заклеиванием одного из свистков в параллельном подключении. Результат зависит от расстояния промеж датчиков, ибо их чуствительность достаточно высока. Если они близко друг от друга, то вполне может свистеть и изолентой + проблемы переотражения сигнала: оно бывает весьма витееватым.

Вот что эти датчики точно плохо "видят" - это кошачью шерсть. Прямо "стелс" шуба.. пока "в упор" не подъедет.. :)

PashaDnepr
Offline
Зарегистрирован: 03.10.2017

Спасибо за все ваши пропозиции решение моей проблемы. Да, я еще не профессионал в этом деле, но сильно извиняюсь что не скинул детали (фото и код) 

Ктратко говоря мой код должен выдавать 2 значения (растояния от свиста первого до уха второго и наоборот) 

После ваших советов я сделал код, в котором у меня свистят 2 датчкика параллельно и потом принимают сигнал тоже оба, но проблема заключается в том что, принявший сигнал датчик переставал "смотреть" сигнал, который издавался с его свистка. Кратко говоря мы получаем 2 числа (1е- нужное растояние, 2е- число=0), потом я придумал продублировать код, но в приоритете (запрашивать растояние) уже узнавать 2е ухо. Схема полуилась +- рабочая ( вплане уже выдавало 2 числа с задержкой из-за вычисления числа=0. 

Короче, может ли кто-то подсказать как можно завершить работу (ожидание "echo" от свистка "trig"), по сути что бы он свиснул и не считал число, а просто сбросил свою работу. Это бы мне очень облегчило работу. 

Так же как вы считаете, можно ли решить все это перепайкой между собой уха обоих датчиков. В плане разрезать контакты, которые относятся к обоим ухам и спаять их долинным проводом между собой, так, чтобы ухо второго датчика будет относиться к свистку первого и наоборот? 

Извиняюсь что так долго не писал. Просто это мой первый опыт в форумах и я не думал, что тут так быстро отвечают на вопросы или возникшие проблемы. 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Забавно что вообще получилось "+-" ..

Далее. Перепаивать уши наверное можно, но надо смотреть по дальности получится или нет. Ну и провода сделать а-ля "витая пара".

Принудительно завершить работу можно указав у pulseIn() ещё один параметр - время ожидания отклика. Загляните в справочник по функции, там расписано детально. И ещё, или паузу до след. свистка надо делать больше мах. дальности по времени или надо ручками переставлять перед свистком пин echo в 0 кажется, уже не помню как делал.. он иногда "залипает"..

dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

trembo пишет:

Если нужно до двух метров - попробуйте    VL53L0X

https://www.ebay.com/itm/VL53L0X-Time-of-Flight-Distance-Measurement-Sen...

Я недавно получил, работает прекрасно и стабильно.
При этом поверхность для отражения может быть даже пушистая вата :).

Мне нужно замерять расстояние от 0 до 30 мм (т.е. до 3 см), с точностью 1-2 мм, т.е. 3-6%. Как думаете подойдет такой? Или какие еще датчики для сабжа есть? 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015
dim3740
dim3740 аватар
Offline
Зарегистрирован: 25.03.2015

Спасибо. Я его и имел ввиду... На ролике при 30 см точность 1 см якобы. Это не факт, что при 3 см будет 1 мм. Будем покупать и тестить))))