Как стать автором
Обновить

Измеритель расстояния на HC-SR04 без микроконтроллера

Время на прочтение6 мин
Количество просмотров15K
Всего голосов 44: ↑44 и ↓0+44
Комментарии34

Комментарии 34

Вспоминаются журналы из 90х, ммм…
И благодаря вам, Хабр — торт, спасибо за статью!

Отличная статья, отличная идея для «троллейбуса из буханки». Жаль, что первое фото всю интригу испортило. ПЗУ видно. Так можно было гадать, на ПЗУ или двоично — десятичный счетчик… А за «спад» — просто люто благодарю автора. Лет 25 назад, нам преподаватель по цифровой электронике долбил: «Услышу „задний фронт“, экзамен не сдадите!». Недавно сам велосипед делал. Аналог модуля дальномера. На рассыпухе и контроллере. Но там требования по питанию были жесткие, готовый не подошел по току потребления и напряжению питания. Тоже интересный опыт был…
Кстати, вопрос к автору, а чем аргументированно отсутствие панельки? Наличием отваги и хорошего паяльного оборудования + опыт пайки или отсутствием панельки в хозяйстве?

Спасибо большое, весьма интересно! Приятно читать такое в век JS в каждом втором чайнике.

Очень здорово, спасибо!
А максимально быстро, но достаточно точно сколько раз в секунду можно получать расстояние? Чтобы эхо от предыдущих замеров уже не мешало?

ДШ рекомендует не более ~16 раз в секунду, в схеме ~4 раза в секунду. Эхо от предыдущих измерений отсекается внутри датчика путем игнорирования нового сигнала запуска измерения, если он был выдан слишком рано.

Ага. А ваш опыт что показывает? Ну у меня был прикол, когда на 10 см все ок, но как только расстояние пошло 150-200 см, то блин, разброс и шатание, пришлось делать по 3 замера и усреднять, запоминать предыдущие замеры в этом направлении, и вышло чуть ли не 0.5 сек в каждом замере. Блин, как только столкнулся с этим то резко зауважал быстройдействие настоящих антенных систем. Молчу уж про военных, у которых «пропустил эхо — словил ракету»…

До 100 см "шатает" +1 (т.е., например, 100/101). Более 100 см — уже +2 (т.е. 100/101/102). Для датчика за $1 я считаю это просто волшебством.

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

Кстати говоря, некоторое время я назад наткнулся на youtube-канал товарища Ben Eater, который простыми словами рассказывает о том, как добиться впечатляющих результатов на вполне обычных компонентах начиная с того, как построить логические элементы на транзисторах, до 8-битного компьютера и видеокарты свомими руками, параллельно давая кучу полезных советов
Классно! Время от времени разминать навык инженера-схемотехника очень полезно. Не все контроллеры программировать, можно и ПЗУ.

Красиво сделана динамическая индикация через инвертор на дополнительный адресе ПЗУ и полудешифратор на 2И-НЕ.

Забавно, что несмотря на чудовищный расход адресного пространства, половину адресных выводов пришлось все равно заземлить. Тут красиво и олдскульно бы смотрелось что-то вроде 556РТ4/7, причем катодный коммутатор можно было бы сделать целиком тоже на нем (нагрузочная способность выходов с ОК там ЕМНИП адская)

Да, РТ7 интересная штука, подошла бы по адресному пространству в точности. Выбор микросхем был продиктован двумя желаниями: чтобы были в DIP корпусе и широко доступы в продаже.

Эхъ, молодёж, надо было эхо импульсом конденсатор заряжать, и стрелочным индикатором расстояние показатъ! ;-)

Не. Выводить эхо-импульс напрямую на вертикальную развёртку ЭЛТ.

Теперь бы ещё сам HC-SR04 на логике воссоздать. Должно быть не намного сложнее этой схемы.

Ой, нет, там примем аналогового сигнала, АРУ, фильтры, фильтры. Я с таким совсем не дружу =)

Аналоговый фильтр можно из оригинальной схемы позаимствовать, она в Интернете описана много раз. Дальше только логика. Но это, конечно, если есть желание.
Есть же десятичные счётчики с декодером на 7-ми сегментный индикатор. CD4026 и ещё какие-то.

Спасибо, приятный pr0n.
С первого прочтения не нашёл, к чему-бы придраться. RC-цепочки — ладно уж…
Разве что — резистор на десяток-другой килоом последовательно на 11 вывод 4060-й, что бы облегчить работу защитных диодов на этом входе.

Есть к чему придраться. 27С512 тянет выводом D7 целую гроздь сегментов к нулю. Из нее анодный коммутатор — так себе, следовательно разряд сотен будет светиться тускло, а сама ПЗУ — работать с перегрузкой по этому выходу. Другое дело, что автор скорее всего постарался минимизировать возможные последствия, и у него прошивка — с гашением незначащих нулей — а значит, если до препятствия меньше 200 см, то в старшем разряде горит максимум два сегмента, и ПЗУ это более-менее потянет.

