Ультразвуковой измеритель расстояния своими руками. Ультразвуковой дальномер hc-sr04 - Измерительная техника - Инструменты

Сегодня мы рассмотрим очередное электронное вспомогательное устройство, которое обязательно пригодится на стройке (а стройкой рано или поздно занимается любой мужчина) - ультразвуковой измеритель расстояния с ЖК-дисплеем. Когда нужно замерять дистанцию между объектами или небольшой размер, сразу на ум приходит обычная рулетка. Это оправдано при работе с небольшими размерами - до пары метров. Но когда требуется замерять высоту дома, расстояние между соседними стенами в большом помещении, тут электронный УЗ дальномер будет просто незаменим. Особенно это относится к измерению высоты потолков - ведь не будете вы искать стремянку или лазить по стульям. В общем это один из тех инструментов, которые must have . А чтоб сэкономить - данный экземпляр был заказан на сайте Dealextreme .

  • ЖК-дисплей
  • Измерение расстояния - до 20 метров
  • Точность: ± 1,0 см
  • Лазерная подсветка
  • Единицы измерения: футы / метры
  • Работает от G6F22 батареи (в комплекте)
  • Цена на Дилэкстриме - 22 доллара

В технической спецификации описано, что точность измерения составляет 1 см. Если вы сравните ультразвуковые с лазерными дальномерами, то конечно они несколько проигрывают в точности, но учтите, что это разные ценовые категории. Если вам необходим дальномер до миллиметра - придётся потратить более 50 долларов, а это редко бывает оправдано.

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

Схема дальномера

В основе схемы - процессор EM78P468NQS и пару операционных усилителей LM358 и LM833 . Информация выводится на большой ЖК экран. Подсветки правда у него нету, но не думаем, что кто-то будет проводить работы в темноте:)

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

Управление прибором простое - включаем питание нажав на кнопку ON/OFF и кратковременно жмём центральную клавишу. При этом держать излучатель дальномера надо строго перпендикулярно плоскости измерения. Для этого на корпусе даже есть небольшой уровень, с шариком воздуха и метками.

Есть интересная функция автоматического вычисления площади комнаты. Для этого жмём кнопку mode и последовательно меряем длину, высоту, ширину. Сразу имеем на экране значение площади или всего объёма.

Вывод

В некоторых случаях действительно нужна только обычная рулетка, а иногда и ультразвуковой дальномер окажется очень кстати. Это как шестигранники - они все должны быть. Рано или поздно любой понадобится. А 500-1000р не такие уж и большие деньги за это устройство. Тем более, что качество сборки на высоте и уже целый год оно работает исправно.

Обсудить статью УЛЬТРАЗВУКОВОЙ ДАЛЬНОМЕР

В статье я расскажу о том, как я делал лазерный дальномер и о принципе его работы. Сразу отмечу, что конструкция представляет собой макет, и ее нельзя использовать для практического применения. Делалась она только для того, чтобы убедится в том, что фазовый дальномер реально собрать самому.

Теория

Часто приходится встречать мнение, что с помощью лазера расстояние измеряют только путем прямого измерения времени «полета» лазерного импульса от лазера до отражающего объекта и обратно. На самом деле, этот метод (его называют импульсным или времяпролетным, TOF) применяют в основном в тех случаях, когда расстояния до нужного объекта достаточно велики (>100м). Так как скорость света очень велика, то за один импульс лазера достаточно сложно с большой точностью измерить время пролета света, и следовательно, расстояние. Свет проходит 1 метр примерно за 3.3 нс, так что точность измерения времени должна быть наносекундная, хотя точность измерения расстояния при этом все равно будет составлять десятки сантиметров. Для измерения временных интервалов с такой точностью используют ПЛИС и специализированные микросхемы.

Видео работы дальномера:

Дальность работы у получившегося дальномера вышла достаточно небольшая: 1,5-2 м в зависимости от коэффициента отражения объекта.
Для того, чтобы увеличить дальность, можно использовать специальный отражатель, на который нужно будет направлять луч лазера.
Для экспериментов я сделал линзовый отражатель, состоящий из линзы, в фокусе которой расположена матовая бумага. Такая конструкция отражает свет в ту же точку, откуда он был выпущен, правда, диаметр луча при этом увеличивается.
Фотография отражателя:

Использование отражателя:


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

Точность получившегося дальномера - 1-2 сантиметра, что соответствует точности измерения сдвига фаз - 0,2-0,5 градуса. При этом, для достижения такой точности, данные приходится слишком долго усреднять - на одно измерение уходит 0.5 сек. Возможно, это связано с использованием PLL для формирования сигналов - у него довольно большой джиттер. Хотя я считаю, что для самодельного макета, аналоговая часть которого сделана довольно коряво, в котором присутствуют достаточно длинные провода, даже такая точность - довольно неплохо.
Отмечу, что я не смог найти в Интернете ни одного существующего проекта фазового дальномера (хотя бы со схемой конструкции), что и послужило причиной написать эту статью.

Теги:

  • лазерный дальномер
  • stm32
  • stm32f4discovery
Добавить метки

По случаю приобрел себе ультразвуковой дальномер HC-SR04. Девайс представляет из себя модуль с двумя пъезоизлучателями, один из которых служит излучателем, а второй - приемником ультразвуковой волны; плюс управляющая электроника для управления излучателем и приемником. Для подключения модуль имеет 4-х контактный разъем: два из которых питание (требуется 5 вольт), и еще два для общения с микроконтроллером.

Интерфейс связи тут организован очень просто: на вход подаем короткий умпульс длительностью 10-15 микросекунд и ждем импульса на выходе. Как только до приемника дойдет отраженная волна, модуль сам рассчитает расстояние и выдаст на ногу Echo импульс высокого уровня длинной до 25 мс. Длина выходного импульса будет пропорциональна расстоянию до препятствия от которого отразилась ультразвуковая волна. Нам остается только поймать этот импульс, посчитать его длину и перевести это значение в расстояние.

Технические характеристики:

  • Напряжение питания: 5V
  • Ток покоя: < 2 мА
  • Эффективный угол обзора: < 15 °
  • Диапазон расстояний: 2 см - 500 см
  • Разрешение: 0,3 см

Характеристики потырены с документации на модуль . Кроме этого производитель приводит формулу, по которой рассчитывать расстояние в зависимости от длительности импульса.

S=F/58 ; где S - дистанция в сантиметрах, F - длина импульса в микросекундах

Как видно, даже знать скорость звука не обязательно.

Для испытаний собрал вот такую схему:

Модуль соединяется к микроконтроллеру напрямую. Резисторы подтяжки ставить не нужно, они уже есть на плате модуля.

И так, нам нужно ловить всего один импульс, и затем посчитать его длину. По началу хотел подбить под это дело одно из внешних прерываний микроконтроллера, при этом прерывание должно было происходить как по переднему фронту (переход с низкого в высокое состояние), так и по заднему фронту (с высокого на низкое). Тоесть придется на лету менять конфигурацию этого прерывания. Плюс к этому нужно задействовать один из таймеров, который должен измерять длину импульса. Слишком сложно для маленькой операции фиксирования сигнала.. В Bascom-AVR на этот случай есть специальная команда Pulsein . Вот пример того, как поймать сигнал с помощью этой команды:

Pulsein A , Pind , 5 , 1

Здесь, в переменную A запишется значение длины импульса в десятках микросекунд , снятого с ноги Pind.5 . Единица на конце команды говорит, что нужно ловить сигнал высокого уровня. Если изменить на 0, тогда контроллер будет ловить сигнал низкого уровня.

Эта команда не использует прерываний и хардверного таймера, но способна определить появление импульса и зафиксировать его длину с разрешением 10 мкс. Команда использует для хранения длины импульса 2-х байтный тип переменной, поэтому максимальная длина принятого сигнала может быть 655,35 мс. Этого вполне хватает для поставленной задачи, но по необходимости можно отредактировать файл библиотеки mcs.lib и изменить максимальную длительность фиксируемого импульса.

Полный листинг программы представлен ниже

$regfile = "m8def.dat"

$crystal = 8000000

"конфигурация подключения дисплея к портам МК

Config Lcd = 16 * 2

Config Lcdpin = Pin , Rs = Portc . 5 , E = Portc . 4 , Db4 = Portc . 3 , Db5 = Portc . 2 , Db6 = Portc . 1 , Db7 = Portc . 0

Config Portd . 4 = Output "выход для подключения ноги Trigger

Trigger Alias Portd . 4

Trigger = 0

Config Portd . 5 = Input "вход для импульса Echo

Config Portd . 7 = Output "конфигурация для подключения светодиода

Led Alias Portd . 7

Led = 0

Dim A As Word "сюда копируется значение длины сигнала

Dim S As Single "переменная для хранения расстояния

Const K = 0 . 1725 "коэффициент для перевода длины импульса в расстояние

Waitms 50

Cursor Off

Cls

Lcd "Sonar HC-SR04"

Locate 2 , 1

Lcd "сайт"

Led = 1

Waitms 100

Led = 0

Wait 3

Do

Trigger = 1 "даем импульс на ногу Portd.4 длительностью 15 мкс

Waitus 15

Trigger = 0

Waitus 10

Pulsein A , Pind , 5 , 1 "ловим импульс высокого уровня на PinD.5

Некоторые замечания:
Все детали, нужные для создания ультразвукового дальномера по этой схеме продаются в чипидипе, стоит около 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 - желтым обозначен момент срабатывания прерывания МК ультразвукового дальномера на приеме, собственно можно ограничится именно этим первым моментом, подождать чуть-чуть и делать следующее измерение, генерая следущюю пачку импульсов - а время полета звука считать временем от первого посланного импульса(или последнего не суть важно) до ПЕРВОГО принятого.
Второй вариант - обозначен красным - более точный - поскольку пачка импульсов как правило доходит отнюдь не в идеальном виде и не полностью (может не быть пары тройки первых или последних импульсов), собствено даже на картинке видно, что она "сплющилась" по краям, хотя отправлялся идеальный прямоугольник импульсов - так вот: суть в том, что середина пачки должна оставаться на месте несмотря на то, что края ее уже могут не почувствоваться компаратором. Так что точность в несколько.. (милиметров надо думать) зависит от того учитывалась в прошивке ультразвукового дальномера середина или только начало пачки при приеме ее обратно.

Дальномер — это устройство для измерения расстояния до некоторого предмета. Дальномер помогает роботам в разных ситуациях. Простой колесный робот может использовать этот прибор для обнаружения препятствий. Летающий дрон использует дальномер для баражирования над землей на заданной высоте. С помощью дальномера можно даже построить карту помещения, применив специальный алгоритм SLAM.

1. Принцип действия

На этот раз мы разберем работу одного из самых популярных датчиков — ультразвукового (УЗ) дальномера. Существует много разных модификаций подобных устройств, но все они работают по принципу измерения времени прохождения отраженного звука. То есть датчик отправляет звуковой сигнал в заданном направлении, затем ловит отраженное эхо и вычисляет время полета звука от датчика до препятствия и обратно. Из школьного курса физики мы знаем, что скорость звука в некоторой среде величина постоянная, но зависящая от плотности среды. Зная скорость звука в воздухе и время полета звука до цели, мы можем рассчитать пройденное звуком расстояние по формуле: s = v*t где v — скорость звука в м/с, а t — время в секундах. Скорость звука в воздухе, кстати, равна 340.29 м/с. Чтобы справиться со своей задачей, дальномер имеет две важные конструктивные особенности. Во-первых, чтобы звук хорошо отражался от препятствий, датчик испускает ультразвук с частотой 40 кГц. Для этого в датчике имеется пьезокерамический излучатель, который способен генерировать звук такой высокой частоты. Во-вторых, излучатель устроен таким образом, что звук распространяется не во все стороны (как это бывает у обычных динамиков), а в узком направлении. На рисунке представлена диаграмма направленности типичного УЗ дальномера. Как видно на диаграмме, угол обзора самого простого УЗ дальномера составляет примерно 50-60 градусов. Для типичного варианта использования, когда датчик детектирует препятствия перед собой, такой угол обзора вполне пригоден. Ультразвук сможет обнаружить даже ножку стула, тогда как лазерный дальномер, к примеру, может её не заметить. Если же мы решим сканировать окружающее пространство, вращая дальномер по кругу как радар, УЗ дальномер даст нам очень неточную и шумную картину. Для таких целей лучше использовать как раз лазерный дальномер. Также следует отметить два серьезных недостатка УЗ дальномера. Первый заключается в том, что поверхности имеющие пористую структуру хорошо поглощают ультразвук, и датчик не может измерить расстояние до них. Например, если мы задумаем измерить расстояние от мультикоптера до поверхности поля с высокой травой, то скорее всего получим очень нечеткие данные. Такие же проблемы нас ждут при измерении дистанции до стены покрытой поролоном. Второй недостаток связан со скоростью звуковой волны. Эта скорость недостаточно высока, чтобы сделать процесс измерения более частым. Допустим, перед роботом есть препятствие на удалении 4 метра. Чтобы звук слетал туда и обратно, потребуется целых 24 мс. Следует 7 раз отмерить, прежде чем ставить УЗ дальномер на летающих роботов.

2. Ультразвуковой дальномер HC-SR04

В этом уроке мы будем работать с датчиком HC-SR04 и контроллером Ардуино Уно. Этот популярный дальномер умеет измерять расстояние от 1-2 см до 4-6 метров. При этом, точность измерения составляет 0.5 — 1 см. Встречаются разные версии одного и того же HC-SR04. Одни работают лучше, другие хуже. Отличить их можно по рисунку платы на обратной стороне. Версия, которая работает хорошо выглядит так:

А вот версия, которая может давать сбои:

3. Подключение HC-SR04

Датчик HC-SR04 имеет четыре вывода. Кроме земли (Gnd) и питания (Vcc) еще есть Trig и Echo. Оба этих вывода цифровые, так что подключаем из к любым выводам Ардуино Уно:
HC-SR04 GND VCC Trig Echo
Arduino Uno GND +5V 3 2
Принципиальная схема устройства Внешний вид макета

4. Программа

Итак, попробуем приказать датчику отправить зондирующий ультразвуковой импульс, а затем зафиксируем его возвращение. Посмотрим как выглядит временная диаграмма работы HC-SR04.
На диаграмме видно, что для начала измерения нам необходимо сгенерировать на выводе Trig положительный импульс длиной 10 мкс. Вслед за этим, датчик выпустит серию из 8 импульсов и поднимет уровень на выводе Echo , перейдя при этом в режим ожидания отраженного сигнала. Как только дальномер почувствует, что звук вернулся, он завершит положительный импульс на Echo . Получается, что нам нужно сделать всего две вещи: создать импульс на Trig для начала измерения, и замерить длину импульса на Echo, чтобы потом вычислить дистанцию по нехитрой формуле. Делаем. int echoPin = 2; int trigPin = 3; void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { int duration, cm; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); cm = duration / 58; Serial.print(cm); Serial.println(" cm"); delay(100); } Функция pulseIn замеряет длину положительного импульса на ноге echoPin в микросекундах. В программе мы записываем время полета звука в переменную duration. Как мы уже выяснили ранее, нам потребуется умножить время на скорость звука: s = duration * v = duration * 340 м/с Переводим скорость звука из м/с в см/мкс: s = duration * 0.034 м/мкс Для удобства преобразуем десятичную дробь в обыкновенную: s = duration * 1/29 = duration / 29 А теперь вспомним, что звук прошел два искомых расстояния: до цели и обратно. Поделим всё на 2: s = duration / 58 Теперь мы знаем откуда взялось число 58 в программе! Загружаем программу на Ардуино Уно и открываем монитор последовательного порта. Попробуем теперь наводить датчик на разные предметы и смотреть в мониторе рассчитанное расстояние.

Задания

Теперь, когда мы умеем вычислять расстояние с помощью дальномера, сделаем несколько полезных устройств.
  1. Строительный дальномер. Программа каждые 100мс измеряет расстояние с помощью дальномера и выводит результат на символьный ЖК дисплей. Для удобства полученное устройство можно поместить в небольшой корпус и запитать от батареек.
  2. Ультразвуковая трость. Напишем программу, которая будет «пищать» зуммером с различной частотой, в зависимости от измеренного расстояния. Например, если расстояние до препятствия более трех метров — зуммер издает звук раз в пол секунды. При расстоянии 1 метр — раз в 100мс. Менее 10см — пищит постоянно.

Заключение

Ультразвуковой дальномер — простой в использовании, дешевый и точный датчик, который отлично выполняет свою функцию на тысячах роботов. Как мы выяснили из урока, у датчика есть недостатки, которые следует учитывать при постройке робота. Хорошим решением может стать совместное использование ультразвукового дальномера в паре с лазерным. В таком случае, они будут нивелировать недостатки друг друга.