Дальномерный датчик

Дальномерный датчик Анемометр

Искать в каталоге
Искать в этой группе

В вашем проекте необходим простой дальномер с большим диапазоном измеряемых расстояний? Воспользуйтесь ультразвуковым дальномером HC-SR04.

Этот дальномер может служить прекрасным датчиком для робота, благодаря которому он сможет определять расстояния до объектов, объезжать препятствия, или строить карту помещения. Его можно также использовать в качестве датчика для сигнализации, срабатывающего при приближении объектов.

Дальномерный датчик

Дальномер Benewake TF02-Pro LiDAR

Датчик определения дистанции до 40 м по отражённому световому сигналу с герметичным корпусом

Дальномерный датчик

Дальномер Benewake TFmini Plus LIDAR

Миниатюрный датчик определения дистанции до 12 м по отражённому световому сигналу с герметичным корпусом

Дальномерный датчик

Дальномер Benewake TFmini-S LiDAR

Дальномерный датчик

Датчик приближения и освещённости

Лазерный дальномер для высокоточных измерений в диапазоне от 0 до 100 мм.

Дальномерный датчик

Инфракрасный дальномер Sharp GP2Y0A021 (10–80 см)

Датчик для определения расстояния 10–80 см по отражённому световому сигналу

Дальномерный датчик

Инфракрасный дальномер Sharp GP2Y0A02YK (20–150 см)

Датчик для определения расстояния 20–150 см по отражённому световому сигналу

Дальномерный датчик

Инфракрасный дальномер Sharp GP2Y0A41 (4–30 см)

Датчик для определения расстояния 4–30 см по отражённому световому сигналу

Дальномерный датчик

Инфракрасный датчик движения

Пироэлектрический сенсор для фиксирования движения тёплых объектов

Дальномерный датчик

Инфракрасный датчик движения (Troyka-модуль)

Пироэлектрический детектор тёплых объектов

Дальномерный датчик

Инфракрасный датчик движения (Zelo-модуль)

Пироэлектрический сенсор обнаружения тёплых объектов

Дальномерный датчик

Инфракрасный датчик препятствий

Простой сенсор с бинарным сигналом для определения препятствий на расстоянии от 3 до 80 см

Дальномерный датчик

Сенсорная кнопка (Troyka-модуль)

Ёмкостный датчик прикосновения со светодиодным индикатором

Дальномерный датчик

Ультразвуковой дальномер 4tronix Ultrasonic Breakout

Плата расширения с УЗ-дальномером HC-SR04P для роботов на платформе micro:bit

Дальномерный датчик

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

Cенсор для определения расстояния по отражённому звуковому сигналу

Дальномерный датчик

Ультразвуковой дальномер URM37

Сонар — сенсор для определения расстояния по отражённому звуковому сигналу

Измерители расстояния, дальномеры

0, 05-30 м10.15 ~ 8 м10.2 ~ 9 м1

от 0.03 до 402

Центральный офис / склад

Николая Ершова, 28

ул. Терешковой, 22А

Максима Горького, 65А

переулок 1905 года, 9

Измерители расстояния (дальномеры) – устройства, предназначенные для измерения расстояния до исследуемого объекта. Такие приборы получили широкое применение в геодезии, используются при наводке на резкость в фотоаппаратах, оружейных прицелах, системах бомбометания и т. д.

Принцип работы дальномеров следующий: устройство испускает специальный сигнал, который проходит расстояние до исследуемого объекта и обратно. Это расстояние зависит от времени, за которое сигнал пройдёт этот путь. При этом сигнал распространяется с установленной скоростью.

Посмотреть и купить товар вы можете в наших магазинах в городах: Москва, Санкт-Петербург, Архангельск, Астрахань, Барнаул, Белгород, Брянск, Владимир, Волгоград, Вологда, Воронеж, Екатеринбург, Иваново, Ижевск, Иркутск, Казань, Калуга, Кемерово, Киров, Кострома, Краснодар, Красноярск, Курган, Курск, Липецк, Набережные Челны, Нижний Новгород, Новосибирск, Омск, Орёл, Пенза, Пермь, Псков, Ростов-на-Дону, Рязань, Самара, Саранск, Саратов, Смоленск, Ставрополь, Тверь, Томск, Тула, Тюмень, Ульяновск, Уфа, Чебоксары, Челябинск, Ярославль.
Доставка в пункты выдачи заказов Pickpoint, СДЭК, Л-Пост, Boxberry, 5Post, транспортными компаниями DPD и «Деловые Линии», а также Почтой России в Тольятти, Хабаровск, Владивосток, Махачкала, Новокузнецк, Чебоксары, Калининград, Улан-Удэ, Сочи, Сургут, Нижний Тагил, Чита, Владикавказ, Грозный, Мурманск, Тамбов, Петрозаводск, Нижневартовск, Новороссийск, Йошкар-Ола и еще в более чем 1000 городов и населенных пунктов по всей России.

Товары из группы «Измерители расстояния, дальномеры» вы можете купить оптом и в розницу.

Датчики расстояния лазерные

Каталог промышленных оптических датчиков расстояния – лазерных дальномеров Balluff, Banner, IFM Electronic, Leuze Electronic, Pepperl+Fuchs, SICK с аналоговыми выходами 4-20 мА, 0-10 В или цифровыми интерфейсами на различные диапазоны измерения. Бесконтактное измерение расстояние – постоянно возникающая задача в современном производстве, решить ее помогут лазерные датчики расстояния, представленые в данном разделе каталога.

Промышленные лазерные датчики расстояния с аналоговым и цифровыми выходами являются популярным способом решения задач по бесконтактному позиционированию объектов на производстве и в складской логистике, точному измерению расстояния, определению габаритов и т.п. Наибольшее распространение получили триангуляционные лазерные дальномеры и лазерные датчики расстояния, работающие на принципе измерения времени пролета светового луча. Максимально высокое разрешение имеют триангуляционные лазерные датчики расстояния, однако, их применение ограничено небольшими диапазонами измерения и высокой стоимостью. Измерители, фунционирующие на принципе пролета луча, являются менее точными, но большие диапазоны измерения и разумная стоимость – их несомненные достоинства. Лазерные датчики расстояния могут работать с отражением от объекта измерения, так и с отражением от высокоотражающей пластины – рефлектора. Во втором случае, промышленные лазерные дальномеры имеют очень большие диапазоны измерения от нескольких десятков метров. Применение рефлектора позволяет получать стабильные результаты измерения. К преимуществам лазерных датчиков расстояния так же относят высокую скорость измерения и реакции, узкий луч и маленькое световое пятно, а так же большой выбор выходных сигналов и интерфейсов. Для заказа доступны лазерные оптические дальномеры с аналоговыми выходами 4-20 мА или 0-10 В, а так же с популярными цифровыми интерфейсами. В нашем каталоге лазерных датчиков расстояния мы подобрали наиболее современные модели от известных мировых производителей, таких как Balluff, Banner Engineering, Datalogic, Leuze Electronic, IFM Electronic, Pepperl + Fuchs, SICK. Селектор и подробные описания позволяют выбрать и купить лазерный датчик расстояния подходящий под конкретную задачу.

Теги: Датчики расстояния SICK / Датчики расстояния Balluff / Датчики расстояния Banner / Датчики расстояния IFM Electronic / Датчики расстояния Leuze Electronic / Датчики расстояния Pepperl+Fuchs

Датчики расстояния ультразвуковые

Каталог промышленных ультразвуковых датчиков расстояния – ультразвуковых дальномеров с аналоговыми 4-20 мА, 0-10 В и дискретными PNP/NPN  на различные диапазоны измерения от известных европейских производителей Balluff, IFM Electronic, Pepperl+Fuchs, EGE-Elektronik, SICK, Banner Engineering и бесконтактных ультразвуковых выключателей – ВБУ российского производителя СЕНСОР. Цилиндрические и прямоугольные корпуса для интеграции в разнообразные задачи по автоматизации на современном производстве, в логистических и технологических процессах.

Ультразвуковые датчики расстояния довольно популярны для решения задач по автоматизации различных процессов на производстве. В отличие от оптических дальномеров, ультразвуковые сенсоры имеют значительно меньшие диапазоны измерения, невысокую скорость и большое по площади пятно измерения. Однако, имеются плюсы, например, нечувствительность к цвету поверхности, высокое разрешение, уверенная работа в условиях запыленности или влажности, широкий температурный диапазон эксплуатации. Кроме того, ультразвуковые датчики расстояния часто имеют меньшую стоимость по сравнению с лазерными дальномерами на схожие диапазоны. В качестве выходного сигнала у ультразвуковых датчиков может быть аналоговый 4-20 мА или 0-10 В пропорциональный расстоянию до объекта измерения, или дискретный PNP/NPN для контроля порогового значения расстояния. Доступны для заказа так же модели с одной или двумя точками переключения на заданных расстояниях, аналогично оптическим диффузионным датчикам с подавлением заднего фона – бесконтактные ультразвуковые выключатели (сенсоры ВБУ). Следует отметить большую популярность ультразвуковых дальномеров для использования в качестве уровнемеров жидких или сыпучих веществ на производстве для открытых и закрытых емкостей без избыточного давления, ведь использование ультразвукового датчика с аналоговым выходом 4-20 мА или 0-10 В для решения данной задачи позволяет прилично съэкономить. В нашем каталоге представлен широкий ассортимент высококачественных ультразвуковых датчиков расстояния в самых различных исполнениях от ведущих производителей. Рекомендуем обратить внимание на ультразвуковые датчики Pepperl+Fuchs (у данного производителя самая большая линейка на рынке). Так же правильным выбором для автоматизации на производстве будут ультразвуковые датчики расстояния Balluff, Banner, Datalogic, EGE-Elektronik, IFM Electronic, SICK, Turck и российского СЕНСОР серии ВБУ.

Теги: ультразвуковые датчики pepperl fuchs / датчики вбу

Реверс-инжиниринг лазерного датчика расстояния

Время на прочтение

Дальномерный датчик

Однажды ко мне попал нерабочий лазерный датчик расстояния Keyence LK-G407. Мало того, что он был нерабочий, так его еще и нельзя было использовать без специального управляющего блока. Но ведь у датчика такие интересные характеристики: измерение расстояния с точностью до единиц микрон, и скорость работы — 50 килоизмерений/с. Так что, чтобы запустить его, придется заметно поковыряться в самом датчике, заодно и ценный опыт получить.

Что же находится внутри датчика?

Оптическая часть датчика показана на фотографии ниже:

Слева на фотографии — лазерный модуль, за ним — светочувтвительная линейка, справа — объектив и зеркало.
Из конструкции становится понятно, что этот датчик можно отнести к классу лазерных дальномеров с триангуляционным методом измерения расстояния. Принцип работы таких дальномеров хорошо описан здесь. В принципе, он довольно прост — при изменении расстояния до объекта, на который светит лазер, меняется угол между объективом дальномера и пятном лазера. Если в фокальной плоскости объектива установить светочувствительную линейку или матрицу, то можно определить этот угол по положению максимума выходного сигнала. Зная угол и расстояние между лазером и объективом, можно определить расстояние до объекта.
Достоинствами такого метода является очень большая точность на небольших расстояниях — при определенных условиях она может быть лучше 0.1 мкм!
Так же не проблема измерять расстояние с большой скоростью — нужно только использовать высокоскоростную светочувствительную линейку.
Схемотехника такого дальномера тоже достаточная простая — за счет того, что в устройстве нет больших частот, а первичное усиление сигнала идет в самой линейке.
Но есть и недостаток — точность метода резко падает при увеличении расстояния.
В этом датчике использован длиннофокусный объектив (фокусное расстояние около 150 мм), поэтому, для уменьшения габаритов датчика в его состав входит зеркало.

Ключевой элемент всей конструкции — светочувствительная линейка. Эта линейка — явно заказная. Под микроскопом на одном из ее краев видна надпись:
25-512
LI004-02
Я предположил, что 512 — число пикселей линейки, а 25 — ширина пикселя в микронах. Как выяснилось позже, я оказался прав.
Сзади к линейке припаяна небольшая плата:

На ней расположен операционный усилитель, увеличивающий сигнал с линейки в 2 раза и несколько резисторов и конденсаторов. Эта плата подключается к разъему P1. Как видно из схемы, к линейке идут всего 3 сигнальных линии. Одна из них — явно аналоговый сигнал с ее выхода (он передается по отдельному коаксиальному проводу). Оставшиеся две линии — цифровые, и используются для управления линейкой. При анализе схемы мне опять повезло — при подаче напряжения на схему на одной из этих линий (4) появляется частота 10 МГц. Сразу стало понятно, что эта линия отвечает за тактирование линейки. Очевидно, что все управление линейкой идет по оставшейся линии (3). Я подключил линейку к микроконтроллеру STM32F4, и начал подавать на линии (3) и (4) различные сигналы. Как оказалось, работает линейка довольно просто — пока на линии (3) присутствует высокий уровень, идет экспозиция — линейка принимает свет. После установки на линии (3) низкого уровня нужно подать на линейку 14 тактовых импульсов, после чего на последующие 512 тактовых импульсов она будет выдавать аналоговый сигнал. Линейка работает от напряжения 5В, а FPGA — от 3.3В, и поэтому для согласования уровней используется микросхема DD2.

Про анемометры:  Техническая вода для котельной

Аналоговый сигнал с линейки передается через ФНЧ на повторитель, собранный на микросхеме DA1. Далее сигнал подается на PGA — усилитель с программируемым усилением AD8369. Максимальное усиление этой микросхемы — 40 дБ, и его можно регулировать программно, устанавливая нужной код на ее входах BIT0-3. Эта микросхема предназначена для усиления дифференциального сигнала, и выход у нее тоже дифференциальный, так что далее оба ее выхода заведены на операционный усилитель DA4, усиливающий сигнал в 2 раза, и формирующий одиночный сигнал.
Далее аналоговый сигнал подается на вход 10-битного АЦП AD9200. Эта микросхема уже была знакома мне по SDR приемнику. В данном случае она подключена так, что диапазон оцифровываемых ею напряжений — (0,5-2,5) В. Оцифрованный сигнал с выхода АЦП передается на FPGA.
Стоит обратить внимание на вход CLAMP этого АЦП. Этот вход также управляется FPGA. Он предназначен для приведения постоянной составляющей входного сигнала к определенному уровню.
Вот схема входного каскада АЦП из даташита:

Дальномерный датчик

При подаче высокого уровня на вход CLAMP на выходе усилителя и на AIN появляется напряжение, равное напряжению на входе «CLAMP IN».
В таком случае конденсатор CIN будет заряжаться до тех пор, пока напряжение на нем не станет равным (Uвх — Uclamp_in). После этого на входе CLAMP устанавливают низкий уровень, и усилитель перестает как-либо влиять на работу АЦП. В данном датчике вход «CLAMP IN» подключен к нижнему опорному напряжению АЦП +0,5В. Таким образом, если на выходе DA4 будет присутствовать некая постоянная составляющая, то за счет использования функции CLAMP можно устранить ее влияние на результат работы АЦП.
После того, как были написаны первые тестовые конфигурации для FPGA, оказалось, что управлять сигналом CLAMP действительно нужно, иначе сигнал с АЦП имеет очень большую постоянную составляющую. В своей реализации я просто подавал на него 1 в то время, пока не идет захват данных при помощи АЦП.

Из схемы видно, что в ней используется большое число питающих напряжений. Я не стал рисовать схемы различных источников питания, входящих в датчик и различные сглаживающие конденсаторы. Как оказалось, выводы питания (они выведены на отдельный разъем с 2 выводами) соединяются с DC-DC преобразователем TPS62050. Максимальное напряжение для него — 10В, от 6В электроника еще не запускалась, так что я решил, что рабочее напряжение датчика — 8В.

Лазерный диод, использованный в этом модуле, управляется электроникой, установленной на отдельной платке:

Схему этой платы я рисовать не стал. К главной плате она подключается через разъем P3. Как видно, управление лазером идет по двум линиям. Одна из них (3) подключена к FPGA через инвертор, и отвечает за включение лазера — он включается низким уровнем на выходе FPGA. Другая линия (4) нужна для регулирования мощности лазера. Это аналоговая линия, и для изменения напряжения на ней с состав схемы входит ЦАП, собранный на микросхемах DA5-7 (я так и не понял, почему разработчики нагородили такую запутанную схему, а не взяли готовую микросхему ЦАП).

Как известно, большинство FPGA не содержат энергонезависимой памяти, соответственно, конфигурация FPGA должна храниться во внешней микросхеме. В данном случае это DD3 XCF01 — специализированная микросхема Flash-памяти. При включении FPGA автоматически считывает конфигурацию из нее в свою память. Сама FPGA и XCF01 соединены в JTAG-цепь, которая подключена к разъему P2. В результате через этот разъем можно внутрисхемно программировать XCF01, конфигурировать FPGA и вести отладку.

Таким образом я разобрался в принципе работы электроники датчика, и у меня появилась часть его схемы. Теперь можно приступать к экспериментам, т.е. программированию ПЛИС. Стоит заметить, что до этого я не имел дела с ПЛИС производства Xilinx. Нужного программатора у меня тоже не было, так что пришлось сделать его самому, путем объединения нескольких OpenSource проектов.
Программатор нормально заработал, и мне удалось запустить на ПЛИС простые проекты — простое переключение выводов ПЛИС. Однако в дальнейшем мне нужна была связь с компьютером. С интерфейсом LVDS связываться я не захотел (у порта, на который заведены линии LVDS напряжение питания 2.5В), так что я просто перерезал две дорожки, соединяющие ПЛИС и ASIC. На плате был разъем, судя по всему предназначенный для настройки или тестирования ASIC, его я использовать не мог, поэтому также перерезал две дорожки, идущие к нему, и соединил выводы разъема с выводами ПЛИС. Теперь к этому разъему можно подключать переходник USB-UART.
Вид платы после доработки:

После этого я написал простую программу для проверки работы UART. Она заработала — компьютер правильно принимал одиночные байты, передаваемые по UART c ПЛИС. Следующий этап — передача данных с светочувствительной линейки на компьютер. Я использовал такую структурную схему программы FPGA:

Вид схемы в ISE:

Top-level проекта нарисован в схемном редакторе, а все входящие в него модули написаны на Veriolg. Принцип работы проекта достаточно прост — данные с линейки, оцифрованные АЦП, захватываются ПЛИС и сохраняются в ОЗУ. После того, как все 512 элементов сигнала захвачены, они передаются по UART на компьютер. После того, как все данные переданы, цикл повторяется. Модуль «sensor_reader» в данном проекте управляет линейкой, лазером и сигналом CLAMP. Управление реализовано простейшим образом — всеми сигналами управляет счетчик тактовых импульсов. Модуль «tx_controller» включает в себя модуль передатчика UART. Он предназначен для передачи данных, которые модуль получает из внешней памяти.
В процессе работы уровень полезного сигнала на линейке может сильно меняться — из-за изменения расстояния до объекта и изменения его коэффициента отражения. При слишком маленьком сигнале измерения становятся невозможными, а при слишком большом сильно падает точность измерения. Из-за этого усиление аналогового сигнала нужно регулировать. Изначально проект в проект входил модуль UART-приемника, который позволял вручную изменять усиление, позже я его убрал и сделал автоматическую регулировку усиления — AGC.
Она включает в себя модуль поиска максимума сигнала («max_finder») и сам модуль AGC («agc_module»). Этот модуль тоже достаточно простой — если уровень сигнала меньше 170, то усиление увеличивается, если больше 250 — уменьшается.
Все модули, линейка и АЦП тактируются от частоты 10 МГц. Время экспозиции я сделал равным 5 мкс. Таким образом, весь процесс экспозиции и захват сигнала в ПЛИС занимают (5+51) мкс. Время передачи данных намного больше — при тактовой частоте 500000 бит/сек передача 512 байт занимает 10 мс, что дает 100 измерений в секунду.

В результате была разработана программа для ПЛИС с такой структурной схемой:

Вид схемы в ISE:

Как видно, часть модулей взяты из предыдущего проекта.
В данном случае вычислением положения центра тяжести (центроида) сигнала занимается модуль «centroid_finder». Для того, чтобы ограничить область анализа данных, в модуль передается грубое значение положение максимума и его амплитуда.
Так как эти величины можно вычислить, только проанализировав весь сигнал (то есть они появляются с задержкой в 512 тактовых импульсов), то получается, что оцифрованные данные нужно подавать на вход «centroid_finder» с этой же задержкой. Для того, чтобы задержать данные на 512 тактов, используется буфер FIFO. Для первоначального заполнения FIFO используется модуль «fifo_logic» — он запрещает чтение из FIFO, если он не заполнен.
Модуль «tx_controller_3bytes» последовательно передает 3 байта, первый из них — нулевой, оставшиеся два содержат вычисленное положение центра тяжести. На скорости 50000 bit/s передача 3 байт занимает 60 мкс -практически столько же, как и захват сигнала. Нулевой байт используется для синхронизации данных — после него всегда идет старший байт.
Передача данных по UART и захват данных запускаются одновременно сигналом «start_capture». Этот сигнал формируется, если одновременно закончилась предыдущая передача и вычислено новое положение центра тяжести. В результате время измерения расстояния и передачи данных оказывается близким к 60 мкс, что дает скорость измерения координат — 16,6 KSPS. Это меньше, чем заявлено у производителя датчика. Там указывается минимальное время измерения — 20 мкс (это соответствует 50 KSPS), хотя непонятно как получено это время, ведь даже при максимальной скорости работы AD9200 — 20 MSPS время захвата сигнала с 512 пикселей будет — 25,6 мкс. А это ведь еще без учета времени экспозиции.

Как я уже говорил ранее, этот датчик не работал. Насколько мне известно, проблема была в том, что он был установлен на сильно вибрирующей промышленной установке, и из-за вибрации лазер датчика вышел из строя (датчик перестал реагировать на темные поверхности).
К сожалению, на родном диоде маркировки не было. Я пробовал заменить лазерный диод в лазерном модуле на купленный 5 мВт лазерный диод, но через некоторое время его интенсивность упала. Скорее всего, электроника лазерного модуля была рассчитана на более мощный диод (хоть и работающий в импульсном режиме, за счет чего средний уровень излучения получается достаточно низким).
Для того, чтобы хоть как-то запустить датчик, я сделал свой драйвер лазерного диода, работающий в режиме постоянного излучения:

Дальномерный датчик

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

Дальномерный датчик

Дальномерный датчик

Расстояние измеряется до пластинки, закрепленной на торце энкодера.
После того, как все данные собраны, можно провести регрессионный анализ в Mathcad.
В результате у меня получилось такое выражение:
value_mm = 70.0 / Tan(-0.000277757*max_pos + 0.28355) — 366.23554
Очевидно, что значения констант в выражении от положения деталей датчика. Малейший сдвиг деталей приведет к тому, что вычисленное значение расстояния будет неверным. Поэтому все детали должны быть очень прочно закреплены.

На видео ниже показано, как можно обрабатывать данные с датчика:

В первой части видео показано, как выглядит сигнал со светочувствительной линейки. Хорошо видно, что на если объект темный, то амплитуда не изменяется (за счет работы АРУ), но уровень шумов сильно возрастает.
Во второй части видео программа принимает от датчика положение центра тяжести, и пересчитывает его в расстояние. Также в программу передается значение расстояния до объекта, полученное от энкодера. Под расстоянием энкодера выводится разность между этими расстояниями. Можно видеть, что в при движении разность становится больше 1мм (это связано с задержками при передаче расстояний и их отображении), но по время остановок при любом расстоянии разность не превышает 0.03 мм.

Для того, чтобы полученные с датчика данные было проще анализировать, я написал программу, сохраняющую данные, принятые от датчика в формат wav. Такие файлы можно открывать в звуковых редакторах, и применять к ним различные фильтры.
Вот например, как выглядит сигнал с датчика, который был направлен на стенку трансформаторного блока питания:

Про анемометры:  Во время работы используются автоматизированные системы

Дальномерный датчик

Видно, как при включении блок питания начал вибрировать.
Я пробовал направлять датчик на диффузор динамика, на котором воспроизводится музыка — и после обработки в звуковом редакторе ее действительно было слышно.

Таим образом, мне удалось дать нерабочему датчику новую жизнь (он может понадобится мне в будущих проектах), и заодно получить опыт работы с ПЛИС Xilinx.

Проекты для FPGA

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

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

В отличие от инфракрасных дальномеров, на показания ультразвукового дальномера не влияют засветки от солнца или цвет объекта. Даже прозрачная поверхность будет для него препятствием. Но могут возникнуть трудности с определением расстояния до пушистых или очень тонких предметов. Поэтому высокотехнологичную котоловку выполнить на нём будет затруднительно.

В отличие от ультразвукового дальномера URM37, этот дальномер не обладает таким большим выбором интерфейсов и режимов работы. Но этот «недостаток» компенсируется простотой работы с ним. Если вы планируете использовать его с Arduino вы можете воспользоваться существующими библиотеками:

Подключение к Arduino

Контакты датчика можно соединить с макетной платой или Arduino проводами «мама-папа». А с Troyka Shield через провода «мама-мама».

Самодельный сканирующий лазерный дальномер

Дальномерный датчик

В этой статье я расскажу о том, как я делал самодельный лазерный сканирующий дальномер, использующий триангуляционный принцип измерения расстояния, и об опыте его использования на роботе.

Зачем нужен сканирующий дальномер?

На сегодняшний день в робототехнике не так уж и много методов навигации внутри помещений. Определение положения робота в пространстве с использованием лазерного сканера — один из них. Важное достоинство этого метода — он не требует установки в помещении каких-либо маяков. В отличие от систем, использующих распознавание изображения с камер, обработка данных с дальномера не так ресурсоемка. Но есть и недостаток — сложность, и соответственно, цена дальномера.
Традиционно в робототехнике используются лазерные сканеры, использующие фазовый или времяпролетный принцип для измерения расстояния до объектов. Реализация этих принципов требует довольно сложной схемотехники и дорогих деталей, хотя и характеристики при этом получаются приличные — используя эти принципы, можно добиться высокой скорости сканирования и большой дальности измерения расстояния.
Но для домашних экспериментов в робототехнике такие сканеры мало подходят — цена на них начинаются от 1000$.
На помощь приходят дальномеры, использующие триангуляционный принцип измерения расстояния. Дальномер такого типа впервые появился в роботах-пылесосах Neato:

Дальномерный датчик

Довольно быстро любители расшифровали протокол этого дальномера, и начали использовать его в своих проектах. Сами дальномеры в качестве запчастей появились на ebay в небольших количествах по цене около 100$. Через несколько лет китайская компания смогла выпустить сканирующий дальномер RPLIDAR, который поставлялся как полноценный прибор, а не запчасть. Только цена этих дальномеров оказалась достаточно высокой — 400$.

Самодельный дальномер

Как только я узнал о дальномерах Neato, мне захотелось собрать самому аналогичный. В конце концов, мне это удалось, и процесс сборки я описал на Робофоруме.
Первая версия дальномера:

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

Устройство сканирующего триангуляционного лазерного дальномера

Принцип измерения расстояния до объекта основан на измерении угла между лазерным лучом, попадающим на объект, и объективом дальномера. Зная расстояние лазер-объектив (h) и измеренный угол, можно вычислить расстояние до объекта — чем меньше угол, тем больше расстояние.
Принцип хорошо иллюстрирует картинка из статьи:

Таким образом, ключевые оптические компоненты такого дальномера — лазер, объектив и фотоприемная линейка.
Так как дальномер сканирующий, то все эти детали, а так же управляющая электроника устанавливаются на вращающейся головке.
Тут может возникнуть вопрос — зачем нужно вращать оптику и электронику, ведь можно установить вращающееся зеркало? Проблема в том, что точность дальномера зависит от расстояния между объективом и лазером (базового расстояния), так что оно должно быть достаточно большим. Соответственно, для кругового сканирования понадобится зеркало диаметром, большим базового расстояния. Дальномер с таким зеркалом получается достаточно громоздким.
Сканирующая головка дальномера при помощи подшипника закрепляется на неподвижном основании. На нем же закрепляется двигатель, вращающий головку. Также в состав дальномера должен входить энкодер, предназначенный для получения информации о положении головки.
Как видно, дальномеры Neato, RPLIDAR и мои самодельные сделаны именно по этой схеме.

Самое сложное в самодельном дальномере — изготовление механической части. Именно ее работа вызывала у меня больше всего нареканий в ранних версиях дальномера. Сложность заключается в изготовлении сканирующей головки, которая должна быть прочно закреплена на подшипнике, вращаться без биений и при этом не нее нужно каким-то образом передавать электрические сигналы.
Во второй версии дальномера первые две проблемы я решил, использовав части старого HDD — сам диск использовался как основание сканирующей головки, а двигатель, на котором он закреплен, уже содержал качественные подшипники. В то же время, при этом возникла третья проблема — электрические линии можно было провести только через небольшое отверстие в оси двигателя. Мне удалось сделать самодельный щеточный узел на 3 линии, закрепленный в этом отверстии, но получившаяся конструкция получилась шумной и ненадежной. При этом возникла еще одна проблема — линии, чтобы пробросить сигнал энкодера, не было, и датчик энкодера в такой конструкции должен быть установлен на головке, а диск энкодера с метками — на неподвижном основании. Диск энкодера получился не жестким, и это часто вызывало проблемы.
Фотография второй версии дальномера:

Дальномерный датчик

Еще один недостаток получившегося дальномера — низкая скорость сканирования и сильное падение точности на расстояниях больше 3м.
Именно эти недостатки я решил устранить в третьей версии дальномера.

Электроника

В принципе, электронная часть триангуляционного дальномера достаточно проста и содержит всего два ключевых компонента -светочувствительную линейку и микроконтроллер. Если с выбором контроллера проблем нет, то с линейкой все значительно сложнее. Светочувствительная линейка, используемая в подобном дальномере, должна одновременно иметь достаточно высокую световую чувствительность, позволять считывать сигнал с высокой скоростью и иметь маленькие габариты. Различные CCD линейки, применяемые в бытовых сканерах, обычно довольно длинные. Линейки, используемые в сканерах штрихкодов — тоже не самые короткие и быстрые.
В первой и второй версии дальномера я использовал линейки TSL1401 и ее аналог iC-LF1401. Эти линейки хорошо подходят по размеру, они дешевые, но содержат всего 128 пикселей. Для точного измерения расстояния до 3 метров этого мало, и спасает только возможность субпискельного анализа изображения.
В третьей версии дальномера я решил использовать линейку ELIS-1024:

Дальномерный датчик

Однако купить ее оказалось непросто. У основных поставщиков электроники этих линеек просто нет.
Первая линейка, которую я смог купить на Taobao, оказалась нерабочей. Второю я купил на Aliexpress (за 18$), она оказалась рабочей. Обе линейки выглядели паянными — обе имели облуженные контакты и, судя по маркировке, были изготовлены в 2007 году. Причем даже на фотографиях у большинства китайских продавцов линейки именно такие. Похоже, что действительно новую линейку ELIS-1024 можно купить только напрямую у производителя.
Светочувствительная линейка ELIS-1024, как следует из названия, содержит 1024 пикселя. Она имеет аналоговый выход, и достаточно просто управляется.
Еще более хорошими характеристиками обладает линейка DLIS-2K. При сходных размерах, она содержит 2048 пикселей и имеет цифровой выход. Насколько мне известно, именно она используется в дальномере Neato, и возможно, в RPLIDAR. Однако, найти ее в свободной продаже очень сложно, даже в китайских магазинах она появляется не часто и дорого стоит — более 50$.

Так как я решил использовать линейку с аналоговым выходом сигнала, то микроконтроллер дальномера должен содержать достаточно быстрый АЦП. Поэтому я решил использовать серию контроллеров — STM32F303, которые, при относительно небольшой стоимости, имеют несколько быстрых АЦП, способных работать одновременно.
В результате у меня получилась такая схема:

Сигнал с линейки (вывод 10) имеет достаточно высокий уровень постоянной составляющей, и ее приходится отфильтровывать при помощи разделительного конденсатора.
Далее сигнал нужно усилить — для этого используется операционный усилитель AD8061. Далеко расположенные объекты дают достаточно слабый сигнал, так что пришлось установить коэффициент усиления равным 100.
Как оказалось в результате экспериментов, даже при отсутствии сигнала, на выходе выбранного ОУ по какой-то причине постоянно присутствует напряжение около 1.5В, что мешает обработке результатов и ухудшает точность измерения амплитуды сигнала. Для того, чтобы избавится от этого смещения, мне пришлось подать дополнительное напряжение на инвертирующий вход ОУ.

Плату разводил двухстороннюю, сделать такую плату в домашних условиях качественно довольно сложно, так что заказал изготовление плат в Китае (пришлось заказать сразу 10 штук):

Дальномерный датчик

В этом дальномере я использовал дешевый объектив с резьбой M12, имеющий фокусное расстояние 16мм. Объектив закреплен на печатной плате при помощи готового держателя объектива (такие используются в различных камерах).
Лазер в данном дальномере — инфракрасный (780 нм) лазерный модуль, мощностью 3.5 мВт.
Изначально я предполагал, что излучение лазера нужно будет модулировать, но позже оказалось, что с используемой линейкой в этом нет смысла, и поэтому сейчас лазер включен постоянно.
Для проверки работоспособности электроники была собрана вот такая конструкция, имитирующая сканирующую головку дальномера:

Дальномерный датчик

Уже в таком виде можно было проверить, какую точность измерения расстояния позволяет обеспечить дальномер.
Для анализа сигнала, формируемого линейкой, были написаны тестовые программы для микроконтроллера и ПК.
Пример вида сигнала с линейки (объект на расстоянии 3 м).

Дальномерный датчик

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

Механическая часть

После того, как электроника была отлажена, настало время изготовить механическую часть.
В этот раз я не стал связываться с механикой из HDD, и решил изготовить механические детали из жидкого пластика, заливаемого в силиконовую форму. Эта технология подробно описана в Интернете, в том числе и на Гиктаймс.
Уже после того, как я изготовил детали, стало понятно, что изготовить детали на 3D принтере было бы проще, они могли выйти тверже, и возможно, можно было бы сделать одну деталь вместо двух. Доступа к 3D принтеру у меня нет, так что пришлось бы заказывать изготовление детали в какой-либо компании.
Фото одной из деталей сканирующей головки дальномера:

Дальномерный датчик

Эта деталь является основой головки. Она состоит из втулки, на которую позже надевается подшипник, и диска. Диск предназначен для крепления второй детали башни, кроме того, на него снизу наклеивается диск энкодера.
Втулка и диск содержат сквозное отверстие, в которое вставляется покупной щеточный узел на 6 линий — его видно на фотографии. Именно те провода, что видны на фотографии, могут вращаться относительно корпуса этого узла. Для повышения стабильности работы для передачи сигналов GND и UART TX используется 2 пары линий щеток. Оставшиеся 2 линии используются для передачи напряжения питания и сигнала энкодера.

Про анемометры:  Обзор Windscribe. VPN и блокировщик рекламы в одном флаконе

Силиконовая форма для отливки этой детали:

Дальномерный датчик

Вторая деталь сканирующей головки была изготовлена тем же способом. Она предназначена для крепления печатной платы и лазера к диску. К сожалению, фотографий изготовления этой детали у меня не сохранилось, так что ее можно увидеть только в составе дальномера.

Для крепления сканирующей головки к основанию дальномера используется шариковый подшипник. Я использовал дешевый китайский подшипник 6806ZZ. Честно говоря, качество подшипника мне не понравилось — ось его внутренней втулки могла отклонятся относительно оси внешней на небольшой угол, из-за чего головка дальномера тоже немного наклоняется. Крепление подшипника к детали с диском и основанию будет показано ниже.

Основание я сделал из прозрачного оргстекла толщиной 5 мм. К основанию крепится подшипник, датчик энкодера, двигатель дальномера и маленькая печатная плата. Само основание устанавливается на любую подходящую поверхность при помощи стоек.
Вот так выглядит основание дальномера снизу:

Печатная плата содержит регулируемый линейный стабилизатор напряжения для питания двигателя, и площадки для подключения проводов узла щеток. Сюда же подводится питание дальномера.
Как и в других дальномерах, двигатель вращает сканирующую головку при помощи пассика. Для того, чтобы он не сваливался с втулки, на ней имеется специальное углубление.
Как видно из фотографии, подшипник закреплен в основании при помощи трех винтов. На сканирующей головке подшипник удерживается за счет выступа на втулке и прижимается к ней другими винтами, одновременно удерживающими щеточный узел.

Энкодер состоит из бумажного диска с напечатанными рисками и оптопары с фототранзистором, работающей на отражение. Оптопара закреплена при помощи стойки на основании так, что плоскость диска оказывается рядом с ней:

Дальномерный датчик

Сигнал от оптопары через щетки передается на вход компаратора микроконтроллера. В качестве источника опорного напряжения для компаратора выступает ЦАП микроконтроллера.
Для того, чтобы дальномер мог определить положение нулевого угла, на диск энкодера нанесена длинная риска, отмечающая нулевое положение головки (она видна справа на фотографии выше).

Вот так выглядит собранный дальномер:

Вид сверху:

Разъем сзади дальномера используется для прошивки микроконтроллера.
Для балансировки сканирующей головки на нее спереди устанавливается крупная гайка — она практически полностью устраняет вибрацию при вращении головки.

Собранный дальномер нужно отюстировать — установить лазер в такое положение, чтобы отраженный от объектов свет попадал на фотоприемную линейку. Обе пластмассовые детали содержат соосные отверстия, располагающиеся под пазом лазера. В отверстия вворачиваются регулировочные винты, упирающиеся в корпус лазера. Поворачивая эти винты, можно изменять наклон лазера.
Наблюдая в программе на компьютере форму и амплитуду принятого сигнала и изменяя наклон лазера, нужно добиться максимальной амплитуды сигнала.
Также триангуляционные дальномеры требуют проведения калибровки, о чем я писал ранее:

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

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

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

Эволюция самодельных дальномеров:

Дальномерный датчик

Габаритные размеры получившегося дальномера:
Размер основания: 88×110 мм.
Общая высота дальномера: 65 мм (может быть уменьшена до 55 при уменьшении высоты стоек).
Диаметр сканирующей головки: 80 мм (как у mini-CD диска).

Как и у любого другого триангуляционного дальномера, точность измерения расстояния этого дальномера резко падает с ростом расстояния.
При измерениях расстояния до объекта с коэффициентом отражения около 0.7 у меня получились примерно такие точностные характеристики:

Стоимость изготовления дальномера:

В первой колонке — во сколько дальномер обошелся мне, во второй — сколько он мог бы стоить при промышленном изготовлении (оценка очень приблизительная).

Программная часть дальномера

Перед написанием программы нужно рассчитать тактовую частоту, на которой будет работать фотоприемная линейка.
В старых версиях дальномера частота сканирования была ограничена 3 Гц, в новом дальномере я решил сделать ее выше — 6Гц (это учитывалось при выборе линейки). Дальномер делает 360 измерений на один оборот, так что при указанной скорости он должен быть способен производить 2160 измерений в секунду, то есть одно измерение должно занимать менее 460 мкс. Каждое измерение состоит из двух этапов — экспозиция (накопление света линейкой) и считывание данных с линейки. Чем быстрее будет произведено считывание сигнала, тем длиннее может быть время экспозиции, а значит, и тем больше будет амплитуда сигнала. При тактовой частоте линейки 8 МГц время считывания 1024 пикселей будет составлять 128 мкс, при 6 МГц — 170 мкс.

При тактовой частоте микроконтроллера серии STM32F303 в 72 МГц максимальная частота выборок АЦП — 6 MSPS (при разрядности преобразования 10 бит). Так как я хотел проверить работу дальномера при тактовой частоте линейки 8 МГц, я решил использовать режим работы АЦП, в котором два АЦП работают одновременно (Dual ADC mode — Interleaved mode). В этом режиме по сигналу от внешнего источника начала запускается ADC1, а затем, через настраиваемое время, ADC2:

Дальномерный датчик

Как видно из диаграммы, суммарная частота выборок АЦП в два раза выше, чем частота триггера (в данном случае это сигнал от таймера TIM1).
При этом TIM1 также должен формировать сигнал тактовой частоты для фотоприемной линейки, синхронный с выборками АЦП.
Чтобы получить с одного таймера два сигнала с частотами, различающимися в два раза, можно переключить один из каналов таймера в режим TIM_OCMode_Toggle, а второй канал должен формировать обычный ШИМ сигнал.

Структурная схема программы дальномера:

Ключевой частью программы является именно захват данных с линейки и управление ей. Как видно из схемы, этот процесс идет на аппаратном уровне, за счет совместной работы TIM1, ADC1/2 и DMA. Для того, чтобы время экспозиции линейки было постоянным, используется таймер TIM17, работающий в режиме Single Pulse.

Таймер TIM3 генерирует прерывания при срабатывании компаратора, соединенного с энкодером. За счет этого рассчитывается период вращения сканирующей головки дальномера и ее положение. По полученному периоду вращения рассчитывается период таймера TIM16 таким образом, чтобы он формировал прерывания при повороте головки на 1 градус. Именно эти прерывания служат для запуска экспозиции линейки.

После того, как DMA передаст все 1024 значения, захваченные ADC, в память контроллера, программа начинает анализ эти данных: сначала производится поиск положения максимума сигнала с точностью до пикселя, затем, при помощи алгоритма поиска центра тяжести — с более высокой точностью (0.1 пикселя). Полученное значение сохраняется в массив результатов. После того, как сканирующая головка сделает полный оборот, в момент прохождения нуля этот массив предаются в модуль UART при помощи еще одного канала DMA.

Использование дальномера

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

Дальномерный датчик

Дальномерный датчик

Для управления роботом и анализа данных от дальномера я использую ROS.
Данные от дальномера обрабатываются специальным ROS-драйвером (основанном на драйвере дальномера Neato), который получает по UART данные от дальномера, пересчитывает их в расстояния до объектов (используя данные калибровки) и публикует их в стандартном формате ROS.
Вот так выглядит полученная информация в rviz (программа для визуализации данных ROS), робот установлен на полу:

Дальномерный датчик

Длина стороны клетки — 1 метр.

После того, как данные попали в ROS, их можно обрабатывать, используя уже готовые пакеты программ. Для того, чтобы построить карту квартиры, я использовал hector_slam. Для справки: SLAM — метод одновременного построения карты местности и определения положения робота на ней.
Пример получившейся карты квартиры (форма несколько необычна, потому что дальномер “видит” мебель, а не стены, и не все комнаты показаны):

ROS позволяет объединять несколько программ (“узлов” в терминологии ROS), работающих на разных компьютерах, в единую систему. Благодаря этому, на Orange Pi можно запускать только ROS-драйверы Roomba и дальномера, а анализ данных и управление роботом вести с другого компьютера. При этом эксперименты показали, что hector_slam нормально работает и на Orange Pi, приемлемо загружая процессор, так что вполне реально организовать полностью автономную работу робота.

Система SLAM благодаря данным от дальномера позволяет роботу определять свое положение в пространстве. Используя данные о положении робота и построенную карту, можно организовать навигационную систему, позволяющую “направить” робота в указанную точку на карте. ROS содержит в себе пакет программ для решения этой задачи, но, к сожалению, я так и не смог заставить его качественно работать.

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

Более подробное видео построения карты при помощи hector_slam:

Исходные коды программы контроллера

P. S. Также у меня есть проект более простого лидара.

Датчики положения (расстояния)

Alliance Sensors Group34

Датчики положения (расстояния) – устройства, с помощью которых определяют расстояние до определённого неконтролируемого объекта.

Они начинают работать при обнаружении объекта в их рабочей зоне и выключаются при его отсутствии. Они преимущественно работают на фронтальном дизайне (по оси Х), но некоторые модели реагируют на объекты, появляющиеся по осям У и Z.

Работа основана на оптической (лазерной, ИК), ультразвуковой или радарной технологиях. Принцип вычисления положения объекта и расстояния до него основан на определении времени полёта лучей и лазерной триангуляции.

Товары из группы «Датчики положения (расстояния)» вы можете купить оптом и в розницу.

Характеристики

  • Напряжение питания: 5 В
  • Потребление в режиме тишины: 2 мА
  • Потребление при работе: 15 мА
  • Диапазон расстояний: 2–400 см
  • Эффективный угол наблюдения: 15°
  • Рабочий угол наблюдения: 30°

Дальномерный датчик

Распиновка

  • Vcc — положительный контакт питания.
  • Trig — цифровой вход. Для запуска измерения необходимо подать на этот вход логическую единицу на 10 мкс. Следующее измерение рекомендуется выполнять не ранее чем через 50 мс.
  • GND — отрицательный контакт питания.
Оцените статью
Анемометры
Добавить комментарий