Измерение расстояния с помочью двух Ультразвуковых датчиков HC-SR04
- Войдите на сайт для отправки комментариев
Здраствуйте, во время создания одного моего проекта у меня возникла проблемма с измерением расстояния с помочью датчика HC-SR04. Может быть я говорю то, что в принципе нельзя аппаратно сделать, но все же. Все мы знаем принцип работы ультразвукового датчика (по сути есть динамик и есть микрофон. и с помощью изменения паузы между выходом и входом измеряется расстояние), так вот - Можно ли измерять расстояние с помощью trig(звука) одного ультразвукового датчика и echo(микрофона) другово датчика. Просто основная важность моего проекта - это измерение растояния между двумя определёными точками. тоесть в идеале я хочу, чтобы один датчик издавал сигнал, другой принял, потом второй тоже издал(так как он только принимал сигнал), и первый принимал(так как он только издавал) .В итоге у нас должно получиться 2 значения : 1 - расстояние между первым динамиком и вторым ухом, 2 - расстояние между вторым динамиком и первым ухом.
Буду очень брагодарен ЛЮБОЙ вашей помощи.
С уважением
Паша К
PS: через пару минут покажу какой код я написал и некоторые фотографии.
Проблему я вижу в праильном определении момента, начиная с которого второй (или первый) датчик начинает слушать. Потому что именно так он измеряет - свистнул и начинает отсчитывать, когда обратно прилетело эхо.
Глюкавее этого ультрасоника только шарповские инфракрасные дальномеры.
Если нужно до двух метров - попробуйте VL53L0X
https://www.ebay.com/itm/VL53L0X-Time-of-Flight-Distance-Measurement-Sen...
Я недавно получил, работает прекрасно и стабильно.
При этом поверхность для отражения может быть даже пушистая вата :).
Сами то уже что-то пробовали делать?
trembo, Ви просто не умеете их готовить. :)
ТС-у: такое использование достаточно проблематично в оригинальном исполнении, если вообще возможно без переделки аппаратной части.
Например, при создании объекта:
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. или сделать то же самое, но не в коде, а на железе -поменять местами пины подключения у двух датчиков.
Ну если туго с программной реализацией - вариант с членовредительством. Но это вообще топорно.
Нужны 4 датчика.
Запараллеливаем Trig и Echo (ну и питание тоже) в одной паре и так же в другой.
В каждой паре - на одном датчике выпаиваем (можно просто заклеить) излучатель, на втором - приемник. Разносим их.
Теперь подавая Trig - на первом датчике в паре срабатывает излучаетель, но Echo мы будем получать со второго датчика.
Дерзайте :)
Теоретически - оба варианта рабочие, так как датчик этот "тупой" - он только посылает-принимает сигналы, соответственно все расчеты идут на ардуине, которая просто вычисляет время прошедшее между выставлением сигнала на pin'е trig и появляеним сигнала на пине echo. То есть этой библиотекой можно пользоваться вообще без датчика - выставляя сигнал на echo хоть ручным переключением.
Вариант с затыканием свистка на одном датчике синей изолентой интересен, как идея. Можно запараллелить Trig или посадить их на один порт (не пин) МК и путем прямой записи в регистры заставить их одновременно свистнуть. Но эхо слушать только на одном (втором). Какая будет точность - покажет только эксперимент.
Почему нельзя запараллелить триг и эхо двух датчиков и посадить их на один пин ?
Мы же не знаем, какие конкретно датчики у ТС. Основная идея - запустить процесс на них одновременно. Чтобы эхо не путало - устранить одному испускатель сигнала.
Впрочем, если ему нужно еще и обратку измерять, то затыкание не поможет - это верно.
Но мне кажется, что мы сейчас размышляем о том, как сделать курсовую ТС, а он сам в это время пиво хлещет.
Но мне кажется, что мы сейчас размышляем о том, как сделать курсовую ТС, а он сам в это время пиво хлещет.
Пофиг. Отвлекся от работы и занял голову отвлеченной задачей. Не жалко же.
Но да, чел просто не научится самстоятельно находить решения :)
Впрочем, мне всё-таки кажется, что для замерения с учетом обратки нет нормальных вариантов. Потому как перед следующим измерением нужно выжидать не менее 50мс, чтобы эхо успокоилось. В данном случае необходимо, чтобы перед свистком второго прошёл данный промежуток. Иначе начнется какАфония и никакого осмысленного результата ожидать не придется.
Мы же не знаем, какие конкретно датчики у ТС.
В названии темы фигурируют HC-SR04.
Впрочем, мне всё-таки кажется, что для замерения с учетом обратки нет нормальных вариантов. Потому как перед следующим измерением нужно выжидать не менее 50мс, чтобы эхо успокоилось. В данном случае необходимо, чтобы перед свистком второго прошёл данный промежуток. Иначе начнется какАфония и никакого осмысленного результата ожидать не придется.
Почему нет. Измерения проводятся не одновременно, а последовательно - все нормально с этим. Условия одновременной работы не было.
Дома валяется пара hc-sr04. Вечером из любопытства попробую.
Мы же не знаем, какие конкретно датчики у ТС.
В названии темы фигурируют HC-SR04.
Мне кажется, что я видел такие и с тремя ногами и с четырьмя. Возможно, что путаю с SR05 каким-нибудь.
[о я видел такие и с тремя ногами и с четырьмя. Возможно, что путаю с SR05 каким-нибудь.
Только 4. GND, VCC, Trig, Echo.
Почему нет. Измерения проводятся не одновременно, а последовательно - все нормально с этим. Условия одновременной работы не было.
Дома валяется пара hc-sr04. Вечером из любопытства попробую.
Цитата из условия: "чтобы один датчик издавал сигнал, другой принял, потом второй тоже издал(так как он только принимал сигнал)"
Лично я понял так, что второй принял и сразу свистнул.
Лично я понял так, что второй принял и сразу свистнул.
"Сразу" это не техническая величина. А "потом" - означает последовательные действия :)
Лично я понял так, что второй принял и сразу свистнул.
"Сразу" это не техническая величина. А "потом" - означает последовательные действия :)
На счет того, что в действительности имелось в виду я строить теории. Не лень - пробуйте. ТС вам только спасибо скажет. И еще будет хвастаться, как сумел ботанов заставить за него задачку решить ;)
ваще насрать, что он там будет делать. мне самому интересно. было.
первый способ - замена номеров пинов при создании объекта - не работает (ну это с библиотекой, если работать с портами - может и будет работать)
а второй способ с запараллеливанием вывод датчиков мне стало лень делать - китайская bread board совсем плохая стала, сплошной неконтакт.
Пробовался подход с заклеиванием одного из свистков в параллельном подключении. Результат зависит от расстояния промеж датчиков, ибо их чуствительность достаточно высока. Если они близко друг от друга, то вполне может свистеть и изолентой + проблемы переотражения сигнала: оно бывает весьма витееватым.
Вот что эти датчики точно плохо "видят" - это кошачью шерсть. Прямо "стелс" шуба.. пока "в упор" не подъедет.. :)
Спасибо за все ваши пропозиции решение моей проблемы. Да, я еще не профессионал в этом деле, но сильно извиняюсь что не скинул детали (фото и код)
Ктратко говоря мой код должен выдавать 2 значения (растояния от свиста первого до уха второго и наоборот)
После ваших советов я сделал код, в котором у меня свистят 2 датчкика параллельно и потом принимают сигнал тоже оба, но проблема заключается в том что, принявший сигнал датчик переставал "смотреть" сигнал, который издавался с его свистка. Кратко говоря мы получаем 2 числа (1е- нужное растояние, 2е- число=0), потом я придумал продублировать код, но в приоритете (запрашивать растояние) уже узнавать 2е ухо. Схема полуилась +- рабочая ( вплане уже выдавало 2 числа с задержкой из-за вычисления числа=0.
Короче, может ли кто-то подсказать как можно завершить работу (ожидание "echo" от свистка "trig"), по сути что бы он свиснул и не считал число, а просто сбросил свою работу. Это бы мне очень облегчило работу.
Так же как вы считаете, можно ли решить все это перепайкой между собой уха обоих датчиков. В плане разрезать контакты, которые относятся к обоим ухам и спаять их долинным проводом между собой, так, чтобы ухо второго датчика будет относиться к свистку первого и наоборот?
Извиняюсь что так долго не писал. Просто это мой первый опыт в форумах и я не думал, что тут так быстро отвечают на вопросы или возникшие проблемы.
Забавно что вообще получилось "+-" ..
Далее. Перепаивать уши наверное можно, но надо смотреть по дальности получится или нет. Ну и провода сделать а-ля "витая пара".
Принудительно завершить работу можно указав у pulseIn() ещё один параметр - время ожидания отклика. Загляните в справочник по функции, там расписано детально. И ещё, или паузу до след. свистка надо делать больше мах. дальности по времени или надо ручками переставлять перед свистком пин echo в 0 кажется, уже не помню как делал.. он иногда "залипает"..
Если нужно до двух метров - попробуйте VL53L0X
https://www.ebay.com/itm/VL53L0X-Time-of-Flight-Distance-Measurement-Sen...
Я недавно получил, работает прекрасно и стабильно.
При этом поверхность для отражения может быть даже пушистая вата :).
Мне нужно замерять расстояние от 0 до 30 мм (т.е. до 3 см), с точностью 1-2 мм, т.е. 3-6%. Как думаете подойдет такой? Или какие еще датчики для сабжа есть?
CJMCU-530
https://www.youtube.com/watch?v=EUQIijdsXeM
Спасибо. Я его и имел ввиду... На ролике при 30 см точность 1 см якобы. Это не факт, что при 3 см будет 1 мм. Будем покупать и тестить))))