Практические советы в создании ультразвукового дальномера
Ультразвуковой дальномер - устройство для измерения расстояния, бесконтактным способом. Данная страничка не является строго научной статьей(и вообще статьей :-) - по сути здесь нет ничего нового - просто собраны кое какие материалы и тезисы в помощь создателю ультразвукового дальномера прикладного назначения. Так же читателю предлагается мой вариант схемы дальномера, отличающийся разнообразными настройками под конкретную задачу.
Принцип действия ультразвукового дальномера:
Дальномер состоит из двух частей - приемной и передающей - обе части с моем варианте управляются микроконтроллером - он нужен так же для последующей передачи результатов измерения. Расстояние меряется следующим образом: приемная часть излучает через резонирующий элемент пачку импульсов с частотой 40кГц. Длина пачки выбирается по надобности - я остановился где-то на 40 импульсах. Пачка нужна для того что бы "раскачать" элемент со стоячего положения - хотелось бы делать это одним импульсом, что упростило бы задачку приема, но физически невозможно. Далее колебания резонирующего элемента передаются воздуху и летят вперед(и вбок - зависит от элемента) как обычный звук. Если попадается более менее перпендикулярное препятствие, то часть колебаний отражается назад и летят точно так же в сторону испустившего их дальномера. Долетев, попадают на элемент приемной части (по сути микрофон) и фиксируются схемой.
Звук в воздухе распространяется довольно медлено, время его полета пропорционально расстоянию, которое он пролетел. По другому этот метод еще называют методом эхолокации.
Дополнено 2010г. Данная страничка немного устарела, за несколько лет в инете и магазинах многое поменялось.
Все описанное ниже можно принять к сведенью, но так же советую обратить внимание на страничку магазина (а здесь дешевле), где продается более красивое решение. Описание и схему маленького дальномера на одной пищалке можно найти
здесь. Интуетивно понятно, что это решение можно продублировать, добавив по надобности что-нить свое.
Ультразвуковой дальномер - мое решение.
Конечно - можно купить в магазине готовый ультразвуковой или лазерный дальномер, стоит он порядочно и возможно не подойдет для конкретной задачки... если делать самомтоятельно - можно настроить как угодно и подо что угодно(если это возможно вообще)
Здесь история такова:
изначально на меленькой платке надо было сделать одну не менее маленькую и простую хреньку, которая должна была тупо записывать изменения цифрового сигнала -
приблуда помогала мне программировать пульт ДУ от телека, записывая коды всех кнопок - по сути была приемником и дешифратором ИК сигналов. После возникла надобность сделать для мобильного робота ультразвуковой дальномер( для определения препятствий, величиной с болванку-две на расстоянии метр и более по возможности),
ну посмотрел - раз уже есть камень с объвязкой и выводом COM порта, решил по крайне мере приемуню часть уместить там же... потом так же решил и с передающей.... потом передающая часть разрослась... потом разрослась и приемная, причем конкретно. В резельтате получилось то, что получилось.Была бы готовая схема можно было сделать печатную плату, вставить детальки и не думать - однако, поскольку ничего не нашлось - пришлось провести некоторое исследование по данному вопросу... Надо добавить, что нашел вообще только одну схему на японском сайте, в рунете нет нихрена!
Такой вот ультразвуковой дальномер с обратной стороны, без неких навыков пайки - лучше не браться. Выглядит страшновато, но т.к. приемная и посылающая часть в разных концах и конденсаторы на питание не жалелись, вообщем работает:
Есть русское слово, как такое можно назвать.. если отгадал - отправь по аське мне:
так вот проходят испытания ультразвукового дальномера - напротив болванка , в синей катушке от припоя излучатель(он все вермя вертится на проводах - направить трудно),
приемная часть на плате впаяна(не вертится) нацелена на болванку. Звук идет соответственно от излучателся, отражается от болванки и попадает в приемник, который тут же на плате. (я не рискнул выводить его на проводах, что бы те еще больше помех не дали)
Далее подсчитывается время.. вернее подсчитывается оно все время пока звук в "полете" а при его поимке только выводится кому надо(пока в комп).
Зная скорость звука в воздухе, и время, которое он был в полете - мы рассчитываем расстояние...
Надо заметить, что так оно только в теории.. на самом деле, на практике время - это и есть расстояние - после цикла ожидания "эха" в переменной остается число,
собственно это есть время, но в каких-то своих единицах (я не использовал таймер, по крайне мере пока). Далее составляется пропорция - сантиметры по линейке до препятсятвия и
это число, соответствующее измеренным сантиметрам... т.е само значение скорости звука здесь явно не где даже не вписано...(его можно даже не знать!!!_)итак - замеряем расстояние от ультразвукового дальномера до болванки:
Это фон - так он видит пустое пространство, с этим кстати загвоздка - слишком уж шумно на мой взгляд:
...а так он видит болванку, слева за экраном импульс синхронизации посланный от контроллера во второй канал осциллографа.
Как нектрудно догадаться импульс синхронизации посылаестя перед всем этим представлением - по этому картина привязана только к нему, и если болванку оттащить немного - то "холмик" тоже отъедет вправо, возможно даже за границы экрана
Эта же осциллограми видна на картинке с болванкой, напротив ультразвукового дальномера - осциллограф там справа.
Ультразвуковой дальномер продолжение - второй каскад усиления.
Как написано в первой части - все это работало... вообщем-то достаточно для решиния поставленной задачки, но в нете ходили слухи, что ультразвуковые дальномеры
могут много больше.
Некоторое время я впитывал все эти слухи, посматривал на свой, впитывал и снова посматривал - через какое-то время мой мне нравится перестал :-)
Решено было пересчитать коэффициент усиления, и хотя казалось, что он дастаточен - поэксперементировать с большим.
Т.к. операционник, пускай и дорогой, уже "заваливался" на нужной частоте решено было разбить усиление на два каскада и вставить еще один операционик.
теперь усиление состоит из двух частей:
1 - 1:100
2 - 1:10 (для своей задачки я понизил до 1:5, т.к сильнее не нужно, а в последнем случае проще настраивать компаратор)
----
3 - компаратор
4 - не используется.
(см. в конце схему ультразвукового дальномера)
С обратной стороны места уже стало не хватать - так что пара резисторов разместилась снизу, это и удобно, т.к. эти резисторы задают второй коэффициент усиления, я с ними долго возился, так что легкий доступ это несоменно плюс:
За сим задачку определения роботом перепятствий спереди - считаю решенной!
Скоро вылажу сюда схемки, осциллограммы на каждом участке и оформлю это все в качестве статьи в помошь желающим, т.к. ничего похожего и полезного на русском в свое время не нашел.
Есть всякая муть конечно на частях из фотоаппарата палароид и тп.. но меня это не очень порадовало - здесь то можно поиграться с каждым параметром на кадом участке схемы, а там что?
Часть третья: красота спасет мир!
КОробочка попалась не дорогая, и причем с ушками, что отлично решает проблему крепежа - плата прикручена болтами через слой паралона, крышка на защелках - бить по ней палкой никто не будет - так что защелки рулят! (есть еще коробки на винтах - отстой - полезного места в нутри ощутимо меньше). Свич перекрывает 12 вольт ( 5 вообще не сат отключать - пусть живет :-) (на борту нашего робота 5 вольт везде общие и откл одним свичем)
Ну и ком порт соответственно(кстати можно и юсб еще проще будет :-)) та же схема, только юзаем доку AVR309).. в него постоянно падает байт - сколько сантиметров до цели. В байт как раз влезло 2,5 метра, больше и не требуется.
Вся конструкция заняла 10х7 см.
Подумываю, не сделать ли ему рупоры на пищалки(что сразу же не мешали друг другу), но по ходу и так все работает отлично.
Некоторые замечания:
Все детали, нужные для создания ультразвукового дальномера по этой схеме продаются в чипидипе, стоит около 500-900р за все(точно не помню - денег много было, не считал :-). (корпус, пищалки, разъемы прочее)
Некоторые коментарии по схеме ультразвукового дальномера:
1. Пищалки можно юзать любые, под разные задачки лучше разные... для моей задачи - чем болше габариты тем лучше, угол 50.
2. Можно попробывать использовать только одну относительно дорогую AD822 а на место компаратора чего-нить по дешевле ( у меня просто не было ничего другого под рукой вообще)
3. В меге для генерации 40 килогерц можно использовать таймер, для этого нужно подобрать другой резонатор. (у меня были только 16 и 12.. они не подходят)
4. Скорость звука в воздухе вообще-то зависит от температуры - если очень важна точность (мне она пофигу) то учитывай это
5. Заметь- что на картинке дальномера в корпусе - пищалки не касаются пластмассы - один чел говорил, что при мегаточной настройки (данная схема способна и на такое) звук от пищалки до микрофона будет передаваться по корпусу, по этому лучше перестраховаться
6. Пример простейшей прошивки меги на си(под эту схему) можно посмотреть здесь
7. Программатор лучше использовать STK200/300 он же avreal - софт и схему можно дернуть здесь
8. По уму в прошивке надо отслеживать и начало и конец "пачки", в примере только начало(точность вырастет конкретно).. может допишу - выложу.
9. Пищалка очень любит 40кгц - чуть в сторону уже совсем не то... наверное правду в мануале пишут, что резонансная :-)
10. НА схеме неспроста в излучателе понапиханы транзисторы - желающим дать больше вольт чем 12 - велком - один чел говорил, что будет пищать громче( считай дальше). Я этого делать не стал по трем причинам: во первых 24 вольта еще где-то найти надо, во вторых текущаа версия при соотв настройке ризистора итак видит стену за 4 метра, т.е. мне не где испытывать его, да и не нужно. Ну а третья причина этот же чел говорил, что пищалки имеют тенденцию дохнуть на этом вольтаже
11. Общий совет: можно найти все резисторы и конденсаторы в нерабочем блоке питания от компа ATX(они там все где-то 1/8 вата) - денег сэкономишь!
12. Ошибочное мнение, что ультразвук издаваемый пищалкой как-то могут услышать собики и прочие твари, он на них плохо влияет: у меня собака пришла как то ночью и уснула напротив пищалки включенной.
13. Еще - так просто к сведенью - меги и прочие 8битный контроллеры от атмела - гонятся отлично.. у меня в некоторых задачках вместо положенных 16 работают на 24 и нормально.
14. При устрановке R5 выше килоома (10, 50, 100) получится очень большое усиление, и скорее всего понадобятся рупора, зато дальность измерений сильно вырастет.
15. Вместо устрановки рупоров (при большом R5) см. выше, можно модернизировать прошивку, что б она не ждала в начальный момент времени полезный сигнал. Но тогда нельзя будет мерять расстояния около 10 см и меньше.
Коментраий к совету 8 - желтым обозначен момент срабатывания прерывания МК ультразвукового дальномера на приеме, собственно можно ограничится именно этим первым моментом, подождать чуть-чуть и делать следующее измерение, генерая следущюю пачку импульсов - а время полета звука считать временем от первого посланного импульса(или последнего не суть важно) до ПЕРВОГО принятого.
Второй вариант - обозначен красным - более точный - поскольку пачка импульсов как правило доходит отнюдь не в идеальном виде и не полностью (может не быть пары тройки первых или последних импульсов), собствено даже на картинке видно, что она "сплющилась" по краям, хотя отправлялся идеальный прямоугольник импульсов - так вот: суть в том, что середина пачки должна оставаться на месте несмотря на то, что края ее уже могут не почувствоваться компаратором. Так что точность в несколько.. (милиметров надо думать) зависит от того учитывалась в прошивке ультразвукового дальномера середина или только начало пачки при приеме ее обратно.
Я бы не мог сказать с уверенностью какой вариант проще: второй определенно точнее, но проигрывает при использовании ультразвукового дальномера в узких пространствах, или же надо следать за тем что б после получения пачки имульсов не поймать вторую - отраженную от чего-нить - и не посчитать ее конец за конец суммарной пачки. В первом случае, ультразвуковой дальномер работает не столь точно как может - зато измеренное расстоянии это гарантированно расстояние до ближайшего объекта(в случае равного оотражения).
На рисунке ниже показанно, чего следует опасаться рассчитывая расстояние по середине отраженной пачки импульсов. Совсем не сложно учесть это в прошивке МК ультразвукового дальномера, но тогда выложенную мною софтину прийдется дорабоать. Сам смотрел только первый пришедший сигнал из пачки, т.к. по моей задачке иного не требовалось.
Если дальномер расположен между двух препятствий (в моем случае книжек поставленных горизонтально на расстоянии 15см от дальномера спереди и сзади) то на выходе будет наблюдаться похожая картина: при неправильно настроенном компараторе и прошивке считающей расстояние "по середине пачки" - дальномер покажет расстояние до объекта больше чем на самом деле:
На осциллограмме видно, что если компаратор будте настроен, для пропускания любого сигнала чуть выше шумов, то пройдет не одна полученная первая паска импульсов, но и второй отраженный бугорок по-меньше, а так же возможно и третий - прошивка(в случае, рассчета расстояния по середине пачки) посчитает, что это одна пачка а не три, и скажет что середина у нее дальше.
(синий меандрик это время, когда генерилась пачка исходящая)
Ультразвуковой дальномер: мой вариант схемы
Описание схемы ультразвукового дальномера:
Дальше идет схема (оригинал весит метр)- она проверена, только вот рисовалась по памяти немного... логика точно верна, онако советую сверятся с пдфками.. мало ли что. Приемеая часть ультразвукового дальномера состоит из микрофона 40кгц и каскада из двух операционных усилителей. Первый с помощью обратной связи настроен на коэффициент усиления 1:100, второй на 1:10.
ПО надобности коэффициенты усиления обоих операционников могут быть увеличины - но на первом нет смысла ставить больше, чем он может макс. на частоте в 40Кгц.
После второго операционного усилителя сигнал попадает в компаратор, порог сравнения которого регулируется подстроечным резистором. Фактически он регулирует чувствительность ультразвукового дальномера: насколько чутко он будет воспринимать отраженный сигнал, и в случае и спользования в узком пространстве регулировкой компаратора можно отсекать многократно отраженный сигнал.
После компаратора уровень сигнала(уже можно сказать логического) понижается до 5 вольт и идет в прерывание микроконтроллера - далее уже работает программа.
Между операционными усилителями встречаются конденсаторы, выполняющие роль частотных фильтров - убирающих все низкочастотные сигналы. Передающая часть ультразвукового дальномера построена на инверторах - при переключении работы одного выходного транзистора на другой - меняется не просто уровень сигнала (как например при использовании одного транзистора на выходе, напрямую подключенного к МК) а еще и полярность, что повышает силу "писка". Использование транзисторов на выходе обусловлено ограничениями на ток в микросхеме инвертора, и на максимальное напяржение в ней же.. т.к. схема расчитана на входное напряжение транзисторов до 24 вольт.
Микроконтроллер искользовался серии AVR, это обусловлено исключительно моим прежним общением с этими типами устройств - тут кому что нравится больше.
Здесь же стоит заметить что есть варианты работы схемы ультразвукового дальномера вообще без МК(c использованием таймеров типа 555 и нехитрой логики - только тогда не понятно что делать с данными - разве что визуально смотреть как-то.).
В любом случае использовать МК это всегда проще и универсальнее.
Осцилограммы этой схемы ультразвукового дальномера:
Наконец-то дошли руки, как и обещал выкладываю осцилограммы с различных точек этой схемы. Коробка от компакт диска - на расстоянии 70см от дальномера - перпендикулярно.
Желтый - выход первого операционного усилителя
Синий - момент, когда пачка генерится и улетает соответственно
За ноль (он общий) считать нижние положение синего канала
Принятая пачка импульсов - крупно.
Желтый - выход первого операционного усилителя
За ноль (он общий) считать нижние положение синего канала
Вход прерывания микроконтроллера (сигнал после компаратора).
Желтый - после компаратора и делителя
Синий - момент, когда пачка генерится и улетает соответственно
За ноль (он общий) считать нижние положение синего канала
Между одним из выходов на пищалку(передача) и землей.
(после инвертона и транзисторов).
Ультразвуковой дальномер в движении на роботе
Ура! Наконец-то удалось вдоволь натестится - применить дальномер на задаче, ради которой он, собственно, и был сделан.
Итак - задача:
Определить наличие препятствия (буросок, лежащий горизонтально, во всю длинну - 50 на 5 (длина и высота мм) и расстояние до него на текущий момент времени.
Робот несется на скорости по полосе-траектории - далее выходит на более менее прямой участок, где возможно расположенно препятствие - далее "бревно"
Результаты следующие:
- разумная частота работы дальномера - около 10Гц.
- на практике сразу же пришлось сделать рупора(первая версия кусок паролона, с проткнутыми под пищалки дырками: помогает, но не важно - лучше попробывать, как сделал японец - см ссылку в самом начале, сам сделаю как только убью все более важные глюки в роботе) - пищалки слышат друг дурга сразу же(им плевать на диаграму напрявленности - можно считать что начальная до 90 градусов) на коэффициенте усиления второго операционника 1 к 10
- пришлось уменьшить этот же коэффициент до 1 к 5 (иначе видит неровности стыков пола и прочее лишнее - дальномер закреплен в 100мм от пола)
- пришлось уменьшить этот же коэффициент до 1 к 3 - дальномер видит слишком далеко (для моей задачи) - у меня далекие препятствия - стены, толпа людей и т.п. большие, а "бревно" довольно маленькое. Трудно определить увидел ли он по счастливой случайности далекое "бревно" или это уже стенка или подобное... но над этим решением я еще размышляю.. есть тема убить это програмно, не теряя дальности определения (1 к 3 работает до 1м.) Здесь важно заметить, что на практике зависимость между размерами детектируемого объекта и максимального расстояния работы нелинейная: т.е чем меньше общий коэффициент усиления, тем лучше дальномер будет определять мелкие, но ближние объекты, нежели здоровые, но дальние(понятно, что слово дальние, считается линейно уменьшенным пропорционально к-ту усиления). (последнее возможно мои домыслы, но это идет из экспериментов с коэффициентами 1:1, 1:2,1:3,1:5
- COM порт ушел в прошлое... На роботе свободный ком порт это как мираж в пустыне. В результате пришлось реализовать интерфейс передачи данных: основной роботовский контроллер дает импульс пуска измерения, ультразвуковая МЕГА8 ловит его, начинает измерение, и если вернулось эхо, то обрабабывает его, и дает импульс ответа. Собственно передачей данных здесь служит вермя ответа относительно команды сделать измерение (может быть и отсутствие ответа - тогда импульс ультразвука улител в пустоту, основной роботовский контроллер это понимает)
- очень рад, что не купил готовые индустриальные датчики - с описанным дальномером можно делать что угодно, если меняется задача или ее параметры(у меня частенько).
- вообще ультразвук работает как ему больше нравится, нежели мне. :-( Иногда на скорости стабильно не замечает "бревно" в одном месте, хотя в другом отлично его чует на требуемом расстоянии.(значит работа не закончена :-) to be continue)
Еще немного интересного:
Видел пару схемок - вместо инвертера и транзисторов можно использовать MAX232 или ADM202 т.е его возможность преобразовывать 5 в +10 и -10.
Воощем-то не плохое и довольно интересное решение - компактно, очень дешего - из недостатков - больше 10 вольт дать не получится.