В инструкции надо написать — не относить датчик от предмета дальше 199 см во избежание порчи выходного каскада :)

PS — желание автора уложиться в 4*2И-НЕ вполне понимаемо. Но можно было бы симулировать инвертор сигнала ECHO на А10/Q7, а освободившийся элемент 2И-НЕ использовать для инверсии CLK5

Нули не гашу, все знакоместа горят с хорошей одинаковой яростью. Я понимаю, что выход ПЗУ скорее всего перегружен по току, но что поделать. Плохо быть ПЗУ =(


Фото

image


Для душевного спокойствия можно увеличить резисторы на анодах до 2.2к, индикатор даже на низких токах читается, хотя выглядит не так красиво, конечно.

Нули не гашу
— так гасите! Сколько миллиампер экономии! Тем более, что Вам все карты в руки — в адреса ПЗУ заведены все сигналы данных и выбора знакоместа. Можно даже минус рисовать только в правом разряде при достижении максимального расстояния

А ноль ваш дальномер не выдает регулярно вперемешку с измеренными значениями? По моей практике, надо еще ноль отсекать, иначе большую часть времени видим именно его на выходе. Если правильно помню, как раз 5v датчик (без плюса в названии, который 3.3/5v) этим грешит.

Минимальное значение, которое я видел на индикаторе — 2. 0 и 1 вообще ни разу не было. Датчик 5v. Если поверхность отражения "плохая", слишком близко или слишком далеко, то уходит в зашкал. Для ровных поверхностей в допустимом диапазоне работает вообще без "неудачных" измерений. Не знаю, может условия случайно хорошо сложились, но датчик мне показался довольно стабильным.

Интересно, у меня пара таких датчиков (5V), купленных в разных местах, и они очень часто вперемешку с измеренными значениями выдают 0. А вот более современная версия датчика (plus, поддерживает и 3V и 5V) этим не страдает. Можете глянуть, у вас точно HC-SR04 (не работает от 3V), не HC-SR04+ (HC-SR04P)? Было бы полезно узнать.

Точно обычный 5v, пробовал его на ~3.3v запускать — не работает. Вот, достал ссылку из истории покупок али: aliexpress com/item/32894521376.html

Ясно, спасибо! Вероятно, дело не в том, что у меня последние датчики на 3V, а в том, что они из новых партий.

А не проще вместо 2 чипов счётчика и ПЗУ взять 3 двоично-десятичных счётчика с дешифратором? Кажется, серия к176ие. Там ещё аппаратная инверсия выходов есть, под любой тип светодиодного индикатора или вообще ЖКИ.
Мне помнится, что в 176 и в 561 сериях нет счетчиков-дешифраторов с буферным регистром. Без них процесс счета будет индицироваться, и на индикаторе какое-то время будет «мазня». А если ставить отдельно счетчики, отдельно дешифраторы с защелками — то это 6 корпусов.
Там всё мельтешение — максимум 25 мс. Некритично. Зато программатор не нужен, статья ведь об этом? Если есть программатор, то проще мега48 запрограммировать, или старые AT89C, которые в параллельном режиме можно прошить этим же программатором, как 27С память…

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


статья ведь об этом

Одна из основных целей статьи — побудить на эксперимент (в том числе, мысленный) по поиску наиболее элегантного решения в условиях искусственных ограничений. (=
С двоично-десятичными счетчиками вижу один большой плюс: значение больше не ограничено 254 и может быть до 998. Однако, без выходного регистра будут мерцания: дело в том, что "прямой ход" счетчика случается 4 раза в секунду (хоть и занимает несколько миллисекунд). А увеличить количество опросов мы можем максимум до 16 (ограничение датчика), что все равно будет заметно глазу. К тому же, при частых опросах, дерганья показаний в младших разрядах будут дополнительно мешать.

Всё верно, делал ещё в 90-х четырёхразрядный счетчик на 176ИЕ4 с выводом на ЖКИ. По факту, тут измеритель длительности импульса — на жёсткой логике такое легко реализуется. Но корпусов чуть больше получится, конечно.
Развернул статьи исключительно, чтобы посмотреть (и потом потоксить) что там за многоножка, так как не вязалось с «стандартной логикой».
Пробежался по диагонали по тексту — понравилось.
И весьма находчивое применение ПЗУ.
В плане схемотехники и всего — автору респект.
Но всё это не сильно глубже в плане интеграции микроконтроллера ушло:) ПЗУ + обвес логики, по-сути, эквивалентны примитивному очень малофункциональному, но микроконтроллеру. Это так, капля желчи от меня:)

Спасибо, поправил.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации