Лазерный дальномер своими руками на arduino: Дальномер своими руками на Arduino

Содержание

Самодельный фазовый лазерный дальномер / Хабр

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

Теория

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


Однако существуют и другие лазерные методы изменения расстояния, одним из них является фазовый. В этом методе, в отличие от предыдущего, лазер работает постоянно, но его излучение амплитудно модулируется сигналом определенной частоты (обычно это частоты меньше 500МГц). Отмечу, что длина волны лазера при этом остается неизменной (она находится в пределах 500 — 1100 нм).
Отраженное от объекта излучение принимается фотоприемником, и его фаза сравнивается с фазой опорного сигнала — от лазера. Наличие задержки при распространении волны создает сдвиг фаз, который и измеряется дальномером.
Расстояние определяется по формуле:

Где с — скорость света, f — частота модуляции лазера, фи — фазовый сдвиг.


Эта формула справедлива только в том случае, если расстояние до объекта меньше половины длины волны модулирующего сигнала, которая равна с / 2f.
Если частота модуляции равна 10МГц, то измеряемое расстояние может доходить до 15 метров, и при изменении расстояния от 0 до 15 метров разность фаз будет меняться от 0 до 360 градусов. Изменение сдвига фаз на 1 градус в таком случае соответствует перемещению объекта примерно на 4 см.
При превышении этого расстояния возникает неоднозначность — невозможно определить, сколько периодов волны укладывается в измеряемом расстоянии. Для разрешения неоднозначности частоту модуляции лазера переключают, после чего решают получившуюся систему уравнений.
Самый простой случай — использование двух частот, на низкой приблизительно определяют расстояние до объекта (но максимальное расстояние все равно ограничено), на высокой определяют расстояние с нужной точностью — при одинаковой точности измерения фазового сдвига, при использовании высокой частоты точность измерения расстояния будет заметно выше.

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

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

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


Пример структурной схемы дальномера с гетеродином. М — генератор сигнала модуляции лазера, Г — гетеродин.

Разность фаз сигналов в таком преобразовании не изменяется. После этого разность фаз полученных низкочастотных сигналов измерить цифровыми методами значительно проще — можно легко оцифровать сигналы низкоскоростным АЦП, или измерить задержку между сигналами (при понижении частоты она заметно увеличивается) при помощи счетчика. Оба метода достаточно просто реализовать на микроконтроллере.

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

Более подробно (с всеми нужными формулами) этот метод рассматривается здесь (на английском) и здесь (на русском).
В первой статье указывается, что если частота дискретизации сигнала (fsp) связана с частотой модуляции (fo) следующим соотношением:

где p — целое число, то процесс вычисления фазы значительно упрощается.
Достаточно взять N выборок сигнала X[i], после чего разность фаз можно вычислить по следующим формулам:

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

Именно второй вариант фазометра, с использованием частоты модуляции 10МГц я и решил реализовать в своем макете дальномера.

Практика

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


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

Схема аналоговой части (усилителя лазера и приемной части):

Схема была взята из проекта лазерной связи Ronja, описание на русском. В этом проекте как раз реализована передача данных со скоростью 10Mbit, что соответствует выбранной частоте модуляции.
Как видно из схемы — усилитель мощности для лазера простейший, собран на микросхеме 74HC04 (содержит 6 инверторов). Включение микросхемы не совсем корректное, но оно работает. Ток через лазер ограничивается резисторами (тоже не самое лучшее решение). Напряжение питания 5В для усилителя берется с отладочной платы.
Для того, чтобы сигнал с усилителя не наводился на остальную часть схемы, корпус усилителя сделан металлическим, все провода экранированы.
Сам лазер (красного цвета) взят из пишущего DVD-привода, его мощность можно установить достаточно высокой, и он гарантированно будет работать на частоте 10МГц.

Приемник состоит из фотодиода и усилителя, собранного на полевом транзисторе и микросхеме-высокоскоростном усилителе. Так как с увеличением расстояния освещенность фотодиода сильно падает, то усиление должно быть достаточно большим (в этой схеме оно примерно равно 4000). Кроме того, с ростом частоты заметно падает сигнал на выходе фотодиода (сказывается его емкость). Отмечу, что усилитель в данной конструкции — важнейшая и наиболее капризная часть. Как оказалось, его усиления явно не хватает. Изначально я предполагал, что коэффициент усиления можно будет менять (чтобы ослаблять сигнал при его слишком большой величине), используемая схема позволяет это делать, меняя напряжение на втором затворе транзистора. Однако оказалось, что при изменении усиления достаточно сильно изменяется вносимый усилителем сдвиг фаз, что ухудшает точность измерения расстояния, так что пришлось установить коэффициент усиления на максимум, подавая на затвор транзистора напряжение 3В с батарейки.

Приемнику для работы требуется напряжение 12В, так что для его питания приходится использовать отдельный блок питания.
Усилитель очень чувствителен к внешним наводкам, так что он тоже должен быть экранированным. Я взял готовый корпус от нерабочего оптического датчика, и разместил усилитель в нем (белая полоска — фольга для дополнительного экранирования фотодиода):

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

LC-фильтр, используемый в дальномере — взят от приемника. Так как фильтр отсекает постоянную составляющую сигнала, а АЦП отрицательные сигналы не воспринимает, то ее приходится добавлять при помощи резисторного делителя R15, R16. Постоянное напряжение, подаваемое на делитель, берется c отладочной платы (VCC).

Отладочная плата — STM32F4-DISCOVERY. Ее выбрал потому, что для формирования двух достаточно различающихся частот нужен генератор достаточно высокой частоты (PLL STM32F4 может давать частоты больше 100МГц).
В формуле, связывающей частоту модуляции и дискретизации, коэффициент «p» я принял равным 6, так что при частоте модуляции 10МГц частота дискретизации должна быть 1.6МГц.

Для формирования частоты 10МГц используется таймер TIM2, работающий в режиме формирования ШИМ сигнала. При системной частоте 160МГц его период — 16 «тиков».
АЦП получает запросы на запуск от таймера TIM8. Для формирования частоты 1.6МГц его период — 100 «тиков». Все данные от АЦП при помощи DMA сохраняются в массив, размер которого должен быть равен двойке в N степени. Оба таймера, АЦП и DMA запускаются один раз при включении и больше уже не отключаются. Таким образом, так как таймеры тактируются от одного источника, а одному периоду измеряемого сигнала соответствуют четыре выборки данных, получается, что в массив всегда попадет целое число периодов сигнала.
Так как останавливать DMA не желательно (это упрощает управление захватом данных), при заполнении первой половины массива генерируется прерывание. Обнаружив, что половина массива заполнена, контроллер копирует ее содержимое в другой массив (в целях упрощения программы вторая половина основного массива при этом не используется). После этого полученные данные обрабатываются — вычисляется средняя амплитуда и фаза сигнала, проводится пересчет фазового сдвига в расстояние.
Полученные величины выводятся на ЖК индикатор от кассового аппарата, также подключенный к отладочной плате.

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

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

Про оптику. Без нее дальномер невозможен. Ее конструкция хорошо видна на фотографиях ниже. Лазер находится внутри пластиковой трубки, установленной вертикально. В нее вставлена небольшая втулка с зеркальной призмой. Втулку можно поворачивать, поднимать и опускать, перемещая таким образом луч лазера. Так как я догадывался, что усиления не хватит, то для приема сигнала использовал крупную линзу Френеля.
Так так лазер, линза и фотодиод установлены соосно, то на близких расстояниях лазер закрывает от фотодиода собственный луч. Для компенсации этого эффекта я установил вторую линзу (лупа с оправой), хотя полностью эффект не устраняется, поэтому максимальный сигнал наблюдается на расстоянии примерно 50-70 см от лазера.

А вот и фотографии получившейся конструкции:

На индикаторе первое число — амплитуда в единицах АЦП, второе число — расстояние в сантиметрах от края доски.

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

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

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

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

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

Программа контроллера: ссылка

ДАЛЬНОМЕР ЛАЗЕРНЫЙ: ИЗГОТОВЛЕНИЕ СВОИМИ РУКАМИ


Введение

В продаже, есть большое количество дешевых датчиков – дальномеров, в их числе ультразвуковые и инфракрасные. Все эти устройства работают хорошо, но из-за значительного веса, не подходят для летающих роботов. Миниатюрный робот вертолет, например, может нести около 100 г полезной нагрузки. Это даёт возможность использовать, для поиска препятствий и предотвращения столкновений с ними, машинное зрение, используя веб-камеры (или другие миниатюрные, беспроводные камеры с подключением к компьютеру через USB). А еще лучше, установить две камеры, что обеспечит роботу, стерео зрение, таким образом, благодаря информации о глубине изображения, улучшится обход препятствий. Недостатком этой идеи является сравнительно большой вес камеры.

Лазерный дальномер из веб-камеры

1.1. Принцип работы

Лазерная точка проектируется на возможное препятствие, лежащие в поле зрения камеры, расстояние до этого препятствия может быть легко вычислено. Математика здесь очень простая, обработку данных лучше всего производить в компьютерных приложениях. (см. рис. 1.1)

Рисунок 1. 1 – Принцип действия дальномера

Итак, вот как это работает. Лазерный луч проецируется на объект в поле зрения камеры. Этот луч должен быть идеально параллелен оптической оси камеры. Лазерная точка захватывается вместе с остальной сценой. Простой алгоритм ищет на изображении яркие пиксели. Предполагая, что точка лазера является яркой на фоне более тёмной обстановки (я использовал обычную лазерную указку купленную в магазине за доллар), изначально положение точки в кадре не известно. Затем нам нужно рассчитать дальность до объекта, основываясь на том, где вдоль оси Y находится лазерная точка, чем ближе она к центру изображения, тем дальше находится объект.

Как мы видим из рисунка выше, расстояние (D) может быть рассчитано по формуле:

Конечно, для решения этого уравнения, вы должны знать, h – фиксированное расстояние между лазерной указкой и камерой. Знаменатель высчитывается так:

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

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

Теперь у нас есть расчётные значения, мы можем придумать отношения, что позволяет нам рассчитывать, дальность, зная количеством пикселей от центра изображения. Можно использовать линейную зависимость.

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

1.2. Компоненты

Для сборки дальномера требуется не так много деталей: веб-камера и лазерная указка. Для соединения лазерной указки и камеры необходимо вырезать раму из жести или фанеры:

Собранный дальномер должен выглядеть примерно следующим образом:

1.3. Программное обеспечение

Программа-обработчик написана на двух языках: Visual C ++ и Visual Basic. Вы, вероятно, подумаете, что программа на Visual Basic проще, чем на VC ++ в плане кода, но во всём есть компромисс. Код на VC ++ можно собрать бесплатно (при условии, что у вас есть Visual Studio), в то время как код VB требует приобретение программных пакетов сторонних производителей (в дополнение к Visual Studio).

Коды программ написанных на Visual Basic и Visual C ++ можно найти по ссылке: www.cxem.net

1.4. Дальнейшая работа

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

Послесловие переводчика

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

Мне не вполне ясно, каким образом изменение размера зрачка может влиять на расстояние между зрачками. Очевидно, автор подразумевает не расстояние между центрами зрачков, а скорее расстояние между их медиальными краями. По-моему это не совсем правильно. В конце концов, оптическая ось глаза проходит именно через центр зрачка, а потому для наших целей важно именно расстояние между центрами зрачков, которое не зависит от их диаметра. Правда, при расширении зрачка (мидриазе) происходит уменьшение глубины резко изображаемого пространства, в результате чего объекты не в фокусе (в том числе сдвоенный треугольник дальномера) будут выглядеть несколько более размытыми. Это немного снижает точность измерения, но не настолько, чтобы этому факту стоило уделять особое внимание.

Рис.4 Примерно так выглядит метрический дальномер.

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

Лазерный дальномер из web камеры

В продаже, есть большое количество, дешёвых, датчиков – дальномеров, в их числе ультразвуковые и инфракрасные. Все эти устройства работают хорошо, но из – за значительного веса, не подходят для летающих роботов. Миниатюрный робот вертолет, например, может нести около 100г полезной нагрузки. Это даёт возможность использовать, для поиска препятствий и предотвращения столкновений с ними, машинное зрение, используя веб-камеры (или другие миниатюрные, беспроводные камеры с подключением к компьютеру через USB). А еще лучше, установить две камеры, что обеспечит роботу, стерео зрение, таким образом, благодаря информации о глубине изображения, улучшится обход препятствий. Недостатком этой идеи, является, добавление веса второй камеры.

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

Этот проект основан на статье найденной здесь.

Принцип работы

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

Итак, вот как это работает. Лазерный луч проецируется на объект в поле зрения камеры. Этот луч должен быть идеально параллелен оптической оси камеры. Лазерная точка захватывается вместе с остальной сценой. Простой алгоритм ищет на изображении яркие пиксели. Предполагая, что точка лазера является яркой на фоне более тёмной обстановки (я использовал обычную лазерную указку купленную в магазине за доллар), изначально положение точки в кадре не известно. Затем нам нужно рассчитать дальность до объекта, основываясь на том, где вдоль оси Y находится лазерная точка, чем ближе она к центру изображения, тем дальше находится объект.

Простой дальномер на Arduino

Добрый день любители самоделок! Сегодня мы соберём простой дальномер на Arduino Pro Mini. Прибор способен измерять расстояние от 2 до 400 см. Погрешность данного устройства доходит всего до +/- 1-5 см, в зависимости от измеряемого расстояния.

Инструменты и материалы

-Arduino Pro mini -Датчик hc-04 -Индикатор на tm1637 -Провода ( у меня — МГТФ 0,12 ) -Программатор -Пластмассовый корпус -Li-on аккумулятор -Маленький выключатель -Плата зарядки на TP4056 -Суперклей -Паяльник -Припой -Канифоль -Дрель, свёрла и т.д.

Шаг первый.Схема:

По схеме всё просто, без дополнений.

Шаг второй.Подготовка корпуса:

Сначала примеряем датчик и сверлом на 15 мм высверливаем два отверстия.

Шаг третий.Прошивка:

В скетче выделены переменные которые можно подстроить для себя. Весь код закоментирован.

Далее подключаем программатор и прошиваем МК.

Шаг четвёртый.Сборка:

Так как устройство работает от аккумулятора,то лишние расходы заряда нам не нужны. Поэтому на плате Arduino выпаиваем светодиоды и кнопочку reset (для уменьшения размеров).

Шаг пятый.Тест:

Примечание: четвёртый сегмент всегда будет отображать 0. Это сделано для того, чтобы последний сегмент не был пустым. Получается если показание равно 270, то это означает, что расстояние равно 27 см.

Доброго времени суток читающим! Наверняка не я единственный задавался вопросом приобретения, а лучше создания своими руками достаточно точного дальномера, с возможностью измерять расстояния не менее нескольких км. Как то давно познакомился с интересным материалом, благодаря которому я научился приблизительно измерять расстояния методом «тысячных». При пользовании этим методом, как вы знаете, нужно знать размеры удаленного предмета. Кто сталкивался, знает что в горах сложно найти предмет со знакомыми размерами. Поэтому хотелось так же иметь и другой способ, не требующий обязательных условий. Вчера в интернете случайно попалась конструкция самодельного оптического дальномера. Далее немного копипаста: «Определить расстояние на глаз трудно. Более или менее человек справляется с этой задачей на ровной местности. Если же между предметом и наблюдателем овраг или река, то ошибиться можно в два-три раза. Точно оценить расстояние до различных предметов вам поможет зеркальный дальномер.

Сделайте из 33-мм фанеры, тонких дощечек или другого жесткого листового материала заготовки, соедините их столярным клеем в продольный футляр, оставив открытой верхнюю крышку 4. Торцевые стенки 5 делают после того, как уже склеен желоб из деталей 1, 2 и 3. Затем в верхней части коробки укрепите полоски зеркала размером 25×50 мм, как показано на рисунке. Зеркало А приклейте намертво клеем БФ-2 к бруску, соединяющему детали 2 и 5, а зеркало Б — на лыску вращающейся оси. Вставьте эту ось нижним концом в отверстие детали 3, накройте футляр крышкой 4 так, чтобы верхний конец оси попал в отверстие детали 4. Наденьте на верхний конец оси стрелку-указатель (из жести или алюминия), смазав место соединения клеем БФ-2, и укрепите защитный хомутик.

Следующий этан работы — градуировка. Отмерьте мерной лентой или рейкой 50 м от какого-нибудь вертикального предмета, например телеграфного столба, и встаньте на это место. Медленно поворачивая зеркало Б, совместите изображения нижней и верхней частей столба. Отметьте положение стрелки на шкале риской и против этой риски напишите: «50 м». Затем отмерьте от столба 100 м, опять совместите изображения «половинок» столба, риской отметьте положение стрелки, написав против нее: «100 м» — и т. д. После градуировки расстояния между рисками на глаз разделите на более мелкие части.

Точность дальномера зависит и or длины стрелки: чем она длиннее, тем большее расстояние проходит ее конец (при том же угле поворота зеркала Б). Но особенно длинной делать стрелку не стоит — интервал измеряемых расстояний от этого уменьшается. Чтобы пыль не проникала внутрь прибора, в три отверстия вставьте кусочки стекла, тонкого плексигласа или прозрачного целлулоида.

Готовый прибор покрасьте нитро или масляной краской в защитный цвет.»

Так же в других статьях читал что можно вместо зеркал использовать лазерные указки, небольшой увеличительный прибор(мини монокль какой нибудь) Хочу узнать, сталкивался ли кто либо с таким прибором? Если да, какие тонкости в конструкции есть? Из каких подходящих деталей можно изготовить? Рекомендуемая длина прибора для более точного измерения и на большие дистанции. И вообще буду рад любым мыслям о дальномере- этом и других вообще. Спасибо!

Лазерный дальномер

Существует множество способов измерения расстояний – шагами, линейкой, рулеткой и пр. ХХ век добавил в средства измерений такой прибор, как лазерный дальномер. Его широко применяют военные, геодезисты для съемки местности. Лазерный дальномер был использован для замера расстояния до земного спутника – Луны.

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

Лазерный дальномер: ремонт, принцип работы и пример самодельного измерителя

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

Принцип работы

Лазерные измерительные приборы используют в своей работе два принципа – импульсный и фазовый.

Первый дальномер состоит из двух компонент – лазера и детектора. Замерив время, которое лазерный луч затратить на движение по пути от источника до отражающего объекта, можно вычислить точное расстояние между ними. Эти устройства применяют для работы на больших расстояниях. Технология работы заключается в следующем, лазер генерирует мощный импульс и отключается. Такое свойство позволяет его скрытно использовать. Это свойство и является решающим фактором, определяющим использования этого прибора военными.

Второй тип, фазовый, работает по следующему принципу. Лазер на некоторое время включает и направляет луч на удаленный объект, у него (луча) разная моделированная частота и по изменению фазы рассчитывают расстояние до объекта. Фазовые измерительные расстояния не имеют приборов для замера отражаемого сигнала. Эти приборы эффективны на расстояниях до 1 километра и поэтому их применяют для бытовых нужд или в качестве прицельных устройств для стрелкового оружия.

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

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

  1. это устройство предоставляет возможность выполнения измерения линейных размеров (длина, высота, ширина), при этом встроенный калькулятор автоматически рассчитает периметр. Кроме того, счетное устройство поможет определить объем помещения;
  2. дальномер оснащен возможностью хранения полученных данных во внутренней памяти. Их можно использовать для проведения расчетов;
  1. прибор позволяет измерять расстояние на удаленных расстояниях при чьей-либо помощи, кстати, замеры можно выполнять и на закрытых и на открытых площадках, в разных погодных условиях.

Новое в блогах

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

Теория

Часто приходится встречать мнение, что с помощью лазера расстояние измеряют только путем прямого измерения времени «полета» лазерного импульса от лазера до отражающего объекта и обратно. На самом деле, этот метод (его называют импульсным или времяпролетным, TOF) применяют в основном в тех случаях, когда расстояния до нужного объекта достаточно велики (>100м). Так как скорость света очень велика, то за один импульс лазера достаточно сложно с большой точностью измерить время пролета света, и следовательно, расстояние. Свет проходит 1 метр примерно за 3.3 нс, так что точность измерения времени должна быть наносекундная, хотя точность измерения расстояния при этом все равно будет составлять десятки сантиметров. Для измерения временных интервалов с такой точностью используют ПЛИС и специализированные микросхемы. Однако существуют и другие лазерные методы изменения расстояния, одним из них является фазовый. В этом методе, в отличие от предыдущего, лазер работает постоянно, но его излучение амплитудно модулируется сигналом определенной частоты (обычно это частоты меньше 500МГц). Отмечу, что длина волны лазера при этом остается неизменной (она находится в пределах 500 — 1100 нм). Отраженное от объекта излучение принимается фотоприемником, и его фаза сравнивается с фазой опорного сигнала — от лазера. Наличие задержки при распространении волны создает сдвиг фаз, который и измеряется дальномером. Расстояние определяется по формуле: Где с — скорость света, f — частота модуляции лазера, фи — фазовый сдвиг. Эта формула справедлива только в том случае, если расстояние до объекта меньше половины длины волны модулирующего сигнала, которая равна с / 2f. Если частота модуляции равна 10МГц, то измеряемое расстояние может доходить до 15 метров, и при изменении расстояния от 0 до 15 метров разность фаз будет меняться от 0 до 360 градусов. Изменение сдвига фаз на 1 градус в таком случае соответствует перемещению объекта примерно на 4 см. При превышении этого расстояния возникает неоднозначность — невозможно определить, сколько периодов волны укладывается в измеряемом расстоянии. Для разрешения неоднозначности частоту модуляции лазера переключают, после чего решают получившуюся систему уравнений. Самый простой случай — использование двух частот, на низкой приблизительно определяют расстояние до объекта (но максимальное расстояние все равно ограничено), на высокой определяют расстояние с нужной точностью — при одинаковой точности измерения фазового сдвига, при использовании высокой частоты точность измерения расстояния будет заметно выше.
Так как существуют относительно простые способы измерять фазовый сдвиг с высокой точностью, то точность измерения расстояния в таких дальномерах может доходить до 0.5 мм. Именно фазовый принцип используется в дальномерах, требующих большой точности измерения — геодезических дальномерах, лазерных рулетках, сканирующих дальномерах, устанавливаемых на роботах. Однако у метода есть и недостатки — мощность излучения постоянно работающего лазера заметно меньше, чем у импульсного лазера, что не позволяет использовать фазовые дальномеры для измерения больших расстояний. Кроме того, измерение фазы с нужной точностью может занимать определенное время, что ограничивает быстродействие прибора.

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

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


Пример структурной схемы дальномера с гетеродином. М — генератор сигнала модуляции лазера, Г — гетеродин.

Разность фаз сигналов в таком преобразовании не изменяется. После этого разность фаз полученных низкочастотных сигналов измерить цифровыми методами значительно проще — можно легко оцифровать сигналы низкоскоростным АЦП, или измерить задержку между сигналами (при понижении частоты она заметно увеличивается) при помощи счетчика. Оба метода достаточно просто реализовать на микроконтроллере.

Есть и другой способ измерения разности фаз — цифровое синхронное детектирование. Если частота модулирующего сигнала не сильно велика (меньше 15 МГц), то такой сигнал можно оцифровать высокоскоростным АЦП, синхронизированным с сигналом модуляции лазера. Из теоремы Котельникова следует, что частота дискретизации при этом должна быть в два раза выше частоты модуляции лазера. Однако, так как оцифровывается узкополосный сигнал (кроме частоты модуляции, других сигналов на входе АЦП нет), то можно использовать метод субдискретизации, благодаря которому частоту дискретизации АЦП можно заметно снизить — до единиц мегагерц. Понятно, что аналоговая часть дальномера при этом упрощается. Более подробно (с всеми нужными формулами) этот метод рассматривается здесь (на английском) и здесь (на русском). В первой статье указывается, что если частота дискретизации сигнала (fsp) связана с частотой модуляции (fo) следующим соотношением: где p — целое число, то процесс вычисления фазы значительно упрощается. Достаточно взять N выборок сигнала X, после чего разность фаз можно вычислить по следующим формулам: Отмечу, что оба вышеуказанных метода часто применяются вместе — низкочастотные сигналы подаются напрямую на АЦП, высокочастотные переносятся в область более низких частот за счет гетеродинного преобразования, и также подаются на АЦП.

Именно второй вариант фазометра, с использованием частоты модуляции 10МГц я и решил реализовать в своем макете дальномера.

Практика

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


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


Схема аналоговой части (усилителя лазера и приемной части):


Схема была взята из проекта лазерной связи Ronja, описание на русском. В этом проекте как раз реализована передача данных со скоростью 10Mbit, что соответствует выбранной частоте модуляции. Как видно из схемы — усилитель мощности для лазера простейший, собран на микросхеме 74HC04 (содержит 6 инверторов). Включение микросхемы не совсем корректное, но оно работает. Ток через лазер ограничивается резисторами (тоже не самое лучшее решение). Напряжение питания 5В для усилителя берется с отладочной платы. Для того, чтобы сигнал с усилителя не наводился на остальную часть схемы, корпус усилителя сделан металлическим, все провода экранированы. Сам лазер (красного цвета) взят из пишущего DVD-привода, его мощность можно установить достаточно высокой, и он гарантированно будет работать на частоте 10МГц.

Приемник состоит из фотодиода и усилителя, собранного на полевом транзисторе и микросхеме-высокоскоростном усилителе. Так как с увеличением расстояния освещенность фотодиода сильно падает, то усиление должно быть достаточно большим (в этой схеме оно примерно равно 4000). Кроме того, с ростом частоты заметно падает сигнал на выходе фотодиода (сказывается его емкость). Отмечу, что усилитель в данной конструкции — важнейшая и наиболее капризная часть. Как оказалось, его усиления явно не хватает. Изначально я предполагал, что коэффициент усиления можно будет менять (чтобы ослаблять сигнал при его слишком большой величине), используемая схема позволяет это делать, меняя напряжение на втором затворе транзистора. Однако оказалось, что при изменении усиления достаточно сильно изменяется вносимый усилителем сдвиг фаз, что ухудшает точность измерения расстояния, так что пришлось установить коэффициент усиления на максимум, подавая на затвор транзистора напряжение 3В с батарейки. Приемнику для работы требуется напряжение 12В, так что для его питания приходится использовать отдельный блок питания. Усилитель очень чувствителен к внешним наводкам, так что он тоже должен быть экранированным. Я взял готовый корпус от нерабочего оптического датчика, и разместил усилитель в нем (белая полоска — фольга для дополнительного экранирования фотодиода): Отмечу, что наводка сигнала от лазера на приемник довольно сильно ухудшает точность измерения разности фаз, так что нужно контролировать, чтобы такая наводка отсутствовала.

LC-фильтр, используемый в дальномере — взят от приемника. Так как фильтр отсекает постоянную составляющую сигнала, а АЦП отрицательные сигналы не воспринимает, то ее приходится добавлять при помощи резисторного делителя R15, R16. Постоянное напряжение, подаваемое на делитель, берется c отладочной платы (VCC).

Отладочная плата — STM32F4-DISCOVERY. Ее выбрал потому, что для формирования двух достаточно различающихся частот нужен генератор достаточно высокой частоты (PLL STM32F4 может давать частоты больше 100МГц). В формуле, связывающей частоту модуляции и дискретизации, коэффициент «p» я принял равным 6, так что при частоте модуляции 10МГц частота дискретизации должна быть 1.6МГц.

Для формирования частоты 10МГц используется таймер TIM2, работающий в режиме формирования ШИМ сигнала. При системной частоте 160МГц его период — 16 «тиков». АЦП получает запросы на запуск от таймера TIM2. Для формирования частоты 1.6МГц его период — 100 «тиков». Все данные от АЦП при помощи DMA сохраняются в массив, размер которого должен быть равен двойке в N степени. Оба таймера, АЦП и DMA запускаются один раз при включении и больше уже не отключаются. Таким образом, так как таймеры тактируются от одного источника, а одному периоду измеряемого сигнала соответствуют четыре выборки данных, получается, что в массив всегда попадет целое число периодов сигнала. Так как останавливать DMA не желательно (это упрощает управление захватом данных), при заполнении первой половины массива генерируется прерывание. Обнаружив, что половина массива заполнена, контроллер копирует ее содержимое в другой массив (в целях упрощения программы вторая половина основного массива при этом не используется). После этого полученные данные обрабатываются — вычисляется средняя амплитуда и фаза сигнала, проводится пересчет фазового сдвига в расстояние. Полученные величины выводятся на ЖК индикатор от кассового аппарата, также подключенный к отладочной плате.

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

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

Про оптику. Без нее дальномер невозможен. Ее конструкция хорошо видна на фотографиях ниже. Лазер находится внутри пластиковой трубки, установленной вертикально. В нее вставлена небольшая втулка с зеркальной призмой. Втулку можно поворачивать, поднимать и опускать, перемещая таким образом луч лазера. Так как я догадывался, что усиления не хватит, то для приема сигнала использовал крупную линзу Френеля. Так так лазер, линза и фотодиод установлены соосно, то на близких расстояниях лазер закрывает от фотодиода собственный луч. Для компенсации этого эффекта я установил вторую линзу (лупа с оправой), хотя полностью эффект не устраняется, поэтому максимальный сигнал наблюдается на расстоянии примерно 50-70 см от лазера.

А вот и фотографии получившейся конструкции:


На индикаторе первое число — амплитуда в единицах АЦП, второе число — расстояние в сантиметрах от края доски.

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

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

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


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

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

Программа контроллера: ссылка

Особенности

При работе с лазерным дальномером целесообразно учитывать некоторые особенности работы с этим устройством.

Дальномеры имеют возможность выполнять измерения на разных расстояниях и с определенной погрешностью. Так, предельное расстояние может лежать в диапазоне от 60 до 200 метров, при погрешности в 5 см. Эти данные указываются в паспорте на изделие. Большая часть моделей дальномеров работает в пределах от – 10 до + 50 градусов.

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

DIY Ультразвуковой дальномер — Набор для сборки.

Всем доброго времени суток! Предлагаю на Ваш суд обзор очередного набора сделай сам из Китая. на этот раз собираем дальномер, диапазон измерений от 25 до 400 см. Набор приезжает в небольшом пакете, внутри есть инструкция (правда по большей части на китайском), на удивление даже со схемой и небольшая кучка деталей.


Инструкция


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

Кратко про элементную базу.
Контроллер STC11F02, CD4069 сборка инверторов.


CX20106A судя по описания из тех что я смог найти это предусилитель для приемника ИК сигналов пультов дистанционного управления. Рядом резисторная сборка.


Набор конденсаторов, кварц на 12 МГц и транзистор 8550


Резисторы, разъемы, кроватка под микросхему и бипер.


Ну и конечно дисплей.


А еще в пакете есть ярлык контроля ОТК с датой упаковки, ну или что-то похожее на это.


Приступаем к сборке. Деталей немного и сборка много времени не занимает, но есть пару моментов. Первое это резисторы, обычно в таких наборах резисторы идут в комплекте с бумажками где указан их номинал, тут такого нет, так что нужна либо таблица цветовой маркировки, либо мультиметр. А еще на схеме есть два резистора, один на 4,7 Ом, а второй 4,7 кОм и если не присматриваться к номиналу можно легко перепутать, как я и сделал


Второй момент — это конденсаторы, в схеме используется четыре конденсатора с маркировкой 104, а в комплекте идет две пары разных конденсаторов.


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


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


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


Подключаем к PowerBank и можно начать тестирование. После включения дальномер сразу начинает измерять расстояние и выводить результат на экран, при этом каждое измерение подтверждается пиканьем бипера. Так что первое что захотелось сделать после включения, опять взять паяльник и выпаять нафиг бипер, его постоянный писк раздражат. Но попробую все-таки сравнить результаты с лазерным дальномером. Для начала расстояние до стены в сравнении с лазерным. С одной стороны УЗ вроде бы врет на 6 см, но с другой стороны, я так и не понял какая точка отсчета в него заложена.


Теперь тест до потолка. Тут разница опять-таки примерно в 6 см.

Видео сборки:

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

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

Товар предоставлен для написания обзора магазином. Обзор опубликован в соответствии с п.18 Правил сайта.

Порядок работы с лазерной рулеткой

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

Порядок работы с лазерной рулеткой

То есть, проводить выполнения замеров, может, даже один человек без привлечения, помощников.

Правила пользования

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

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

Лазерная съемка на местности

Во время выполнения измерения на улице, особенно на большие расстояния, необходимо применять пластину, которую называют визир.

Устройство компактного лазерного строительного дальномера

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

Схема работы лазерного дальномера

  1. Излучатель – он генерирует луч и отправляет его в нужную точку.
  2. Отражатель – он необходим для приема, отраженного от объекта луча.
  3. Микропроцессор, для выполнения необходимых расчетов.
  4. Предустановленная программа необходимая для обработки полученных при замерах данных.
  5. Прицел, позволяющий направить луч в необходимое место.
  6. Уровень, с помощью которого прибор можно строго выставить в горизонтальной или вертикальной плоскости.

На чем основан принцип работы дальномера

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

Многие говорят о том, что принцип работы лазерного дальномера заключается по времени — от прохождения создаваемого луча и его возврате обратно. Инструмент при этом осуществляет исчисления времени возврата луча, на основании которого и выдаются соответствующие показатели длины. Однако так работают далеко не все приборы. Рассмотрим, как работает дальномер лазерный импульсного типа, которым можно измерять расстояние до 15000 метров.

Дополнительные функции

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

  1. Функция непрерывного измерения. При работе в обычном режиме дальномер при нажатии кнопки на пульте фиксирует результат и выводит его на монитор. Но, довольно часто, возникает необходимость в проведении постоянного измерения расстояния, например, от стены до будущей перегородки. Для этого прибор переводят в режим непрерывного измерения. В таком режиме работы, устройство с некоторой частотой самостоятельно выполняет замер и показывает их результаты на монитор. Измерение проходит в реальном режиме времени.
  1. Определение наибольшего и наименьшего расстояния. Эта функция полезна при определении диагонали в комнате. Дело в том, что выполнить ее замер не так и просто при направлении лазерного луча можно промахнуться и в результате будут получены неточные результаты. После установки на приборе минимального расстояния, он будет фиксировать только те замеры, которые больше установленной.

Как пользоваться дальномером

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

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

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

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

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

Рис.3 Кривые, показывающие зависимость длины меток на шкале от расстояния до объекта при длине руки 27 дюймов и различных расстояниях между глазами. CD – длина линии на шкале в дюймах. BE – расстояние от глаз до объекта в футах. AB – расстояние между глазами в дюймах.

***

Лазерные дальномеры для работы в помещениях или на небольших дистанциях

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

Лазерный дальномер для работы в помещениях

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

На что смотреть при выборе лазерного дальномера

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

  1. Для работ внутри помещения достаточно прибора, который может выполнять замеры углов, и иметь функции, например, расчет периметра. Рулетки этого класса имеют небольшой диапазон измерений примерно в пределах 100 метров.
  2. Для работ на открытых пространствах применяют более дорогие модели. Они оснащены большим набором функций, в частности, может выполнять замер минимального и максимального измерения. Кроме того, их оснащают визирами, средствами подключения к компьютеру.
  1. Для работ на улице должны использоваться приборы, выполненные в защищенных корпусах и иметь кейсы, предназначенные для транспортировки.
  2. Разумеется, не последнюю роль играет стоимость изделия. Так, устройства, предназначенные для работы внутри помещений, стоит несколько дешевле, чем те, которые предназначены для работ на открытых пространствах.

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

В этой статье я хочу рассказать про свой проект импульсного (TOF) Open Source лидара — о том как я его делал, и каких результатов удалось добиться.


Немного теории

Лазерные дальномеры по принципу работы можно разделить на три основные типа:


  1. Триангуляционные. Дальномеры этого типа определяют расстояние, используя законы геометрии. Дальномер измеряет угол между лучом лазера и отраженным лучом света, попавшим на фотоприемник, и из величины этого угла и расстояния между лазером и фотоприемником вычисляет текущее расстояние до объекта.
    У этих дальномеров есть преимущества:
    — Наиболее простые среди всех остальных дальномеров.
    — Могут измерять расстояния с высокой точностью на близких дистанциях.
    — Могут измерять расстояния с достаточно высокой скоростью — до 10 кГц.
    Но есть и недостатки:
    — Точность измерения расстояния значительно падает с ростом расстояния.
    — Лазер должен быть включен достаточно долго (фотоприемники имеют ограниченную чувствительность), поэтому его мощность нужно ограничивать для безопасности.
    — Чем меньше габариты дальномера, тем хуже точность измерения расстояния.

    Именно такие дальномеры используются в роботах-пылесосах, так же к ним относятся довольно популярные в любительской робототехнике дальномеры RPLIDAR. Стоят они обычно 100-400$.

    Про дальномеры такого типа я подробно писал в своих статьях: Самодельный сканирующий лазерный дальномер и Реверс-инжиниринг лазерного датчика расстояния

  2. Фазовые. В этих дальномерах свет лазера модулируется высокочастотным сигналом. Задержка во время распространения луча в его «полете» до объекта и обратно приводит к появлению фазового сдвига между сигналом, который используется для управления лазером, и который принимается от объекта.
    У этих дальномеров есть преимущества:
    — Высокая точность измерения расстояния (единицы миллиметров и меньше). Может падать при увеличении отношения сигнал/шум.
    — Можно сделать малогабаритное устройство.
    Но есть и недостатки:
    — Лазер работает постоянно, поэтому приходится ограничивать его мощность. Это приводит к тому, что на больших расстояниях принимаемый сигнал оказывается довольно низким, что сказывается на точности дальномера.
    — Электроника такого дальномера относительно сложная.
    — Сложно получить высокую скорость измерений.

    Дальномеры такого типа используются в промышленности, геодезии. Лазерные рулетки в большинстве своем используют как раз фазовый метод измерения расстояния. Достаточно известный в робототехнике лидар «Hokuyo URG-04LX» тоже является фазовым.
    Специализированные 3D-сенсоры (range imaging camera) тоже часто используют этот метод.

    Про дальномеры такого типа я подробно писал в своих статьях: Самодельный фазовый лазерный дальномер и Как работает лазерная рулетка: реверс-инжиниринг

  3. Импульсные. Также их называют «времяпролетные», Time-Of-Flight (TOF). Они используют «классический», наиболее известный большинству метод измерения расстояния — дальномер измеряет время «полета» вспышки света до объекта и обратно. Несмотря на кажущуюся простоту метода, из-за высокой скорости света довольно сложно сделать дальномер, способный точно измерять расстояние.

    У этих дальномеров есть преимущества:
    — Лазер используется в импульсном режиме, что позволяет формировать импульсы сверхбольшой мощности (более МВт). За счет этого можно измерять очень большие расстояния (даже до Луны).
    — Можно сделать малогабаритное устройство. Датчики вроде VL53L0X используют именно этот метод.
    — Можно получить очень высокую скорость измерений — 100 кГц и более.
    Но есть и недостатки:
    — Сложно измерить расстояние с высокой точностью (< ±0.5 м).
    — Электроника такого дальномера относительно сложная.

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

    Я с подобным дальномером сталкивался в процессе реверс-инжиниринга: Реверс-инжиниринг лазерного сканера Leuze RS4
    Однако реверс-инжиниринг готового устройства это одно, а вот изготовление своего дальномера — совершенно другое.


Устройство импульсного лазерного дальномера

Ключевые компоненты лазерного дальномера это электроника и оптика. Если дальномер сканирующий (2D/3D), то к ним обычно добавляется и механика.

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

Основные узлы электроники такого дальномера:


  • Узел импульсного лазера. Содержит сам лазер и электронику, управляющую им. Главное требование к этому узлу — возможность сформировать максимально мощный импульс света с максимально крутым передним фронтом. Чем мощнее импульс — тем больше отношение сигнал/шум принимаемого сигнала, а чем круче фронт — тем выше точность измерения расстояния.
  • Узел фотоприемника. Содержит фотоприемник, принимающий отраженный от объекта сигнал; электронику для его питания, усилитель сигнала и компаратор, выделяющий полезный сигнал среди помех. Главные требования здесь — возможность максимально усилить принятый сигнал, не добавляя в него слишком много помех и не ухудшить крутизну переднего фронта импульса.
  • Узел измерения времени. Здесь происходит особая «магия» — высокоточное измерение времени «полета» светового импульса. Расстояние 1 м до объекта и обратно свет проходит за 6.6 нс — микроскопически малое время! Чтобы получить разрешение 1 см, требуется измерять время полета с дискретностью 66 пс.
    Если попытаться использовать традиционный метод измерения времени — подсчитывать импульсы от некого генератора частоты во время «полета», то выходит, что для получения разрешения 1 см требуется частота генератора > 15 ГГц! Понятно, что изготовить генератор и счетчик, способные работать с такой частотой, очень сложно.
    Поэтому для измерения настолько малых интервалов времени были разработаны специальные микросхемы TDC (Time-to-digital converter). Эти микросхемы могут использовать различные методы измерения времени, но наиболее распространенный — использование линий задержки. На Хабре есть хорошая статья, описывающая принцип работы TDC: Преобразователи Time-To-Digital (TDC): что это такое и как они реализованы в FPGA
  • Микроконтроллер (MCU). Он отвечает за формирование лазерных импульсов в заданные моменты времени, считывает данные из TDC, вычисляет расстояние до объекта, вычисляет необходимые коррекции, управляет некоторыми аналоговыми параметрами схемы, отправляет данные на компьютер.

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

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


Практика

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


Узел импульсного лазера

В последнее время в продаже появились относительно дешевые и достаточно мощные импульсные лазерные диоды OSRAM «SPL PL90_3». Выглядят они вот так:


Работают на длине волны 905 нм, и выдают в импульсе мощность до 75 Вт. Сразу замечу, что эти диоды абсолютно невозможно использовать в режиме постоянного свечения (CW). Для того, чтобы получить такую мощность, нужно пропустить через диод довольно большой ток — 30А!
Для управления лазером была использована такая схема (она достаточно стандартная):

Лазерный диод здесь обозначен D4. Узел управления лазером работает достаточно просто. Изначально транзистор Q2 закрыт, лазер не светит, конденсатор С17 заряжается через резистор R18 до напряжения Vlaser. Фактически, в этом конденсаторе запасается вся энергия, которая будет использована для излучения лазера. Она не так уж и велика — при напряжении 16В и емкости конденсатора 20 нФ запасенная в нем энергия будет составлять 2,5 мкДж.
В заданный момент на драйвер транзистора DA6 поступает импульс, он усиливает этот импульс, транзистор Q2 резко открывается и лазер начинает излучать свет, забирая при этом энергию из конденсатора. Длительность световой вспышки лазера ограничена именно емкостью конденсатора. Если бы все компоненты были бы идеальными, то в таком случае максимальный ток через лазер мог бы быть очень большим, но в реальности он сильно ограничивается индуктивностями элементов.

Полезная особенность такой схемотехники — даже если транзистор выйдет из строя и в нем возникнет короткое замыкание — ток через лазерный диод будет ограничен резистором R18, и не будет превышать и 0.1 А. Генерация излучения в лазере начинается при токе 0.5 А, так что такая неисправность не станет опасной для зрения.

Резистор R19 используется для контроля за током лазера. К нему подключен миниатюрный высокочастотный разъем U.FL, через который можно подключить осциллограф и наблюдать за формой тока, протекающего через лазер. Вот пример такой осциллограммы при Vlaser=15V
:
Видно, что импульс тока длится около 25 нс, колебания тока во время импульса связаны с резонансными явлениями. Максимальное значение напряжения в данном случае соответствует максимальному току около 15А.
При помощи достаточно скоростного APD-фотоприемника с усилителем я получил вот такую осциллограмму, показывающую форму сигнала лазера (канал 2, сигнал инвертирован):

Видно, что длительность переднего фронта лазера — около 10нс.

Регулируя напряжение Vlaser, можно регулировать максимальный ток лазера. Специально для формирования этого напряжения на микросхеме DA1 сделан узел DC-DC преобразователя, выходное напряжение которого можно регулировать с микроконтроллера.

Для того, чтобы уведомить микросхему TDC о том, что лазер включился, сделан специальный узел на микросхеме DA5. Эта микросхема — высокоскоростной компаратор, срабатывающий, когда ток через лазер достигает определенного значения.


Узел фотоприемника

В настоящее время в лазерных дальномерах в качестве фотоприемников чаще всего используют лавинные фотодиоды (avalanche photodiode — APD). В отличие от обычных фотодиодов, они обладают собственным усилением фототока, за счет чего их чувствительность возрастает. С точки зрения схемотехники это очень полезно, так как в случае больших расстояний фототок обычного фотодиода усилить очень сложно — он теряется на уровне шумов усилителя. Долгое время APD были довольно дороги (> 100$) и труднодоступны, но сейчас ситуация поменялась.
К примеру, на Digikey фотодиод MTAPD-07-013 стоит в розницу 24$. В последней версии дальномера я использовал именно его. На Aliexpress можно найти еще боле дешевые AD500-8 за 10-15$. Цена эта несколько странная, так как на Mouser они продаются более чем за 100$. Тем не менее, в первой версии дальномера я использовал именно такой фотодиод, и он проявил себя достаточно хорошо. Оба вышеупомянутых фотодиода имеют диаметр чувствительной площадки 0.5 мм. На aliexpress можно найти в продаже фотодиоды AD230-8 за 24$, но они имеют площадку диаметром 0.2 мм. Это позволяет уменьшить емкость фотодиода, но усложняет юстировку оптики.

Важная особенность лавинных фотодиодов — их усиление зависит от величины напряжения обратного смещения и от температуры корпуса. Вот пример такой зависимости, взятой из datasheet на фотодиод AD500-8 TO:

Видно, что усиление начинает значительно расти при напряжении, большем 70В. При приближении к 90В чувствительность усиления фотодиода к напряжению значительно увеличивается. С ростом усиления также повышается и уровня шумов.
Если продолжить увеличивать напряжение, то наступает лавинный пробой фотодиода — ток через него значительно увеличивается, причем он становится сильно зашумленным, пропадает реакция на свет. При этом фотодиод не выходит из строя (если совсем уж не поднимать ток).

Для того, чтобы сформировать достаточно высокое напряжение смещения фотодиода, я использую в своей конструкции DC-DC преобразователь, ШИМ сигнал для которого формирует микроконтроллер. Этот преобразователь включает в себя компоненты Q1, L5, D1, C10. Для измерения напряжения используется резисторный делитель на R8/R9. Обратная связь по напряжению реализована в микроконтроллере. Частота ШИМ — 100 кГц.
Я пробовал организовать синхронное управление формированием ШИМ и запуском лазера, так как предполагал, что небольшие колебания напряжения будут ухудшать точность измерений, но не заметил никакой разницы между синхронным и несинхронным режимом. Судя по всему, RC-фильтр R10-C11 достаточно хорошо справляется со своей задачей.

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


Подробнее про TIA можно почитать, например, здесь.

Для изготовления импульсного дальномера необходимо использовать TIA с большой полосой пропускания сигнала и малой входной емкостью. Доступных микросхем не так уж и много, примерами могут быть MAX3658, MAX40658, OPA858. В своем лидаре я использовал MAX3658.
Эта микросхема разработана специально для использования с фотодиодами, имеет усиление 18000, и полосу пропускания — 580MHz. Кроме того, микросхема содержит встроенный фильтр, отсекающий низкие частоты (DC Cancellation Circuit).
Недостаток микросхемы — довольно специфическое построение ее выходного каскада:

Здесь реализован не Push-Pull выход, а Open Collector + сильная подтяжка выходов в питанию, как в (Current Mode Logic — CML).
Для того, чтобы повысить напряжение на одном из своих выходов, микросхеме нужно закрыть один из транзисторов, т.е. повышение напряжения всегда происходит через резисторы подтяжки. Это может приводить к ухудшению временных характеристик сигнала.

У микросхемы есть еще один недостаток — она не содержит защиты от статического напряжения на своем входе.


Внимание! Микросхема MAX3658 очень сильно боится статического напряжения! Устанавливать ее нужно максимально осторожно. В своем лидаре я поставил во входную цепь микросхемы защитный диод D6, его желательно установить на плату до установки TIA.

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

В результате у меня получилась такая схема узла фотоприемника:

Разъем J1 используется для того, чтобы смотреть форму сигнала на выходе TIA.
Конденсаторы C12, C13 подключены к следующему узлу — узлу измерения времени.


Узел измерения времени

Благодаря использованию готовой микросхемы TDC этот узел достаточно прост. Выбор дешевых микросхем тоже невелик. Есть TDC7200, есть TDC-GP21/22, остальные микросхемы обычно дороги и достать их трудно. В своем лидаре я использовал TDC-GP21.

Эта микросхема предназначена для использования в ультразвуковых счетчиках потока жидкости, но ее можно использовать и в TOF дальномерах. Дискретность измерения времени (BIN) этой микросхемы составляет ~90 пс. Управление TDC с микроконтроллера производится по SPI.
TDC имеет два отдельных канала измерения времени (линии STOP1/2), на которые я в своей схеме завел сигналы с двух компараторов — упомянутого выше компаратора лазера и компаратора сигнала TIA. Также этот TDC может выдавать на свои линии «FIRE» сигнал для управления ультразвуковым излучателем, его удобно использовать для управления лазером. В таком случае по команде микроконтроллера TDC отправляет на узел лазера сигнал на включение и стразу же начинает измерять время (линия TDC «START» соединена внутри TDC с линией «FIRE»). У микросхемы есть ограничение на минимальное время между сигналами «START» и «STOP» — 3.5 нс, но в реальной схемотехнике задержка между отправкой сигнала «START» и появлением тока через лазер значительно больше этого времени. За счет этого измерение малых расстояний не является проблемой.

TDC-GP21 может фиксировать время сразу нескольких подряд идущих событий. С одной стороны, в импульсном лазерном этот режим можно было бы использовать для измерения расстояния до нескольких подряд идущих объектов (к примеру, для измерения расстояния сквозь стекло или ветки дерева), но я не стал реализовывать этот режим. Вместо этого я настроил канал STOP2 на детектирование как положительного, так и отрицательного фронта сигнала с компаратора TIA. Таким образом, за счет регистрации времени обоих фронтов принятого импульса, появилась возможность измерять длительность импульса. Это достаточно важная информация, о которой я расскажу далее.

После того, как будет принят отраженный от объекта сигнал, можно считать из TDC данные. Замечу, что эта микросхема имеет механизм первичной обработки принятых сигналов (ALU), который невозможно обойти, т.е. «сырые» данные получить из микросхемы нельзя. Каждый раз перед считыванием информации нужно указать TDC, какой вариант вычисления нужно производить, подождать, и только потом считывать информацию.
Вычитание времени STOP2 — STOP1 дает искомое «время полета», но при этом него входят различные задержки, возникающие в узлах схемы. Для получения информации о ширине импульса приходится перенастраивать TDC.

С выхода TIA выходит аналоговый сигнал довольно малой амплитуды (<200 мВ), а TDC требуется цифровой сигнал. Для преобразования одного сигнала в другой используется компаратор, построенный на микросхеме DA4 — ADCMP600. Эта микросхема имеет следующие параметры:
Propagation Delay (Задержка распространения): 3.5 нс

Overdrive Dispersion: 1.2 нс
Common-Mode Dispersion: 200 пс
Нельзя сказать, что компаратор очень быстрый, но для измерения расстояния с точностью несколько сантиметров он подходит. Более быстрые компараторы обычно имеют уже не TTL/CMOS выход, а какой-нибудь LVPECL, который проблематично завести на выбранный TDC.
Так как сигнал на выходе TIA дифференциальный, и при этом хочется иметь возможность настраивать порог срабатывания компаратора, то пришлось сделать схему, показанную ниже:

Порог срабатывания компаратора определяется напряжением, поступающем с микроконтроллера по линии «COMP_DAC». Это напряжение определяет величину падения напряжения на резисторе R15. При отсутствии сигнала на выходе TIA, именно эта разность напряжений поступает на вход компаратора. Следует заметить, что резистор подключен к компаратору так, что разность напряжений на входах компаратора оказывается отрицательной, так что он выдает 0 на своем выходе. При появлении сигнала на выходе TIA, этот сигнал проходит сквозь конденсаторы C12, C13, напряжение на R15 меняет полярность, и в момент перехода напряжения через 0 компаратор переключается в 1.

Оставшаяся электроника

Микроконтроллер (MCU). Для управления лидаром я использовал микроконтроллер STM32F303CBT6. В описываемом лидаре микроконтроллер выполняет следующие функции:
Управляет напряжением лазера, используя встроенный ЦАП.
Измеряет напряжение APD.
Управляет напряжением APD, формируя ШИМ с нужным коэффициентом заполнения.
Устанавливает напряжение порога срабатывания компаратора, используя встроенный ЦАП.
Управляет работой TDC (инициализация, запуск измерения, считывание данных).
Получает данные с энкодера зеркала.
Управляет мотором зеркала (подробнее про энкодер и мотор — ниже).
Обеспечивает связь с компьютером — изменение настроек лидара по командам с компьютера, отправка данных на компьютер.
Производит коррекцию данных, полученных из TDC и пересчитывает их в расстояние.
Сохраняет и считывает настройки из Flash-памяти.

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


Эту проблему можно решить, используя программную коррекцию результатов измерения времени полета в зависимости от амплитуды. В реальности измерить амплитуду настолько быстрых и малых сигналов достаточно сложно. Кроме того, микросхема TIA имеет довольно низкий порог насыщения — при слишком большом уровне входного фототока амплитуда сигнала на ее выходе перестает меняться. Как оказалось, значительно проще измерить длительность импульса средствами TDC (об этом я писал выше), и использовать для коррекции сигнала именно этот параметр. Методику вычисления коррекции я опишу далее.

Я написал два варианта управляющей программы для микроконтроллера. Один из из них, более простой, можно использовать только в несканирующем режиме. В этом варианте прошивке лазер постоянно «вспыхивает» с частотой 1000 Гц, так что этот режим удобно использовать для тестирования электроники и юстировки.
Второй вариант прошивки — основной, поддерживает 2D сканирование пространства.

Узел управления мотором. Для вращения сканирующего зеркала я использовал бесколлекторный мотор (BLDC), который требует специального метода управления. В качестве управляющей микросхемы я использовал DRV11873, которая достаточна распространена и не требует большого числа дополнительных элементов. Управление скоростью вращения мотора происходит при помощи ШИМ сигнала, подаваемого на вход микросхемы с MCU. Схемотехника этого узла взята из datasheet на микросхему и ничем не примечательна. Есть, правда, у выбранной связки мотор + драйвер недостаток — при включении мотор неконтролируемо разгоняется до большой скорости. Насколько я понимаю, это связано с методом обнаружения back-EMF в DRV11873.

В результате получается вот такая окончательная схема лидара:

Трассировка печатной платы лидара не так уж и проста, с учетом того, что на плате соседствуют токи более 15А в узле лазера и микроамперы фототока в узле фотодиода. Плату я решил делать четырехслойную, так как только так можно организовать качественные земляные полигоны — в случае четырехслойной платы один из внутренних слоев используется только для для земляных полигонов. Как видно из схемы, я разделил все земли лидара на три вида — земля узла лазера (LGND), земля узла мотора (MGND), главный земляной полигон (GND). Земли соединяются только в нескольких точках.
Для уменьшения индуктивности в цепи лазера важно расположить максимально близко друг к другу лазер D4, транзистор Q2, R19, C17 — фактически, в момент включения лазера, ток через эти компоненты замыкается.
Также важно установить фотодиод максимально близко к входу TIA.
Конечно, важно соблюдать целую кучу остальных плавил трассировки аналоговых и цифровых цепей. Однако я не являюсь профессиональным разработчиком печатных плат, так что не могу гарантировать, что плата разведена по всем правилам.

Вот так выглядит собранная плата (со стороны оптических компонентов):

И с другой стороны (со стороны микроконтроллера):


Оптические компоненты

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

Как я уже упоминал, объектив лазера предназначен для того, чтобы получить узкий пучок света от лазерного диода. Лазер можно условно принять за точечный источник света, так что для того, чтобы получить от него узкий пучок, достаточно использовать одиночную собирающую (положительную) линзу:


Изображение взято с сайта thorlabs.de
Достаточно удобно использовать в качестве объектива стандартный объектив M12 — они широко используются в камерах видеонаблюдения. Для таких объективов выпускаются и продаются стандартизированные держатели, которые прикручиваются к печатной плате.

Излучающая площадка лазерного диода представляет собой прямоугольник, в случае диода «SPL PL90_3» он имеет размеры 200 X 10 μm. Это приводит к тому, что пучок лазерного излучения тоже будет прямоугольной формы. Как видно, излучающая площадка имеет достаточно большую протяженность, что приводит к тому, что излучение на выходе объектива все равно имеет определенную расходимость. Из-за этого с ростом расстояния растет и размер пятна света, падающего на объекты. Фактически, именно величина угла расходимости излучения лазера определяет угловое разрешение лидара (количество измерений на один оборот).

Кроме размеров излучающей площадки, на величину угла расходимости влияет и фокусное расстояние объектива. Чем оно больше — тем меньше расходимость излучения:

Если использовать объектив с фокусным расстоянием 12 мм, то угол расходимости излучения будет около 1 градуса; у объектива с фокусным расстоянием 25 мм угол будет уже ~0.45 градуса. Мне удалось найти на Aliexpress достаточно подходящий объектив:

Его параметры: 25 мм; M12*0,5; 1/3; F2.0.
Этот объектив достаточно короткий, так что для того, чтобы соединить его с держателем, я использовал дополнительную покупную деталь: переходник-удлинитель (M12 Extension Adapter).
Вот так выглядит пятно лазера на расстоянии около 1.8м (слева):

Справа для сравнения — пятно от лазерной рулетки диаметром около 4 мм. Видно, что пятно от лидара примерно в 2. 5 больше, так что его ширина около 10 мм.

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

Также я экспериментировал с самодельным объективом, сделанным из одиночной линзы, взятой из фотоаппарата, и пластиковой оправы объектива M12 от web-камеры:

Использованная линза пропускает ИК излучение, так что объектив достаточно неплохо работал, но из-за короткого фокусного расстояния (около 13 мм) излучение после него имело слишком большую расходимость.

Теперь стоит рассказать про объектив фотоприемника. Наиболее важный его параметр в случае лазерного дальномера — диаметр входного зрачка. Чем больше этот параметр — тем больше отраженного света попадет на фотодиод и тем больше будет отношение сигнал-шум. Это значит, что объектив должен иметь максимально большой диаметр. Именно поэтому я решил использовать стандартный объектив с креплением типа CS-mount. Для таких объективов также есть держатели, прикручивающиеся к плате.
В этом лидаре я использовал покупной объектив с параметрами 25mm; F1.2; CS 1/2.5″. Видно, что у объектива большая светосила, при этом он имеет достаточно большое фокусное расстояние — 25 мм, так что диаметр входного зрачка получается достаточно большим. По расчету получается, что диаметр входного зрачка должен быть около 20 мм, однако, судя по всему, в реальности он ближе в 14 мм.
Также я пробовал использовать самодельный объектив, используя линзу диаметром 25 мм и часть от ненужного CS-объектива. Этот объектив действительно оказался лучше по энергетике (сигнал с фотодиода был заметно выше), но он ловил переотражения от сканирующего зеркала, так что он не очень подошел мне.

В случае, если предполагается использование лидара в условиях сильной световой засветки (особенно на улице), то между фотодиодом и объективом должен быть установлен интерференционный светофильтр, рассчитанный на длину волны 905 нм. Чаще всего они круглые, так что такой светофильтр можно приклеить к выходному отверстию объектива.
Я не стал использовать светофильтр — при комнатном освещении лидар может работать и без него.

Замечу, что как в случае лазера, так и в случае фотоприемника объектив работает на одной длине волне, так что проблема хроматических аберраций не возникает. Также при использовании APD с достаточно большой площадкой (0.5 мм) нет каких-то серьезных требований к параметрам объектива. Это значит, что в подобном дальномере можно использовать однолинзовые объективы.

В результате получившийся лазерный дальномер имеет такой вид:

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

Довольно хорошо заметен переход усилителя в режим насыщения. Об амплитуде фототока при этом можно судить по длине импульса.

Теперь следует добавить механику, чтобы сделать лазерный дальномер сканирующим.


Механика

Если не обсуждать твердотельные (solid-state) лидары, то можно выделить два метода 2D сканирования пространства — сканирование можно производить, вращая весь дальномер целиком, или вращать зеркало, наклонное на 45 градусов относительно оптических осей лидара.
Плюсы первого метода:


  • Не требуется достаточно крупное зеркало, которое сложно изготовить
  • Нет потерь на зеркале и проблем с переотражениями от него
  • Если сканирование идет в горизонтальной плоскости, то высоту лидара можно сделать маленькой
  • Нет проблем сделать сканирование на все 360 градусов

Недостатки:


  • Нужно как-то передавать на вращающуюся электронику питание и передавать данные. То есть нужно использовать либо скользящие контакты, ибо индуктивную+оптическую связь
  • Тяжелую вращающуюся конструкцию сложно балансировать
  • Нужна некая механика, чтобы вращать тяжелую конструкцию
  • Нужен относительно мощный мотор
  • Проблематично отлаживать вращающуюся электронику

Именно такой метод сканирования используется в лидарах пылесосов и PRLIDAR.

Плюсы использования сканирования зеркалом:


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

Недостатки:


  • Зеркало нужно как-то закрепить напротив объективов лидара, и крепление будет закрывать часть «обзора». Даже если использовать в качестве крепления прозрачную трубку-корпус всего дальномера, то к мотору зеркала и энкодеру все равно нужно подвести провода, и они будут перекрывать луч
  • Зеркало дает потери света и переотражения
  • Большая высота дальномера

Так как я хотел сделать именно лидар с высокой скоростью сканирования (не менее 15 оборотов/сек), я решил использовать сканирующее зеркало.
Важное требование к зеркалу — оно должно иметь внешнее отражающее покрытие (то есть покрытие должно быть на передней поверхности зеркала).
Если для сканирования использовать обычное прямоугольное зеркало, то его края не будут ник использоваться — свет туда попадать не будет. Идеальная форма такого зеркала — эллипс, так в проекции он дает окружность. Именно с таким зеркалом я уже сталкивался в готовом лидаре. Изготовить зеркало такой формы сложно, так что часто в лидарах используют восьмиугольное зеркало. Я пробовал изготовить такое зеркало самостоятельно, но только сломал несколько зеркал-заготовок из-за отсутствия опыта резки стекла малых размеров. Зато мне удалось найти на Aliexpress найти компанию, которая по моим чертежам изготовила четыре зеркала за 15$.
К сожалению, заказанное зеркало имеет недостаток — оно ослабляет сигнал практически в 2 раза. Насколько я поникаю, это связано с тем, что зеркало покрыто алюминием, также оно может иметь некое защитное покрытие. Это может приводить к падению коэффициента отражения до 0.7 на длине волны 905 нм, что как раз дает коэффициент отражения ~0.5 с учетом того, что луч проходит зеркало дважды.
Для длины волны 905 нм лучше подходят зеркала с серебряным или золотым покрытием, но они обычно стоят дороже. Подробнее про покрытия зеркал можно почитать здесь.

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

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

Для того, чтобы микроконтроллер мог определить, куда направлено зеркало, я установил на вал мотора простейший оптический энкодер. Диск для энкодера я взял из старой мышки, он имел 65 прорезей и хорошо стыковался с валом мотора. Одну из прорезей энкодера я заклеил — она используется как начало отсчета, то есть индикация нулевого угла:

Оптопару я использовал из старого принтера. Сигнал с нее заведен на компаратор, встроенный в MCU. Вот так выглядит сигнал с фототранзистора оптопары в момент пересечения начала отсчета:

В результате, получившийся лидар выглядит вот так:

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


Безопасность

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


Внимание! Использование прошивки микроконтроллера для несканирующего режима особенно опасно, так в этом режиме лазер работает постоянно с частотой 1 кГц, и постоянно направлен в одну точку. Я измерял среднюю оптическую мощность на выходе объектива лазера специализированным измерителем мощности — она составляла 0.35 мВт (при напряжении питания узла лазера 16В). Даже такая мощность может быть опасна, так так излучение не видно! Любые работы с дальномером в этом режиме нужно производить в защитных очках!

В сканирующем режиме из-за увеличения частоты импульсов средняя мощность излучения может доходить до 4. 4 мВт, но благодаря тому, что луч постоянно перемещается, он не так опасен для зрения. В программе MCU имеются специальные проверки скорости мотора, так что лазер отключается, если скорость слишком большая или маленькая.


Управление дальномером

Для настройки и управления дальномером я написал для ПК две утилиты.
Первая из них используется для настройки и тестирования дальномера в несканирующем режиме. Здесь можно настроить параметры работы лазера и фотоприемника, но главное — посмотреть данные с TDC:

Эта программа отправляет на дальномер на проведение 100 измерений, которые заносятся в память MCU, потом отправляются на ПК и анализируются. Результаты анализа выводятся в окно в центре программы, кроме того, на их основе строится гистограмма, показывающая разброс результатов измерения времени полета (колонка START).

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


  1. Запускается запись данных.
  2. Плавно регулируется амплитуда сигнала, расстояние при этом должно быть неизменным. Для того, чтобы регулировать амплитуду, я перекрывал объектив фотодиода непрозрачной пластинкой. Уровень амплитуды косвенно контролируется по значению длительности импульса (WIDTH)
  3. Собрав достаточное количество точек, нужно остановить запись, и перейти на вкладку калибровки (Calibration). Здесь происходит обработка записанных данных. Выглядят они вот так:

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

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

Следующая утилита используется для проверки работы лидара в основном его режиме — сканирующем. Главное здесь — отображение сканов с лидара:

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

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


Результаты

Получившийся лидар имеет такие характеристики:


  • Скорость сканирования: 15 оборотов/сек. Эта скорость ограничена частично программой MCU (ее нужно дополнительно оптимизировать), уровнем вибрации (зеркало не очень хорошо сбалансировано) и соображениями безопасности — чем выше скорость сканирования, тем выше средняя энергия, попадающая в определенную точку пространства.
  • Точность измерений. Один BIN TDC равен ~13 мм. Уровень шума измерения расстояния сильно зависит от расстояния, типа поверхности, угла падения луча лазера на поверхность.
    В примеру, на светло-серой стене на расстоянии 10 м максимальный разброс значений по 20 сканам составлял 3 см (0.3%), на расстоянии 20 м — 13 см, на 25 м — 17 см, на 30 м — 30 см (1%).
    Однако и на близких расстояниях получить уровень шума меньше 2 см практически невозможно.
  • Минимальное измеряемое расстояние: 5 см, максимальное ~25м (белая поверхность объекта)
  • Частота измерений: 11 кГц
  • Угловое разрешение: 0.5 градуса
  • Диапазон сканируемых углов: 230 градусов. Он может быть расширен, если переделать механику лидара
  • Потребление: 0.1 А на 5 В (0.5 Вт). Пусковой ток может доходить до 0.8 А
  • Размер: 50x50x120 мм

Проблемы существующей конструкции лидара и не реализованная функциональность

Наиболее важная проблема, которая пока никак не решена в моем лидаре — компенсация чувствительности электроники лидара к температуре. Наиболее к температуре чувствителен APD, у которого коэффициент усиления достаточно сильно уменьшается с ростом температуры. Изменение температуры в диапазоне 0-40 градусов приводит к изменению усиления в несколько раз. Наиболее правильно было бы измерять температуры APD, и подстраивать подаваемое на него напряжение. Для измерения температуры в схеме даже есть специальный терморезистор (NTC), но подстройку напряжения не стал реализовывать в прошивке — это достаточно сложно, так как нужно исследовать поведение APD во всем нужном диапазоне температур.

Еще одна нереализованная вещь — калибровка TDC. Все экземпляры TDC имеют немного различающееся время задержки между элементами (BIN). Кроме того, это время также зависит от температуры. Сама микросхема TDC имеет специальный механизм калибровки, но я не стал его реализовывать его в прошивке — для ее упрощения. Сейчас величина BIN жестко задается в коде MCU.

Из-за достаточно большой расходимости луча расстояние до узких объектов (например, ножек стульев) может измеряться неправильно, так как в луч попадает несколько объектов подряд. Эта же проблема проявляется и при резком переходе луча с одного расстояния на другое. На скане это выглядит как несколько ложных точек между правильными измерениями.

Версия платы «PCB_project_v4», рассчитанная на APD MTAPD-07-13, имеет сильную чувствительность к излучению расположенной рядом Wi-Fi антенны. Это выражается в том, что во время работы Wi-Fi данные лидара становятся сильно зашумленными (точность измерения падает в разы). Насколько я понял, сигнал наводится на вход усилителя фотодиода. Попытки экранировать плату особо не помогли, пробовал даже помещать плату в металлическую банку без крышки. Наводка пропадает, только если полностью экранировать конструкцию, что в случае лидара невозможно.
Помогает лишь установка антенны за нерабочей частью лидара и установка между ними специальной металлической пластинки-экрана.
В предыдущей версии платы, рассчитанной на использование APD AD500-8 этот эффект выражен значительно слабее. Платы несколько различаются разводкой, в старой плате усилитель установлен на нижней стороне платы, а фотодиод имеет металлический корпус, что может улучшать ситуацию.

Код MCU недостаточно оптимизирован. Можно заметно улучшить обработку данных от энкодера, реализовать связь с TDC по SPI используя прерывания, а не polling, как это сделано сейчас. Все эти доработки требуют времени, а его всегда не хватает.

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

Из-за переотражений на зеркале не удается использовать объектив фотоприемника большого диаметра.


Стоимость компонентов


Грубо подсчитанный BOM

Цена, $ Примечания
PCB 13 Цена за 10 штук
Лазерный диод 12 SPL PL90_3
APD 10/24 AD500-8/MTAPD-07-013
Микросхемы ~30 Все микросхемы (TIA, TDC, MCU, Mosfet . ..)
Остальные компоненты ~7
Оптика
Объектив APD 9 CS mount, 25mm
Держатель объектива 2 CS mount
Объектив лазера 7 M12, 25mm
Держатель и переходник объектива 5 M12
Сканирующее зеркало 12 Цена за 4 штуки
Механика
Стойки 3 Шестигранные стойки, цена за 20 штук
BLDC мотор 2
Дополнительные детали 2
Итого 114

Более подробный BOM с ссылками на магазины находится в проекте Github.

Общая стоимость компонентов без доставки получается около 114$ (при использовании APD AD500-8). Важно отметить, что некоторые компоненты (например PCB и зеркала) продавались партией по несколько штук, и в общую стоимость включена именно стоимость партии. Довольно дорогой вышла оптика с ее держателями — 23$. Если использовать одиночные линзы и самодельные держатели, то возможно, можно уменьшить стоимость оптики в несколько раз.


Практическое применение лидара

Я решил проверить работу получившегося лидара, установив его на многострадальный пылесос Roomba (я ставлю на него самодельные лидары с 2012 года). Лидар подключен к компьютеру Orange Pi PC, на котором запущен ROS с работающим SLAM. Выглядит это вот так:

Для того, чтобы передавать в ROS данные от лидара, я написал для него специальный узел. Пример данных, выдаваемых лидаром:

Длина клетки на изображении — 1 метр. На нижнем изображении дальномер «сморит» сквозь коридор сложной формы.

В результате работы SLAM получается вот такая карта:

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

Вот такая карта получается, если запустить SLAM в достаточно большом помещении:

Сканирование этого помещения сильно осложнялось большим количеством блестящих стульев и темными стенами.

Видео про лидар:



Аналогичные проекты

Таких проектов не очень много. В первую очередь, следует упомянуть проект Open Source лидара Unruly. К сожалению, на данный момент этот проект заморожен или остановлен — информации о его состоянии нет. Фактически, главное что выхожено в этом проекте — схема лидара и информация о его характеристиках. Не буду скрывать, некоторые части схемы я взял именно из этого проекта.

Также здесь стоить упомянуть Reference Design от TI: TIDA-00663. Это довольно подробный открытый проект, но у него есть недостаток — конструкция платы просто не предназначена для присоединения к ней оптики.

С другими аналогичными проектами (т.е. достаточно простыми, без использования FPGA и скоростных АЦП), я сожалению, не знаком. На просторах интернета нередко можно найти различные студенческие работы, но часто в них просто не приводятся параметры получившегося устройства, либо в них используются труднодоступные/дорогие компоненты. О наличии в открытом доступе прошивки и Geber-файлах говорить в таких случаях обычно не приходится.

Репозиторий проекта на Github: https://github.com/iliasam/OpenTOFLidar
Он содержит файлы проекта печатной платы, Gerber-файлы, подробный BOM к плате, BOM на весь проект с указанием ссылок для приобретения компонентов, некоторую информацию по механическим деталям, исходные коды прошивок, тестовые утилиты для ПК с исходными кодами, драйвер для ROS.

Лазерная гравировка с самодельным роботом Arduino SCARA

В этом уроке я покажу вам, как я переоборудовал свою роботизированную руку SCARA, напечатанную своими руками на 3D-принтере, которую я построил в одном из своих предыдущих видеороликов, для работы в качестве лазерного гравера. Вы можете посмотреть видео после видео или прочитать статью ниже.

Обзор проекта

Робот SCARA имеет 4 степени свободы, которые приводятся в движение 4 шаговыми двигателями NEMA 17 и управляются с помощью платы Arduino. В оригинальном видео я использовал плату Arduino UNO в сочетании с CNC Shield, но теперь мы будем использовать плату Arduino MEGA в сочетании с платой RAMP. Нам нужна эта комбинация, потому что мы будем использовать прошивку 3D-принтера Marlin для управления роботом.

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

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

Кроме того, рабочая зона впечатляет, учитывая небольшие размеры робота. Он может использовать область перед собой, а также с обеих сторон. На самом деле мы можем настроить его так, чтобы он использовал почти все 360 градусов вокруг робота в качестве рабочей зоны. Мы можем сделать это благодаря прошивке 3D-принтера Marling с открытым исходным кодом, которая имеет опции для лазерной гравировки и настройки робота SCARA.

Для генерации G-кодов я использую еще одно программное обеспечение с открытым исходным кодом, Inkscape и плагин для него под названием Inkscape-Lasertools. Мы можем генерировать G-коды только с контурами или с контурами и заполнением из одного и того же векторного изображения, и у нас есть различные параметры, такие как настройка лазерного луча, скорость перемещения, скорость заполнения, скорость периметра, команды включения и выключения лазера, включая ШИМ-управление лазер и так далее.

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

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

Робот сконструирован таким образом, что большинство деталей можно легко распечатать на 3D-принтере. Суставы приводятся в движение шаговыми двигателями NEMA 17, скорость которых снижается с помощью ремней GT2 и некоторых подходящих шкивов GT2, напечатанных на 3D-принтере. Робот имеет 4 степени свободы, но в данном случае нам нужны только 3 степени свободы, два вращения для достижения любой точки рабочей зоны и одно линейное движение для регулировки высоты лазера.

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

Вы можете найти и скачать эту 3D-модель, а также изучить ее в своем браузере на Thangs:

Скачать сборную 3D-модель с Thangs.

Спасибо Thangs за поддержку этого урока.

Файлы STL для 3D-печати:

Sponsored


Я разработал этого робота SCARA с помощью 3DEXPERIENCE SOLIDWORKS for Makers, которая также является спонсором этого видео. Да, вы не ослышались. С помощью 3DEXPERIENCE SOLIDWORKS for Makers компания SOLIDWORKS, наконец, предлагает свои лучшие в отрасли инструменты проектирования производителям всех видов по безумно низкой цене.

Создатели теперь могут получить доступ к лучшим инструментам проектирования SOLIDWORKS всего за 99 долларов в год, но для МОИХ зрителей SOLIDWORKS предлагает ограниченное по времени предложение, благодаря которому вы получите эти инструменты еще дешевле!

Верно. Зрители этого видео могут получить этот комплект уже сегодня, который включает облачную версию SOLIDWORKS, а также браузерные инструменты проектирования, такие как 3D Creator и 3D Sculptor, по специальной цене со скидкой 20%, пока товар есть в наличии!

 

Все, что вам нужно сделать, это щелкнуть мою следующую ссылку и создать свой бесплатный идентификатор 3DEXPERIENCE ID, который позволит вам получить доступ к этому специальному предложению со скидкой 20%, чтобы вы могли начать создавать лучшее уже сегодня. Большое спасибо SOLIDWORKS за спонсирование и поддержку подобного образовательного контента.

Ознакомьтесь с SOLIDWORKS для производителей

Скидка 20% на SOLIDWORKS для производителей


Установка лазерного модуля

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

Провода, используемые для управления сервоприводом захвата, теперь будут использоваться для управления лазерным модулем.

Конкретный лазерный модуль, который у меня есть, работает от 12 В и может управляться с помощью ШИМ-сигнала всего двумя проводами: заземлением и VCC. Для подключения лазера я использовал разъем, который идет в комплекте с модулем, с 3 контактами. Левый черный провод — это Земля, а средний, белый провод в моем случае — это VCC. Я припаял к этим проводам два штекерных перемычки, чтобы их можно было легко подключить к проводам концевого эффектора.

Затем я просто ставлю коннектор на место, пропускаю провод через одно из отверстий держателя и закрепляю лазерный модуль двумя болтами М3. Используя четыре болта M4, я прикрепил лазерный модуль к роботу.

Далее, как я упоминал ранее, вместо платы Arduino UNO, которую я использовал для управления роботом в исходном видео, теперь нам нужна плата Arduino MEGA и комбинация с платой RAMPS.

Здесь сначала нам нужно выбрать ступенчатое разрешение драйверов. Конечно, для более плавного движения мы должны выбрать максимально возможное разрешение, добавив по три перемычки для каждого драйвера шагового двигателя. Я использую A4988 с разрешением 16 шагов, но мы также можем использовать драйвер шагового двигателя DRV8825 с разрешением 1/32 шага.

Затем мы можем подключить все провода на место. Я промаркировал все свои провода, чтобы не перепутать их.

Электрическая схема лазерного гравера SCARA Robot

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

Шаговые двигатели расположены прямо над драйверами, а концевые выключатели, которые нормально замкнуты, с двумя проводами идут на концевых упорах S и – контакты для каждой оси соответственно.

Для управления лазерным модулем мы будем использовать контакт D9, который в настройках 3D-принтера используется для управления вентилятором. Этот вывод поддерживает ШИМ, поэтому с его помощью мы можем контролировать интенсивность лазера. Для питания всего необходимо блок питания 12В с минимальным током 3А.

Вы можете получить компоненты, необходимые для этого проекта, по ссылкам ниже:

  • Шаговый двигатель — NEMA 17………………  Amazon / Banggood / AliExpress
  • A4988 Шаговый драйвер…………………. .… Amazon / Banggood / AliExpress
  • Плата RAMPS 1.6…………………………..… Amazon / Banggood / AliExpress
  • Arduino MEGA…………………….…..……… Amazon / Banggood / AliExpress
  • Концевой выключатель …………………………………. Amazon  /  Banggood  / AliExpress
  • Блок питания постоянного тока ……………………………. Amazon / Banggood  / AliExpress
  • Лазерный модуль ………………………………… Amazon / Banggood / AliExpress
  • Лазерные защитные очки …………………….. Amazon / Banggod / AliExpress

Раскрытие информации: Это партнерские ссылки. Как партнер Amazon я зарабатываю на соответствующих покупках.

Что касается механических компонентов, вы можете проверить оригинальную статью.

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

Завершение сборки

Есть еще одна вещь, которую мне нужно было изменить в моем роботе SCARA, чтобы он работал должным образом, и это изменение момента срабатывания концевого выключателя второй руки. Поскольку робот SCARA будет работать как правша, возврат второй руки должен быть на 0 градусов или на одной линии с первой рукой, при этом он может поворачиваться влево. Для этого я просто приклеил небольшой кусочек к шарниру рычага, чтобы он срабатывал концевым выключателем в описанном положении.

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

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

И все. Теперь робот SCARA готов к работе в качестве лазерного гравера, но, конечно же, сначала нам нужно установить прошивку на плату Arduino.

См. также: Самодельный робот-манипулятор Arduino с управлением смартфоном

Прошивка Marlin для лазерной гравировки с роботом SCARA

Как я уже сказал, я буду использовать прошивку Marlin, которая является одной из наиболее широко используемых прошивок с открытым исходным кодом для 3D-принтеров. , который также имеет опции для лазерной гравировки и настройки робота SCARA. Мы можем скачать прошивку Marlin либо с официального сайта, либо с Github.com.

Чтобы установить прошивку Marlin на плату Arduino MEGA, мы будем использовать PlatformIO IDE вместо Arduino IDE. Поскольку прошивка Marlin большая и сложная, Arduino IDE иногда может выдавать ошибки и не сможет ее скомпилировать.

PlarformIO построен на основе редактора Visual Studio Code и может быть установлен как расширение к нему. Это означает, что сначала нам нужно установить Visual Studio Code, затем найти PlatformIO в менеджере расширений и установить его оттуда.

После завершения установки мы можем нажать кнопку «Открыть проект», перейти к папке Marlin, которую мы скачали и разархивировали, и нажать «Открыть Marlin».

Это загрузит все файлы Marlin в редактор, чтобы мы могли открывать и редактировать их. Два основных файла, в которых мы делаем все настройки в соответствии с настройками нашей машины, — это файлы Configuration.h и Configuration_adv.h.

На самом деле, прежде чем мы откроем папку Marlin, мы должны сначала перейти в репозиторий конфигурации на Github.com, откуда мы можем загрузить некоторые предварительно протестированные файлы конфигурации, которые нам подходят. В папке «Примеры» мы должны перейти в папку «SCARA», скопировать эти два файла конфигурации и вставить их в нашу папку Marlin.

См. также: Как настроить GRBL & Управление станком с ЧПУ с помощью Arduino

Настройка прошивки Marlin

Итак, как только мы снова откроем папку Marlin с файлами конфигурации «SCARA», мы сможем открыть файл Configuration.h и отредактировать некоторые параметры в соответствии с нашей машиной. Первым делом здесь нужно выбрать тип робота SCARA, который у нас есть.

 

/** * MORGAN_SCARA была разработана QHARLEY в Южной Африке в 2012-2013 гг. * Реализовано и немного переработано JCERNY в июне 2014 года. */ //#определить MORGAN_SCARA /** * Mostly Printed SCARA — это дизайн с открытым исходным кодом, созданный Тайлером Уильямсом. Видеть: * https://www.thingiverse.com/thing:2487048 * https://www.thingiverse.com/thing:1241491 */ #define MP_SCARA #ЕСЛИ ЛИБО(MORGAN_SCARA, MP_SCARA) // Если движение прерывистое, попробуйте уменьшить это значение #define SCARA_SEGMENTS_PER_SECOND 100 // Длина внутреннего и внешнего опорных рычагов. Точно измерьте длину рук. #define SCARA_LINKAGE_1 228.15 // Длина плеча 1 — 228 (мм) #define SCARA_LINKAGE_2 136,2 // Длина плеча 2 — 136,5 (мм) // Смещение башни SCARA (положение башни относительно нулевой позиции кровати) // Это должно быть достаточно точным, поскольку оно определяет положение печатной платформы в пространстве SCARA. #define SCARA_OFFSET_X 300 // (мм) #define SCARA_OFFSET_Y 150 // (мм)

Язык кода: Arduino (arduino)

«MORGAN_SCARA» для параллельного робота SCARA, а «MP_SCARA» для последовательного робота SCARA, точно так же, как у нас. Это основано на дизайне Тайлера Уильямса с открытым исходным кодом, который реализует обратную кинематику на G-кодах, сгенерированных для обычных декартовых систем.

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

При этом нам нужно ввести длину манипуляторов робота, в данном случае это 228 мм для первой руки и 136,5 мм для второй руки. Следующий параметр, который нам нужно задать, это нулевое положение рабочего стола. Это значение вводится вместе со значениями SCARA_OFFSET_X и Y и представляет собой расстояние от башни или первого стыка относительно нулевого положения пласта.

Есть еще один набор параметров, который нам нужно настроить в соответствии с нашей машиной, и это MANUAL_X_HOME_POS для X и Y. Эти значения представляют собой расстояния X и Y от концевого эффектора руки робота или лазера, когда он находится в исходном положении. , относительно нулевой позиции кровати, которую мы установили ранее. Чтобы получить эти значения, я сделал простой эскиз в SOLIDWORKS с двумя линиями, представляющими две руки робота SCARA.

Отсюда можно установить желаемое нулевое положение кровати и получить значения для переменных MANUAL_X_HOME_POS.

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

 

#define USE_XMIN_PLUG #define USE_YMIN_PLUG #define USE_ZMIN_PLUG

Язык кода: Arduino (arduino)

В дополнение к этому нам нужно определить X_HOME_DIR равным –1, что указывает направление конечных точек при возврате в исходное положение.

 

// Направление упоров при возврате в исходное положение; 1=МАКС., -1=МИН. // :[-1,1] # определить X_HOME_DIR -1 # определить Y_HOME_DIR -1 #define Z_HOME_DIR -1

Язык кода: Arduino (arduino)

Здесь мы также должны проверить, установлены ли для всех переменных __MIN_ENDSTOP_INVERTING значение «FALSE».

Затем нам нужно настроить значения DEFAULT_AXIS_STEPS_PER_UNIT, чтобы они соответствовали нашей машине.

 

#define DEFAULT_AXIS_STEPS_PER_UNIT { 177.7777777, 142.2222222, 400, 93 }

Язык кода: Arduino (arduino)

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

Шаговые двигатели NEMA 17 делают 200 шагов для полного оборота, но поскольку мы используем разрешение 16 шагов, это означает, что нам нужно отправить драйверу 3200 шагов, чтобы двигатель совершил полный оборот на 360 градусов. Кроме того, для первого шарнира у нас есть снижение скорости 20:1, что означает, что нам нужно 64000 шагов для полного вращения. Если мы разделим это значение на 360, то получим число 177,777, которое на самом деле является количеством шагов, которые программа должна отправить водителю, чтобы повернуть шарнир на одну единицу или один градус.

Вторая рука имеет снижение скорости 16:1, поэтому значение будет 142,222. Для оси Z у нас есть ходовой винт с шагом 8 мм, что означает, что один полный оборот двигателя приводит к линейному перемещению 8 мм. Одна единица здесь равна одному мм, поэтому нам нужно разделить 3200 шагов на 8, и мы получим значение 400, которое представляет собой количество шагов, необходимых для перемещения оси Z на одну единицу или один мм. Четвертое значение здесь для шагового двигателя экструдера, но поскольку у нас здесь нет экструдера, нам не нужно его менять.

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

 

// Инвертировать направление шагового двигателя. Замените (или переверните разъем двигателя), если ось движется неправильно. # определить INVERT_X_DIR ложь # определить INVERT_Y_DIR ложь #define INVERT_Z_DIR false

Язык кода: Arduino (arduino)

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

В scara.cpp, строка 75, я заменил MORGAN_SCARA на MP_SCARA. В motion.cpp пришлось закомментировать строки 1716 и 1717, в cofiguration.h прокомментировать VALIDATE_HOMING_ENDSTOPS, а в configuration_adv.h раскомментировать QUICK_HOME.

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

Тем не менее, теперь мы можем нажать кнопку «Загрузить», расположенную в левом нижнем углу редактора, и прошивка Marlin будет установлена ​​на плату Arduino. Вы загружаете эту конкретную прошивку Marlin со всеми изменениями, которые я сделал для работы с этим роботом SCARA ниже, или, конечно, вы можете загрузить оригинальную прошивку Marlin с Github.com и внести все изменения самостоятельно, как я объяснил.

Программное обеспечение для управления – Rapetier-host

Итак, после того, как мы установили прошивку Marlin, теперь нам нужна компьютерная программа для управления роботом и отправки ему G-кодов. Есть много вариантов, но я решил использовать Rapetier-host, популярное программное обеспечение для 3D-печати. Мы можем загрузить и использовать это программное обеспечение бесплатно. После его установки мы можем перейти в «Конфигурация»> «Настройки принтера» и настроить здесь несколько параметров.

Мы должны выбрать COM-порт, к которому подключена наша Arduino, и выбрать скорость передачи данных, которую мы установили в прошивке Marlin. На вкладке Printer Shape мы должны установить максимальные значения X и Y и область принтера.

Применив эти настройки, мы можем нажать кнопку «Подключиться», и программа должна подключиться к нашему роботу SCARA. Затем мы можем перейти к крану «Ручное управление» и отсюда попытаться переместить принтер.

Обратите внимание, что при нажатии стрелок X или Y робот может вести себя странно, так как сразу реализует инверсную кинематику и, вероятно, будет двигать обеими руками, даже если нажать только одну стрелку.

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

Когда мы нажимаем кнопку «Домой», робот должен начать движение к концевым выключателям. Фактически, второй рычаг начнет двигаться к своему концевому выключателю, в то время как первый рычаг должен двигаться в противоположном направлении. Как только второй рычаг или ось Y коснутся своего концевого выключателя, первый рычаг или ось X также начнут двигаться к своему концевому выключателю. Как только концевой выключатель X будет достигнут, робот перейдет к концевому выключателю Z.

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

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

Тем не менее, если мы отправим команду G-кода G00 X0 Y0, робот должен перейти в нулевое положение, которое мы задали в файле Marlin Configuration.h.

Затем мы можем активировать лазер, отправив команду M106 S10. Значение позади S может быть от 0 до 255, и на самом деле это ШИМ-управление мощностью лазера от 0 до 100%. Итак, мы используем здесь значение S10, чтобы оно ничего не сжигало, но было видно, чтобы мы могли видеть нулевое положение, а также настраивать фокус лазера.

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

Лазерная гравировка с помощью робота SCARA 

Чтобы откалибровать машину, рекомендуется начать с гравировки простой квадратной формы, чтобы мы могли увидеть, правильно ли она работает.

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

Итак, я загружаю G-код моего логотипа и заставляю робота его выгравировать.

Честно говоря, смотреть на этого робота SCARA, работающего как лазерный гравер, очень круто, но обратите внимание, что мы ДОЛЖНЫ использовать защитные очки , которые защитят наши глаза от ультрафиолетового излучения лазера, так как это очень опасно. Кроме того, мы должны использовать защитную респираторную маску и работать на открытом пространстве или в хорошо проветриваемом помещении, так как пары, образующиеся при лазерной гравировке, также опасны для нашего здоровья.

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

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

Проведя десятки тестов, я скорректировал значения длины от 228 до 228,15 мм для первого плеча и от 136,5 до 136,2 мм для второго плеча. Это дало мне наиболее точный результат, и теперь квадратная форма была правильной. Хотя, в зависимости от места печати, полностью ли вытянута рука или нет, точность может варьироваться.

Генерация G-кода для лазерной гравировки

Наконец, позвольте мне показать вам, как я подготовил чертежи и сгенерировал G-коды для их лазерной гравировки. Для этой цели я использовал Inkscape — программное обеспечение для векторной графики с открытым исходным кодом.

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

Я загрузил изображение логотипа Arduino и импортировал его в Inkscape. Используя функцию Trace Bitmap, сначала нам нужно преобразовать изображение в векторный формат. Мы можем генерировать G-коды только из векторных фигур, и для этой цели я использовал плагин Inkscape-Lasertools. Мы можем загрузить этот плагин с Github.com и установить его, скопировав файлы из zip-файла и вставив их в каталог расширений Inkscape.

Итак, как только мы установили плагин, мы можем перейти в Extensions>Lasertools, чтобы открыть его и использовать для создания G-кода. Есть несколько параметров, которые можно установить и настроить с помощью этого плагина. Поскольку мы подключили наш лазер к контакту D9, который используется для управления вентилятором, мы можем активировать лазер, отправив команду M106.

Мы можем выбрать, будет ли G-код содержать только контуры формы или заполнение замкнутых контуров. Мы можем установить скорость перемещения лазера, скорость заполнения лазером и скорость периметра.

При выборе заполнения, если мы хотим снизить интенсивность лазера в области заполнения, мы можем добавить значение ШИМ к команде M106, чтобы установить интенсивность лазера, например, M106 S128 для 50% мощности лазера. Мы могли бы добиться аналогичного эффекта, если бы оставили мощность лазера равной 100%, но увеличили скорость перемещения в области заполнения. Итак, на самом деле это настройки, с которыми мы должны поиграть, чтобы увидеть, что лучше всего подходит для нас.

Во вкладке «Настройки» мы можем выбрать «Удалить крошечные пути заполнения», а на вкладке «Ограничивающая рамка» мы можем выбрать «Создать G-код для предварительного просмотра ограничивающей рамки». Эта функция очень полезна, поскольку она генерирует G-код предварительного просмотра области, где будет происходить рисование, и поэтому мы можем точно расположить нашу рабочую деталь.

Итак, как только мы сгенерируем G-код, мы можем загрузить его в программу Repetier-Host. Поскольку это не 3D-печать, а просто перемещения, мы должны установить флажок «Показать перемещения», чтобы просмотреть наш G-код.

Наконец-то мы можем нажать кнопку «Печать», и наш робот SCARA выполнит лазерную гравировку заготовки. Я уже говорил, что наблюдать за лазерной гравировкой этого робота SCARA очень приятно, и мы можем гравировать лазером так много вещей с его помощью.

Хорошей особенностью является то, что он имеет регулируемую ось Z, что означает, что мы можем лазером гравировать более высокие объекты, как, например, этот деревянный ящик для моих бит Форстнера. Я выгравировал свой логотип на передней части и текст «Forstner Bits» на обратной стороне коробки.

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

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

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

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

В прошивке Marlin я установил нулевую позицию в левом нижнем углу заготовки, которая находится на расстоянии 300 мм от робота по оси X и 150 мм по оси Y. Мы должны помнить о знаках при определении этих значений. В соответствии с этим я также изменил переменные MANUAL_X и Y_HOME_POS.

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

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

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

Для рисования я загрузил изображение и преобразовал его в векторное изображение с помощью инструмента Trace Bitmap.

Затем я изменил масштаб и расположил изображение так, как хотел, и с помощью инструмента «Стереть» я удалил области, где находится робот, и область, которая находится вне досягаемости робота.

Затем я сгенерировал G-код, позволив машине делать свою работу. На лазерную гравировку этого рисунка ушло 4 часа.

 

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

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

Подведение итогов

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

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

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

VL53L0X Времяпролетный датчик расстояния: Руководство по Arduino для начала работы

VL53L0X, времяпролетный датчик расстояния, измеряющий расстояние с помощью Arduino, как никто другой! Датчик VL53L0X содержит запатентованную технологию ST FlightsenseTM наряду с передовым массивом SPAD в самом маленьком корпусе модулей лазерного дальномера на рынке!

В сегодняшнем блоге я расскажу:

  • Что такое датчик VL53L0X? Введение
  • Модуль VL53L0X
  • VL53L0X Руководство по Arduino

Этот блог также будет включать техническое описание VL53L0X и руководство пользователя API в разделе «Ресурсы»!


Датчик VL53L0X: обзор

Представляем самый маленький в мире датчик дальности полета и обнаружения жестов VL53L0X. Являясь частью нового поколения модулей лазерной локации ST, он обеспечивает точное измерение расстояния, в отличие от других датчиков приближения!

Изображение предоставлено: STMicroelectronics

Несмотря на небольшой форм-фактор, он по-прежнему содержит множество функций, а именно:

  1. Полностью интегрированный миниатюрный модуль
    • 940-нм лазер VCSEL
    • Драйвер VSCEL
    • Датчик ранжирования встроенный микроконтроллер
    • 4,4 x 2,4 x 1,0 мм (да, такой маленький!)
  2. Быстрое и точное определение расстояния
    • Измерение до 2 м (абсолютный диапазон)
    • Сообщаемый диапазон не зависит от отражательной способности мишени
    • Усовершенствованная встроенная компенсация перекрестных оптических помех для упрощения выбора покровного стекла
  3. Безопасное использование в соответствии с IEC
    • Лазерное устройство класса 1, соответствующее последнему стандарту IEC 60825-1:2014 – 3-я редакция
  4. Простая интеграция
    • Одиночный оплавляемый компонент
    • Без дополнительной оптики
    • Требуется только один блок питания
    • Управление устройством и передача данных осуществляется через интерфейс I2C
    • Xshutdown (сброс) и прерывание GPIO
    • Программируемый адрес I2C

В восторге от всех этих функций? Есть больше! VL53L0X широко применим, удовлетворяя все ваши потребности! Ниже приведены приложения:

  • Обнаружение пользователей для персональных компьютеров/ноутбуков/планшетов и IoT (энергосбережение)
  • Обнаружение препятствий с помощью роботов (робототехника)
  • Бытовая техника (обнаружение рук в автоматических кранах, дозаторах мыла и т. д.)
  • Одномерное распознавание жестов
  • Лазерная автофокусировка. Улучшает и ускоряет работу системы автофокусировки камеры, особенно в сложных сценах (низкий уровень освещенности, низкая контрастность) или в режиме динамичного видео
Почему VL53L0X лучше других датчиков приближения?
VL53L0X (времяпролетная технология) Другие датчики приближения (ИК-технология)
Как измеряется расстояние Прямое измерение расстояния до объекта на основе времени отражения излучаемых фотонов Измерение расстояния до объекта на основе количества отраженного от него света
Затронутые переменные Не зависит от характеристик объекта: размера, размеров, используемых материалов и т. д. Влияет на характеристики объекта
Влияет на факторы окружающей среды; условия освещения

Поскольку VL53L0X использует времяпролетную технологию для измерения расстояния, он нечувствителен к внешним переменным, таким как характеристики объекта. Это делает его гораздо более точным вариантом по сравнению с другими датчиками приближения, такими как ИК-технология, как видно!

Интересный факт!

Изображение предоставлено: Digikey

Знаете ли вы, что до появления VL53L0X первые пользователи технологии датчиков времени полета — это то, что вы видите выше? Да, Microsoft Kinect для XBOX 360!

Затем технология контроллера Kinect была уменьшена, улучшена и упрощена для создания датчиков измерения расстояния, как в вашем VL53L0X!


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

Чтобы начать работу с датчиком VL53L0X, вам понадобится модуль, который интегрирует его для упрощения взаимодействия с микроконтроллером. Это Grove — Time of Flight Distance Sensor, основанный на VL53LOX, и он делает именно это!

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

Характеристики Детали
Рабочее напряжение 3,3 В / 5 В
Рабочая температура -20℃ – 70℃
Рекомендуемое расстояние измерения 30–1000 мм
(3–100 см)
Разрешение 1 мм
Инфракрасный излучатель 940 нм
Скорость автобуса Последовательная шина до 400 кГц (режим FAST)
Адрес IIC 0x29

Помимо технических характеристик, Grove – Flight of Time Distance содержит точно такие же функции, возможности применения и многое другое!

Почему выбран этот датчик по сравнению с другими датчиками VL53L0X?

Вы можете найти другие разделительные платы, датчики, модули и т. д. VL53L0X, но что делает Grove – Time of Flight Distance Sensor именно тем, что вам нужно? Вот почему!

Простота сопряжения VL53L0X с Arduino через собственную систему Grove от Seeed

Система Grove от Seeed является собственной инициативой, в основном направленной на то, чтобы помочь таким же пользователям, как вы, легко использовать различные модули с помощью нашей системы plug and play!

Это означает, что больше не нужно использовать запутанные и сложные перемычки, пайку, макетирование или отладку электронных схем!

Нравится, насколько он прост и менее запутан по сравнению с другими модулями VL53L0X?

Все, что вам нужно, это Grove Base Shield вместе с Arduino, и все готово! Переключитесь на использование Grove сегодня!


VL53L0X Руководство по Arduino

Мы говорили о VL53L0X, и теперь пришло время для момента, которого вы ждете; Как соединить VL53L0X с Arduino? Вот руководство, которое поможет вам начать прямо сейчас!

Примечание. Этот модуль также совместим с Raspberry Pi, но пользователи должны написать свою собственную библиотеку программного обеспечения, поскольку невозможно предоставить библиотеку программного обеспечения/демонстрационный код для всех платформ

Что вам понадобится:
  • Seeeduino V4.2
  • Grove Base Shield
  • Grove — датчик расстояния во время полета

* Seeeduino — это собственная плата Arduino Seeed, созданная с преимуществами по сравнению с обычными платами Arduino.

Конфигурации оборудования:
  • Шаг 1: Подключите Grove — Time of Flight Sensor к порту IIC Grove-Base Shield
  • Шаг 2: Подключите Grove — Base Shield к Seeeduino
    1 3: 3: Подключите Seeeduino к ПК через USB-кабель

Теперь после сопряжения он должен выглядеть примерно так:

Конфигурации программного обеспечения
  • Шаг 1: Загрузите библиотеку VL53L0X с Github
  • Шаг 2: Извлеките файл Grove-Ranging-sensor-VL53L0X-master. zip в папку библиотеки Arduino .

Примечание. Например, я загружаю эту библиотеку в папку D:\Software\WorkWork\arduino-1.8.5\libraries , поэтому распаковать zip-файл нужно только сюда. В общем, убедитесь, что папка Grove-Ranging-sensor-VL53L0X-master находится в папке вашей библиотеки Arduino, как показано на рисунке ниже.

  • Шаг 3: Откройте папку Grove-Ranging-sensor-VL53L0X-master\examples , которую вы только что извлекли, вы увидите пять подпапок:

Вы можете выбрать другой пример в соответствии с вашими потребностями, вы можете выбрать другой пример. Затем дважды щелкните файл xxx.ino , чтобы открыть IDE Arduino.

  • Шаг 4: Загрузите демоверсию. Если вы не знаете, как это сделать, проверьте, как загрузить код 9.0084
  • Шаг 5: Откройте Serial Monitor в Arduino IDE, нажав Tool-> Serial Monitor . Или одновременно нажмите клавиши CTRL+Shift+M.

Если все пойдет хорошо, вы должны получить следующий результат:

 время измерения: 205
Измеренное расстояние: 115 мм
время измерения: 205
Измеренное расстояние: 117 мм
время измерения: 205
Измеренное расстояние: 120 мм
время измерения: 205
Измеренное расстояние: 125 мм
время измерения: 204
Измеренное расстояние: 130 мм
время измерения: 205
Измеренное расстояние: 138 мм
время измерения: 205
Измеренное расстояние: 143 мм
время измерения: 205
Измеренное расстояние: 144 мм
время измерения: 205
Измеренное расстояние: 152 мм 

Ресурсы
  • [ZIP] Гроув-времени датчика расстояния полета VL53L0X Files
  • [PDF] VL53L0X Manual
  • 4 [PDF] VL53L0X DATE
  • [PDF] VL53L0X [PDF].

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

    Если вам понравилось то, что вы увидели в сегодняшнем блоге, я настоятельно рекомендую датчик расстояния Grove — Flight of Time, который поможет вам легко начать работу с датчиками приближения!

    Начните строить проекты с VL53L0X уже сегодня!

    Теги: датчик расстояния, приближение, датчик приближения, датчики приближения, датчик дальности, датчики, время полета

    Как использовать датчик LiDAR с Arduino

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

    К ним относятся скорости лазерного сканирования и обработки, которые делают возможной и доступной 3D-картографию. Этот метод использует свет (точные лазерные импульсы) для отображения лежащего под ним объекта или местности (земной поверхности). Лазер направляется на поверхность объекта или рельеф местности и, попав на поверхность, отражается обратно.

    Картографирование и 3D-рисунки поверхности или местности объекта довольно просты. Каждое отражение света состоит из тысяч отдельных лучей. Эти лучи или узоры различаются по расстоянию — каждый находится на расстоянии почти 10 см друг от друга. Сканер их улавливает.

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

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

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

    В этом проекте мы будем использовать датчик LiDAR, предлагаемый SparkFun Electronics. SparkFun предоставляет предопределенную библиотеку Arduino для датчика, что идеально. Компания предлагает два варианта LiDAR (которые отличаются обновленными скоростными базами).

    LIDAR-Lite v3HP — компактный высокопроизводительный оптический дальномер от Garmin. v3HP по функциям похож на v3, но может производить выборку быстрее (почти в два раза!). Еще одно улучшение заключается в том, что эта модель v3HP более эффективна с точки зрения текущих показателей потребления.

    LIDAR-Lite v3HP имеет шесть контактов. Связь с внешним контроллером возможна по протоколу I2C с выходом с широтно-импульсной модуляцией (ШИМ). Для I2C используются контакты SDA (данные) и SCL (часы). Для PWM вставлен контакт «Mode», который переводит датчик в режим аналогового вывода.

    Теперь каждое расстояние соответствует аналоговому выходному значению, которое должно быть выбрано аналого-цифровым преобразователем (АЦП) на стороне хоста. Мы будем собирать данные, используя протокол I2C.

    Принципиальная схема для этого проекта проста. Просто соедините провода I2C датчика с контактами I2C Arduino, которые расположены на A4 и A5. Они также присутствуют в верхней части заголовка с правой стороны.

    Схема

    Код

    Для начала мы включили общую библиотеку I2C (wire.h) в скетч Arduino, а затем библиотеку LiDARLite от SparkFun. Итак, экземпляр библиотеки LiDARLite создан.

    Затем в функции настройки мы инициализировали последовательный монитор и запустили его со скоростью 9600 бит в секунду, а также определили I2C как протокол связи.

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

    Рассчитанное расстояние отображается на последовательном мониторе Arduino. Задержка в 10 мс используется после каждого сканирования, чтобы предотвратить пересечение или коллизии.

    Данные отображаются на последовательном ЖК-мониторе. Если мы наведем эти данные на 2D-платформу, то получим что-то вроде этого…

    360-градусный обзор 2D-пространства с изображением препятствий и расстояния до датчика.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *