© 2015 Vasili-photo.com
Предлагаю вашему вниманию перевод статьи Edward J. Ramaley «An Interesting Distance Meter», опубликованной в журнале «American Photography» за февраль 1939 г. В статье рассказывается о том, как из куска картона можно изготовить оригинальный оптический дальномер. Разумеется, в наши дни большинство фотокамер снабжены не то что дальномером, а полноценным автофокусом, что сильно снижает практическое значение описанного в статье примитивного устройства. Тем не менее, самодельный прибор остаётся презанятной игрушкой, с широким развлекательно-образовательным потенциалом и позволяет немного по-новому взглянуть на работу собственных глаз.
Стиль изложения может показаться местами несколько путанным, но таков он и в оригинале – я старался переводить по возможности близко к тексту.
Назначение дальномера в фотографии состоит в том, чтобы дать фотографу возможность сфокусировать объектив на предмете, не прибегая к измерению разделяющего их расстояния при помощи линейки или рулетки. Фокусировка осуществляется путём изменения расстояния между объективом и изображением в соответствии с расстоянием от объектива до предмета. Тщательная фокусировка особенно необходима, когда диаметр отверстия объектива достаточно велик по сравнению с его фокусным расстоянием. В целом, любой объектив, используемый на пределе своей светосилы, должен быть крайне аккуратно сфокусирован при съёмке близких предметов.
Оптический дальномер собирает свет через две приёмные системы, которые сопряжены таким образом, чтобы два сформированных ими изображения могли быть совмещены в одно. Надлежащая регулировка данного устройства может быть привязана к установке указателя на шкале, либо напрямую к фокусировке фотообъектива. Исходя из этого, может показаться логичным использовать непосредственно нашу собственную пару глаз в качестве оптического дальномера, что может быть реализовано несколькими способами. Один из них заключается в использовании индивидуально откалиброванной шкалы, удерживаемой на расстоянии вытянутой руки и наблюдаемой для измерения конвергенции глаз, смотрящих на объект.
Калибровка дальномера
Из картона вырезается треугольник с основанием три дюйма и высотой восемь дюймов. От окна или другого источника света откладывается наименьшая дистанция, указанная на фокусировочной шкале вашей камеры, и измеряющий становится на данную точку лицом к свету. Треугольник нужно держать напротив окна перед глазами на расстоянии вытянутой руки, используя естественное мышечное усилие, которое могло бы быть воспроизведено по желанию. Сфокусировав глаза на окне, вы убедитесь, что треугольник кажется сдвоенным, поскольку каждый глаз смотрит на него со своей собственной точки зрения. Продолжая удерживать фокус на окне, можно приложить прямую линейку поперёк треугольника, параллельно его основанию, так, чтобы она пересекала края каждого из двух мнимых треугольников в точке их взаимного пересечения. Наконец по линейке проводится линия. Этим завершается калибровка для данной дистанции.
Полная фокусировочная шкала вашей камеры наносится на картонный треугольник точно таким же способом: отступая от окна на соответствующее расстояние, определяют, где пересекаются два мнимых треугольника и проводят горизонтальную линию через это пересечение. Точность дальномера убывает с увеличением дистанции, но точно так же убывает и необходимость в критическом фокусе. Прилагающиеся рисунки показывают, как выглядит завершённый дальномер и каким он кажется, когда глаза сфокусированы на точке за ним.
Рис. 1 Дальномер (для глаз и руки автора). | Рис. 2 Вид дальномера, когда глаза сфокусированы на предмете за ним. |
DIY Ультразвуковой дальномер — Набор для сборки.
Всем доброго времени суток! Предлагаю на Ваш суд обзор очередного набора сделай сам из Китая. на этот раз собираем дальномер, диапазон измерений от 25 до 400 см. Набор приезжает в небольшом пакете, внутри есть инструкция (правда по большей части на китайском), на удивление даже со схемой и небольшая кучка деталей.
Плата, которую предстоит спаять, сделана не плохо, но номиналы компонентов не подписаны, так что без инструкции с табличкой соответствия номиналов обозначениям будет сложновато.
Кратко про элементную базу.
Контроллер STC11F02, CD4069 сборка инверторов.
CX20106A судя по описания из тех что я смог найти это предусилитель для приемника ИК сигналов пультов дистанционного управления. Рядом резисторная сборка.
Набор конденсаторов, кварц на 12 МГц и транзистор 8550
Резисторы, разъемы, кроватка под микросхему и бипер.
Ну и конечно дисплей.
А еще в пакете есть ярлык контроля ОТК с датой упаковки, ну или что-то похожее на это.
Приступаем к сборке. Деталей немного и сборка много времени не занимает, но есть пару моментов. Первое это резисторы, обычно в таких наборах резисторы идут в комплекте с бумажками где указан их номинал, тут такого нет, так что нужна либо таблица цветовой маркировки, либо мультиметр. А еще на схеме есть два резистора, один на 4,7 Ом, а второй 4,7 кОм и если не присматриваться к номиналу можно легко перепутать, как я и сделал
Второй момент — это конденсаторы, в схеме используется четыре конденсатора с маркировкой 104, а в комплекте идет две пары разных конденсаторов.
Почему именно так поступил производитель я честно не понию (может кто пояснит в коментах?), на мой взгляд тут эти конденсаторы должны работать одинаково, но на всякий случай решил посмотреть на картинку на странице заказа и разместить так как задумал создатель набора.
Дальше сборка идет просто и опять приостанавливается только на установке передатчика и приемника ультразвука. Первый вопрос — это их положение, на странице товара написано, что устанавливать их нужно навесным монтажом, не подрезая выводы и так что бы корпус не касался платы. Одним словом, как-то так.
А еще нужно максимально соблюдать параллельность установки. Еще был вопрос с полярностью, но он решается даташитом на датчики или все той же картинкой с сайта магазина И вот так сказать готовый продукт.
Подключаем к PowerBank и можно начать тестирование. После включения дальномер сразу начинает измерять расстояние и выводить результат на экран, при этом каждое измерение подтверждается пиканьем бипера. Так что первое что захотелось сделать после включения, опять взять паяльник и выпаять нафиг бипер, его постоянный писк раздражат. Но попробую все-таки сравнить результаты с лазерным дальномером. Для начала расстояние до стены в сравнении с лазерным. С одной стороны УЗ вроде бы врет на 6 см, но с другой стороны, я так и не понял какая точка отсчета в него заложена.
Теперь тест до потолка. Тут разница опять-таки примерно в 6 см.
Небольшой вывод: Если одним словом, то набор рабочий и не особо сложный для сборки. Правда не знаю можно ли практически куда-то применить полученное устройство
Заранее приношу свои извинения за орфографию и грамматику текста, все допущенные ошибки сделаны не специально, а только по незнанию и в связи с несовершенством программ автоматической проверки текстов.
Товар предоставлен для написания обзора магазином. Обзор опубликован в соответствии с п.18 Правил сайта.
Как пользоваться дальномером
При практическом использовании шкала удерживается вертикально на расстоянии вытянутой руки, в то время как глаза сфокусированы на значимой части сцены. Ноготь большого пальца скользит вверх по шкале до видимого пересечения двух треугольников, после чего взгляд можно перевести на треугольник, чтобы увидеть, какую линию отмечает ноготь, и сфокусировать камеру в соответствии с полученным значением. Казалось бы, ничего не может быть проще, однако существуют некоторые досадные помехи, о которых нельзя забывать.
Наши глаза обманывают нас. Иногда нам кажется, что мы смотрим точно на объект, но на самом деле наши глаза сфокусированы на точке в воздухе. Средство от этого – сделать несколько считываний достаточно быстро, не давая глазам времени уставать или колебаться. Повторяйте до получения согласующихся результатов. Также следует помнить, что глазной зрачок это не точка, и его размер при ярком освещении, не таков, как при тусклом. Вследствие этого, на дальнем конце шкалы возникает определённый недостаток точности, и при чтении со шкалы приходится использовать приблизительно ту же яркость, что и при калибровке. Этот эффект уменьшается, если производить калибровку при умеренно ярком освещении, а непосредственно перед считыванием посмотреть на свет такой же интенсивности.
Математическое отношение и обоснование для данного прибора показаны на рис. 3, и, как можно увидеть, расстояние между глазами весьма существенно для больших расстояний. Смысл в том, что если шкала откалибрована в светлой комнате и используется также в светлой комнате, расстояние между глазами не меняется. Меж тем, в тёмных местах глазной зрачок расширяется, преувеличивая, таким образом, одни значения и преуменьшая другие.
Другой источник нестабильности, а именно трудность удерживания шкалы всегда на одном и том же расстоянии, очень легко преодолевается посредством очень небольшой практики, использованием естественного положения и комфортного мышечного усилия. Погрешности в удерживании треугольника особенно значимы на ближних дистанциях.
Это устройство не приспособлено для коммерческого производства, поскольку оно должно соответствовать определённой паре глаз и конкретной руке. Оно ничего не стоит и может быть изготовлено за полчаса, но при использовании с должным вниманием, оно превращает пару зорких глаз в отличный дальномер, который не требует себе оправдания. Продолжительное использование этого прибора в процессе фотографирования играющих детей с близкого расстояния и при открытой диафрагме позволило получить множество вполне удовлетворительных негативов и продемонстрировало полезность устройства.
Рис.3 Кривые, показывающие зависимость длины меток на шкале от расстояния до объекта при длине руки 27 дюймов и различных расстояниях между глазами. CD – длина линии на шкале в дюймах. BE – расстояние от глаз до объекта в футах. AB – расстояние между глазами в дюймах.
***
Самодельный сканирующий лазерный дальномер
В этой статье я расскажу о том, как я делал самодельный лазерный сканирующий дальномер, использующий триангуляционный принцип измерения расстояния, и об опыте его использования на роботе.
Зачем нужен сканирующий дальномер?
На сегодняшний день в робототехнике не так уж и много методов навигации внутри помещений. Определение положения робота в пространстве с использованием лазерного сканера — один из них. Важное достоинство этого метода — он не требует установки в помещении каких-либо маяков. В отличие от систем, использующих распознавание изображения с камер, обработка данных с дальномера не так ресурсоемка. Но есть и недостаток — сложность, и соответственно, цена дальномера. Традиционно в робототехнике используются лазерные сканеры, использующие фазовый или времяпролетный принцип для измерения расстояния до объектов. Реализация этих принципов требует довольно сложной схемотехники и дорогих деталей, хотя и характеристики при этом получаются приличные — используя эти принципы, можно добиться высокой скорости сканирования и большой дальности измерения расстояния. Но для домашних экспериментов в робототехнике такие сканеры мало подходят — цена на них начинаются от 1000$. На помощь приходят дальномеры, использующие триангуляционный принцип измерения расстояния. Дальномер такого типа впервые появился в роботах-пылесосах Neato:
Довольно быстро любители расшифровали протокол этого дальномера, и начали использовать его в своих проектах. Сами дальномеры в качестве запчастей появились на ebay в небольших количествах по цене около 100$. Через несколько лет китайская компания смогла выпустить сканирующий дальномер RPLIDAR, который поставлялся как полноценный прибор, а не запчасть. Только цена этих дальномеров оказалась достаточно высокой — 400$.
Самодельный дальномер
Как только я узнал о дальномерах Neato, мне захотелось собрать самому аналогичный. В конце концов, мне это удалось, и процесс сборки я описал на Робофоруме. Первая версия дальномера:
Позже я сделал еще одну версию дальномера, более пригодную для использования на реальном роботе, но и ее качество работы не полностью устроило меня. Настало время третьей версии дальномера, и именно она будет описана далее.
Устройство сканирующего триангуляционного лазерного дальномера
Принцип измерения расстояния до объекта основан на измерении угла между лазерным лучом, попадающим на объект, и объективом дальномера. Зная расстояние лазер-объектив (h) и измеренный угол, можно вычислить расстояние до объекта — чем меньше угол, тем больше расстояние. Принцип хорошо иллюстрирует картинка из статьи:
Таким образом, ключевые оптические компоненты такого дальномера — лазер, объектив и фотоприемная линейка. Так как дальномер сканирующий, то все эти детали, а так же управляющая электроника устанавливаются на вращающейся головке. Тут может возникнуть вопрос — зачем нужно вращать оптику и электронику, ведь можно установить вращающееся зеркало? Проблема в том, что точность дальномера зависит от расстояния между объективом и лазером (базового расстояния), так что оно должно быть достаточно большим. Соответственно, для кругового сканирования понадобится зеркало диаметром, большим базового расстояния. Дальномер с таким зеркалом получается достаточно громоздким. Сканирующая головка дальномера при помощи подшипника закрепляется на неподвижном основании. На нем же закрепляется двигатель, вращающий головку. Также в состав дальномера должен входить энкодер, предназначенный для получения информации о положении головки. Как видно, дальномеры Neato, RPLIDAR и мои самодельные сделаны именно по этой схеме.
Самое сложное в самодельном дальномере — изготовление механической части. Именно ее работа вызывала у меня больше всего нареканий в ранних версиях дальномера. Сложность заключается в изготовлении сканирующей головки, которая должна быть прочно закреплена на подшипнике, вращаться без биений и при этом не нее нужно каким-то образом передавать электрические сигналы. Во второй версии дальномера первые две проблемы я решил, использовав части старого HDD — сам диск использовался как основание сканирующей головки, а двигатель, на котором он закреплен, уже содержал качественные подшипники. В то же время, при этом возникла третья проблема — электрические линии можно было провести только через небольшое отверстие в оси двигателя. Мне удалось сделать самодельный щеточный узел на 3 линии, закрепленный в этом отверстии, но получившаяся конструкция получилась шумной и ненадежной. При этом возникла еще одна проблема — линии, чтобы пробросить сигнал энкодера, не было, и датчик энкодера в такой конструкции должен быть установлен на головке, а диск энкодера с метками — на неподвижном основании. Диск энкодера получился не жестким, и это часто вызывало проблемы. Фотография второй версии дальномера:
Еще один недостаток получившегося дальномера — низкая скорость сканирования и сильное падение точности на расстояниях больше 3м. Именно эти недостатки я решил устранить в третьей версии дальномера.
Электроника
В принципе, электронная часть триангуляционного дальномера достаточно проста и содержит всего два ключевых компонента -светочувствительную линейку и микроконтроллер. Если с выбором контроллера проблем нет, то с линейкой все значительно сложнее. Светочувствительная линейка, используемая в подобном дальномере, должна одновременно иметь достаточно высокую световую чувствительность, позволять считывать сигнал с высокой скоростью и иметь маленькие габариты. Различные CCD линейки, применяемые в бытовых сканерах, обычно довольно длинные. Линейки, используемые в сканерах штрихкодов — тоже не самые короткие и быстрые. В первой и второй версии дальномера я использовал линейки TSL1401 и ее аналог iC-LF1401. Эти линейки хорошо подходят по размеру, они дешевые, но содержат всего 128 пикселей. Для точного измерения расстояния до 3 метров этого мало, и спасает только возможность субпискельного анализа изображения. В третьей версии дальномера я решил использовать линейку ELIS-1024:
Однако купить ее оказалось непросто. У основных поставщиков электроники этих линеек просто нет. Первая линейка, которую я смог купить на Taobao, оказалась нерабочей. Второю я купил на Aliexpress (за 18$), она оказалась рабочей. Обе линейки выглядели паянными — обе имели облуженные контакты и, судя по маркировке, были изготовлены в 2007 году. Причем даже на фотографиях у большинства китайских продавцов линейки именно такие. Похоже, что действительно новую линейку ELIS-1024 можно купить только напрямую у производителя. Светочувствительная линейка ELIS-1024, как следует из названия, содержит 1024 пикселя. Она имеет аналоговый выход, и достаточно просто управляется. Еще более хорошими характеристиками обладает линейка DLIS-2K. При сходных размерах, она содержит 2048 пикселей и имеет цифровой выход. Насколько мне известно, именно она используется в дальномере Neato, и возможно, в RPLIDAR. Однако, найти ее в свободной продаже очень сложно, даже в китайских магазинах она появляется не часто и дорого стоит — более 50$.
Так как я решил использовать линейку с аналоговым выходом сигнала, то микроконтроллер дальномера должен содержать достаточно быстрый АЦП. Поэтому я решил использовать серию контроллеров — STM32F303, которые, при относительно небольшой стоимости, имеют несколько быстрых АЦП, способных работать одновременно. В результате у меня получилась такая схема:
Сигнал с линейки (вывод 10) имеет достаточно высокий уровень постоянной составляющей, и ее приходится отфильтровывать при помощи разделительного конденсатора. Далее сигнал нужно усилить — для этого используется операционный усилитель AD8061. Далеко расположенные объекты дают достаточно слабый сигнал, так что пришлось установить коэффициент усиления равным 100. Как оказалось в результате экспериментов, даже при отсутствии сигнала, на выходе выбранного ОУ по какой-то причине постоянно присутствует напряжение около 1.5В, что мешает обработке результатов и ухудшает точность измерения амплитуды сигнала. Для того, чтобы избавится от этого смещения, мне пришлось подать дополнительное напряжение на инвертирующий вход ОУ. 3D рендер разведенной печатной платы:
Плату разводил двухстороннюю, сделать такую плату в домашних условиях качественно довольно сложно, так что заказал изготовление плат в Китае (пришлось заказать сразу 10 штук):
В этом дальномере я использовал дешевый объектив с резьбой M12, имеющий фокусное расстояние 16мм. Объектив закреплен на печатной плате при помощи готового держателя объектива (такие используются в различных камерах). Лазер в данном дальномере — инфракрасный (780 нм) лазерный модуль, мощностью 3.5 мВт. Изначально я предполагал, что излучение лазера нужно будет модулировать, но позже оказалось, что с используемой линейкой в этом нет смысла, и поэтому сейчас лазер включен постоянно. Для проверки работоспособности электроники была собрана вот такая конструкция, имитирующая сканирующую головку дальномера:
Уже в таком виде можно было проверить, какую точность измерения расстояния позволяет обеспечить дальномер. Для анализа сигнала, формируемого линейкой, были написаны тестовые программы для микроконтроллера и ПК. Пример вида сигнала с линейки (объект на расстоянии 3 м).
Изначально схема была не совсем такая, как приведена выше. В ходе экспериментов мне пришлось частично переделать изначальную схему, так что, как видно из фотографий, некоторые детали пришлось установить навесным монтажом.
Механическая часть
После того, как электроника была отлажена, настало время изготовить механическую часть. В этот раз я не стал связываться с механикой из HDD, и решил изготовить механические детали из жидкого пластика, заливаемого в силиконовую форму. Эта технология подробно описана в Интернете, в том числе и на Гиктаймс. Уже после того, как я изготовил детали, стало понятно, что изготовить детали на 3D принтере было бы проще, они могли выйти тверже, и возможно, можно было бы сделать одну деталь вместо двух. Доступа к 3D принтеру у меня нет, так что пришлось бы заказывать изготовление детали в какой-либо компании. Фото одной из деталей сканирующей головки дальномера:
Эта деталь является основой головки. Она состоит из втулки, на которую позже надевается подшипник, и диска. Диск предназначен для крепления второй детали башни, кроме того, на него снизу наклеивается диск энкодера. Втулка и диск содержат сквозное отверстие, в которое вставляется покупной щеточный узел на 6 линий — его видно на фотографии. Именно те провода, что видны на фотографии, могут вращаться относительно корпуса этого узла. Для повышения стабильности работы для передачи сигналов GND и UART TX используется 2 пары линий щеток. Оставшиеся 2 линии используются для передачи напряжения питания и сигнала энкодера.
Силиконовая форма для отливки этой детали:
Вторая деталь сканирующей головки была изготовлена тем же способом. Она предназначена для крепления печатной платы и лазера к диску. К сожалению, фотографий изготовления этой детали у меня не сохранилось, так что ее можно увидеть только в составе дальномера.
Для крепления сканирующей головки к основанию дальномера используется шариковый подшипник. Я использовал дешевый китайский подшипник 6806ZZ. Честно говоря, качество подшипника мне не понравилось — ось его внутренней втулки могла отклонятся относительно оси внешней на небольшой угол, из-за чего головка дальномера тоже немного наклоняется. Крепление подшипника к детали с диском и основанию будет показано ниже.
Основание я сделал из прозрачного оргстекла толщиной 5 мм. К основанию крепится подшипник, датчик энкодера, двигатель дальномера и маленькая печатная плата. Само основание устанавливается на любую подходящую поверхность при помощи стоек. Вот так выглядит основание дальномера снизу:
Печатная плата содержит регулируемый линейный стабилизатор напряжения для питания двигателя, и площадки для подключения проводов узла щеток. Сюда же подводится питание дальномера. Как и в других дальномерах, двигатель вращает сканирующую головку при помощи пассика. Для того, чтобы он не сваливался с втулки, на ней имеется специальное углубление. Как видно из фотографии, подшипник закреплен в основании при помощи трех винтов. На сканирующей головке подшипник удерживается за счет выступа на втулке и прижимается к ней другими винтами, одновременно удерживающими щеточный узел.
Энкодер состоит из бумажного диска с напечатанными рисками и оптопары с фототранзистором, работающей на отражение. Оптопара закреплена при помощи стойки на основании так, что плоскость диска оказывается рядом с ней:
Сигнал от оптопары через щетки передается на вход компаратора микроконтроллера. В качестве источника опорного напряжения для компаратора выступает ЦАП микроконтроллера. Для того, чтобы дальномер мог определить положение нулевого угла, на диск энкодера нанесена длинная риска, отмечающая нулевое положение головки (она видна справа на фотографии выше).
Вот так выглядит собранный дальномер:
Вид сверху:
Разъем сзади дальномера используется для прошивки микроконтроллера. Для балансировки сканирующей головки на нее спереди устанавливается крупная гайка — она практически полностью устраняет вибрацию при вращении головки.
Собранный дальномер нужно отюстировать — установить лазер в такое положение, чтобы отраженный от объектов свет попадал на фотоприемную линейку. Обе пластмассовые детали содержат соосные отверстия, располагающиеся под пазом лазера. В отверстия вворачиваются регулировочные винты, упирающиеся в корпус лазера. Поворачивая эти винты, можно изменять наклон лазера. Наблюдая в программе на компьютере форму и амплитуду принятого сигнала и изменяя наклон лазера, нужно добиться максимальной амплитуды сигнала. Также триангуляционные дальномеры требуют проведения калибровки, о чем я писал ранее:
Для того, чтобы при помощи датчика можно было измерять расстояние, нужно произвести его калибровку, т.е. определить закон, связывающий результат, возвращаемый датчиком, и реальное расстояние. Сам процесс калибровки представляет собой серию измерений, в результате которых формируется набор расстояний от датчика до некоторого объекта, и соответствующих им результатов.
В данном случае калибровка представляла собой серию измерений расстояний до различных объектов самодельным дальномером и лазерной рулеткой, после чего по полученным парам измерений выполняется регрессионный анализ и составляется математическое выражение.
Получившийся дальномер имеет существенный недостаток — из-за отсутствия модуляции излучения лазера он некорректно работает при любой сильной засветке. Обычное комнатное освещение (даже при использовании мощной люстры) не влияет на работу дальномера, но вот расстояние до поверхностей, прямо освещенных Солнцем, дальномер измеряет неправильно. Для решения этой проблемы в состав дальномера нужно включить интерференционный светофильтр, пропускающий световое излучение только определенной длины волны — в данном случае 780 нм.
Эволюция самодельных дальномеров:
Габаритные размеры получившегося дальномера: Размер основания: 88×110 мм. Общая высота дальномера: 65 мм (может быть уменьшена до 55 при уменьшении высоты стоек). Диаметр сканирующей головки: 80 мм (как у mini-CD диска).
Как и у любого другого триангуляционного дальномера, точность измерения расстояния этого дальномера резко падает с ростом расстояния. При измерениях расстояния до объекта с коэффициентом отражения около 0.7 у меня получились примерно такие точностные характеристики:
Расстояние | Разброс |
1 м | |
2 м | 2 см |
5 м | 7 см |
Стоимость изготовления дальномера:
DIY, $ | Опт., $ | |
Основание | ||
Пластина основания | 1,00 | 0,50 |
Двигатель | 0,00 | 1,00 |
Подшипник | 1,50 | 1,00 |
Щеточный узел | 7,50 | 5,00 |
Крепежные детали | 0,00 | 2,00 |
Сканирующая головка | ||
Контроллер STM32F303CBT6 | 5,00 | 4,00 |
Фотоприемная линейка | 18,00 | 12,00 |
Остальная электроника | 4,00 | 3,00 |
Плата | 1,50 | 0,50 |
Объектив | 2,00 | 1,50 |
Держатель объектива | 1,00 | 0,50 |
Лазер | 1,00 | 0,80 |
Пластиковые детали | 3,00 | 2,00 |
Крепежные детали | 0,00 | 1,00 |
Сборка | 0,00 | 20,00 |
Итого: | 45,50 | 54,80 |
В первой колонке — во сколько дальномер обошелся мне, во второй — сколько он мог бы стоить при промышленном изготовлении (оценка очень приблизительная).
Программная часть дальномера
Перед написанием программы нужно рассчитать тактовую частоту, на которой будет работать фотоприемная линейка. В старых версиях дальномера частота сканирования была ограничена 3 Гц, в новом дальномере я решил сделать ее выше — 6Гц (это учитывалось при выборе линейки). Дальномер делает 360 измерений на один оборот, так что при указанной скорости он должен быть способен производить 2160 измерений в секунду, то есть одно измерение должно занимать менее 460 мкс. Каждое измерение состоит из двух этапов — экспозиция (накопление света линейкой) и считывание данных с линейки. Чем быстрее будет произведено считывание сигнала, тем длиннее может быть время экспозиции, а значит, и тем больше будет амплитуда сигнала. При тактовой частоте линейки 8 МГц время считывания 1024 пикселей будет составлять 128 мкс, при 6 МГц — 170 мкс.
При тактовой частоте микроконтроллера серии STM32F303 в 72 МГц максимальная частота выборок АЦП — 6 MSPS (при разрядности преобразования 10 бит). Так как я хотел проверить работу дальномера при тактовой частоте линейки 8 МГц, я решил использовать режим работы АЦП, в котором два АЦП работают одновременно (Dual ADC mode — Interleaved mode). В этом режиме по сигналу от внешнего источника начала запускается ADC1, а затем, через настраиваемое время, ADC2:
Как видно из диаграммы, суммарная частота выборок АЦП в два раза выше, чем частота триггера (в данном случае это сигнал от таймера TIM1). При этом TIM1 также должен формировать сигнал тактовой частоты для фотоприемной линейки, синхронный с выборками АЦП. Чтобы получить с одного таймера два сигнала с частотами, различающимися в два раза, можно переключить один из каналов таймера в режим TIM_OCMode_Toggle, а второй канал должен формировать обычный ШИМ сигнал.
Структурная схема программы дальномера:
Ключевой частью программы является именно захват данных с линейки и управление ей. Как видно из схемы, этот процесс идет на аппаратном уровне, за счет совместной работы TIM1, ADC1/2 и DMA. Для того, чтобы время экспозиции линейки было постоянным, используется таймер TIM17, работающий в режиме Single Pulse.
Таймер TIM3 генерирует прерывания при срабатывании компаратора, соединенного с энкодером. За счет этого рассчитывается период вращения сканирующей головки дальномера и ее положение. По полученному периоду вращения рассчитывается период таймера TIM16 таким образом, чтобы он формировал прерывания при повороте головки на 1 градус. Именно эти прерывания служат для запуска экспозиции линейки.
После того, как DMA передаст все 1024 значения, захваченные ADC, в память контроллера, программа начинает анализ эти данных: сначала производится поиск положения максимума сигнала с точностью до пикселя, затем, при помощи алгоритма поиска центра тяжести — с более высокой точностью (0.1 пикселя). Полученное значение сохраняется в массив результатов. После того, как сканирующая головка сделает полный оборот, в момент прохождения нуля этот массив предаются в модуль UART при помощи еще одного канала DMA.
Использование дальномера
Качество работы этого дальномера, как предыдущих, проверялось при помощи самописной программы. Ниже пример изображения, формируемого этой программой в результате работы дальномера: Однако дальномер делался не для того, чтобы просто лежать на столе — он был установлен на старый пылесос Roomba 400 вместо дальномера второй версии:
Также на роботе установлен компьютер Orange Pi PC, предназначенный для управления роботом и связи с ним. Как оказалось, из-за большой просадки напряжения на линейном источнике питания двигателя дальномера, для работы на скорости 6 об/сек дальномеру требуется питающее напряжение 6В. Поэтому Orange Pi и дальномер питаются от отдельных DC-DC преобразователей.
Для управления роботом и анализа данных от дальномера я использую ROS. Данные от дальномера обрабатываются специальным ROS-драйвером (основанном на драйвере дальномера Neato), который получает по UART данные от дальномера, пересчитывает их в расстояния до объектов (используя данные калибровки) и публикует их в стандартном формате ROS. Вот так выглядит полученная информация в rviz (программа для визуализации данных ROS), робот установлен на полу:
Длина стороны клетки — 1 метр.
После того, как данные попали в ROS, их можно обрабатывать, используя уже готовые пакеты программ. Для того, чтобы построить карту квартиры, я использовал hector_slam. Для справки: SLAM — метод одновременного построения карты местности и определения положения робота на ней. Пример получившейся карты квартиры (форма несколько необычна, потому что дальномер «видит» мебель, а не стены, и не все комнаты показаны):
ROS позволяет объединять несколько программ («узлов» в терминологии ROS), работающих на разных компьютерах, в единую систему. Благодаря этому, на Orange Pi можно запускать только ROS-драйверы Roomba и дальномера, а анализ данных и управление роботом вести с другого компьютера. При этом эксперименты показали, что hector_slam нормально работает и на Orange Pi, приемлемо загружая процессор, так что вполне реально организовать полностью автономную работу робота.
Система SLAM благодаря данным от дальномера позволяет роботу определять свое положение в пространстве. Используя данные о положении робота и построенную карту, можно организовать навигационную систему, позволяющую «направить» робота в указанную точку на карте. ROS содержит в себе пакет программ для решения этой задачи, но, к сожалению, я так и не смог заставить его качественно работать.
Видео работы дальномера:
Более подробное видео построения карты при помощи hector_slam:
Исходные коды программы контроллера
Послесловие переводчика
Нельзя не отдать должное изобретательности автора, хотя литературная сторона статьи, конечно, оставляет желать.
Мне не вполне ясно, каким образом изменение размера зрачка может влиять на расстояние между зрачками. Очевидно, автор подразумевает не расстояние между центрами зрачков, а скорее расстояние между их медиальными краями. По-моему это не совсем правильно. В конце концов, оптическая ось глаза проходит именно через центр зрачка, а потому для наших целей важно именно расстояние между центрами зрачков, которое не зависит от их диаметра. Правда, при расширении зрачка (мидриазе) происходит уменьшение глубины резко изображаемого пространства, в результате чего объекты не в фокусе (в том числе сдвоенный треугольник дальномера) будут выглядеть несколько более размытыми. Это немного снижает точность измерения, но не настолько, чтобы этому факту стоило уделять особое внимание.
Рис.4 Примерно так выглядит метрический дальномер. |
Прецезионность калибровки дальномера эмпирическим путём, т.е. буквально на глаз, также вызывает у меня определённые сомнения. Слишком уж неточен метод измерения (особенно для дальних дистанций), чтобы применять его при разметке эталонной шкалы. На мой взгляд, расположение горизонтальных меток на шкале дальномера лучше рассчитать. Я даже придумал алгоритм, который способен облегчить эту задачу. Всё что вам нужно, это попросить кого-нибудь измерить расстояние между центрами ваших зрачков (глаза при этом должны смотреть вдаль), а также расстояние от глаз до шкалы дальномера, удерживаемого в вытянутой руке, после чего подставить полученные цифры в соответствующие ячейки формы и нажать на кнопку «Построить таблицу». Для каждой дистанции вы получите высоту соответствующей горизонтальной метки, считая от снования треугольника, а также её длину (отрезок CD на рисунке 3). Все величины, само собой разумеется, метрические.
Юный техник — для умелых рук 1972-10, страница 2
Наш опытный полигон
КИЗЛЯРСКИЙ «ф
ВЫСОТОМЕР
На соревнованиях ракетных моделей высоту, достигнутую моделью, измеряют с помощью теодолитов или зенитных труб.
Активисты Кизлярской республиканской станции юных техников (Дагестанская Автономная ССР) создали оригинальный высотомер, состоящий из угломера и калькулятор.»:.
Угломер (рис. вверху) изготовлен из двух трубок. Вертикальная трубка 1 припаивается к средней части горизонтальной трубки 2. Внутрь горизонтальной трубки введен стержень 3 с резьбой на концах. На один конец стержня надевают 2—3 шайбы 4, навинчивают гайку 5 и надевают круглый транспортир 6. Этот транспортир вычерчен на бумаге, наклеенной на 6—10-мм фанерный диск 7, который привинчивается гайкой 8 и контргайкой, углубленными в фанеру так, чтобы выступающая часть гайки находилась на одном уровне с плоскостью транспортира. На этом лв конце трубки припаивается крючок 9, с которого через центр транспортира опущен отвес 10 с грузом 11. Точность измерений зависит от того, как близка нить отвеса к плоскости транспортира. С другой стороны трубки 2 на стержень надевают 2—3 шайбы 12, спиральную пружину 13 и, сжимая пружину, навинчивают гайку 14. Затем надевают визирный стержень 15, для чего в пластине 16, припаянной к его середине, имеется отверстие, закрепляют его колпачком 17. На концах визирного стержня укреплены целеискатели — малый 19 и больше 18 — кольца с перекрещенными нитями или прозрачны» диски из целлулоида, плексигласа с перекрещенными черными рисками. Кольца можно согнуть из жести, а перекрестья из тонкой проволоки впаять.
В нижней части вертикальной трубки укреплен диск 20 с фланцем 21 и стрелкой-указателем 22. Диск крепится к трубке винтом 23. Вертикальной трубкой высотомер над*1 Бается на стержень 24. На этот стержень надет кругла транспортир 25, закрепленный двумя гайками и контргайкой. Вертикальный стержень ввинчивается в штатив.
Для измерения высоты, достигнутой моделью ракеты, на расстоянии 300 м от старта строго по ветру устанавливают два угломера. Руководитель по телефону командует: «Приготовиться!» По этой команде наблюдатели совмещают перекрещенные нити приборов с моделью на старте, проверяют установку отвеса и стрелки на нулях шкал, а затем следят за моделью в полете. Дальномерщик должен научиться совмещать перекрестья прибора с летящей ракетой. Сопроводив ракету до ее верхней точки подъема, наблюдатель читает показания на шкалах и передает их руководителю. Руководитель определяет высоту по номограмме.
Номограмма строится на миллиметровке, наклеенной Л4 жесткую основу. Внизу радиусом примерно в поповну базиса наносятся полуокружности, разбиваемые на градусы. В их центрах вбивают гвоздики и закрепляют нити.
На планшете нитками устанавливают соответствующие углы и на пересечении нитей получают высоту полета модели, спроектированную на вертикальную шкалу номограммы.
Однако этот метод можно применять только в том случае, если модель находится в плоскости приборов. Если же она выходит из плоскости приборов, то получится ошибка (при азимутальном угле в 30° — в 1,5 раза). Поэтому следует прибегать к более сложным построениям на калькуляторч. учитывающим и азимутальные углы.
Для измерения этих углов угломер имеет горизонталь), расположенную шкалу-транспортир и указатель.
Калькулятор (рис. внизу) представляет собой фанерный планшет 1 размером 300 X 300 мм, на противоположных сторонах которого приклеены горизонтальные транспортиры 2. В центрах этих транспортиров укрепляются вертикальные оси 3, на которых вращаются вертикальные транспортиры 4, наклеенные на фанеру. В центрах вертикальных транспортиров на горизонтальных осях 5 гайками 6 подвижно укреплены указатели 7. Они имеют изогнутые колена 8, через которые возможно ближе к транспортирам натянуты нити 9 для уточнения отсчета. На указатель надеваются фиксаторы 10 с ручками и пружины 11, закрепленные неподвижными шайбами 12. К фиксаторам припаяны держатели 13, которые не дают указателям отклоняться от плоскости транспортира.
Перекрещивание указателей определит точку нахождения модели в пространстве. При помощи подставки 14, на которой вертикально укреплена шкала 15, имеющая начало на высоте осей транспортиров, определяем высоту до точки перекрещивания указателей. Пользуясь заданным масштабом, определяем высоту, достигнутую моделью.
Г. УЛЬ ЧВННО, руководитель нрушна космического моделирования Низлярсной С ЮТ ДЛССР
2
Электронные (цифровые) барометры своими руками
Откалиброванный на заводе тензодатчик и дискриминатор — основа цифрового прибора. Эти и другие компоненты можно приобрести на Aliexpress, в радиомагазинах, в интернете.
Электронный барометр своими руками собирается на базе микродатчиков, микросхем (контроллеров). Нам потребуется тензосенсор MPX 2200 AP. При нормальном давлении 1 000 гПа напряжение на его выходе равно 100×0.2 мВ = 20 мВ. Можно также к схеме приспособить вольтметр, но для нашей ситуации в этом нет необходимости, так как в большинстве случаев достаточно наблюдать изменения в сторону повышения/понижения. Индикатор сделаем в форме шкалы из нескольких светодиодных элементов.
Потребуются, кроме указанных, такие элементы:
Схема:
Питания на сенсор подается от «кроны» 9 В (выводы 1 и 3). Для экономии заряда цепь содержит выключатель обычный или микро. Импульс с детектора поступает дифференциальному усилителю из 2 операционных усилителей DA2.1 и DA2.2 в корпусе, это микросхема LM324. Данный элемент предназначен для усиления амплитуды импульса тензосенсора в 50 раз.
R4 — «переменник» для точной регулировки, стоящий между резисторами с R1 и R2 (номиналы одинаковые). Учитывая коэф. усиления при 1 000 Па (100 кПа), на выходе дифусилителя будет 0.2×100×50 = 1000 мВ = 1 В.
С чувствительным вольтметром (цифровым) с шириной градуировки 2 В становится доступным пересчет измеренного напряжения, снимаемого между выходами 7 и 14 LM324, в значения атм. давл. Для визуализации контроля используется дискриминатор LM3914 с 10 компараторами, каждый подсоединенный одним входом к выводу (5), другие контакты идут на резистивный делитель (на промежуточные его точки).
Потенциал на четвертом выводе обозначает нижний порог измерения давления, а верхний выставляется посредством изменения потенциала «переменником» R5 на объединенных выходах 6 и 7. Им надо задать напряжение приблизительно 1.1 В относительно выхода 8, таким образом, верхняя граница индикации атм. давл. составит 1060 мбар, что подходит нам.
Как работать с индикатором
Индикация имеет такой порядок: вращая селектор «переменника» R6, устанавливаем на вводе 5 контроллера LM3914 потенциал, при котором диоды HL5 и 6 включаются. Если замеряемая величина растет, то элементы от HL7 до HL10 поочередно начинают светиться, и наоборот, уменьшение давления, обозначающее скорые осадки, сопровождается понижением напряжения на пятом выходе микросхемы. Начнут поочередно вниз включаться HL4…HL1.
Схема платы, рекомендации
Ниже схема-шаблон платы для монтажа платы:
Желательно брать индикаторные световые элементы с разным цветом, чтобы они несли функциональную нагрузку: внизу белые, вверху — красные, в середине — исходная точка, желтые. Схема LM для нашего прибора работает как DOT точка — при деактивированном выводе 9, питание идет только на период индикации давления при нажатии клавиши «Измерение». Точная калибровка для наших целей не так уж и важна, достаточно сделать наибольшую чувствительность, чтобы микросхема реагировала на малейшие колебания давления.
Цифровые модули и сборки на Arduino
Сборку можно осуществить из цифровых барометрических модулей-сенсоров. Делают такие приборы на основе микроконтроллера Arduino, также надо докупить дисплей к такой сборке и все необходимые сопутствующие детали. Все нужное есть на Aliexpress, подобных площадках.
Продаются уже готовые цифровые барометрические модули с обвязкой, например, 32-х разрядные, стоимость около 30 долл.
Рассмотрим только основы таких устройств, так как вариантов их много и им посвящены отдельные статьи.
Схема подключения контактов (есть разные варианты поэтому уточняем в сети, читаем инструкции изделий, смотрим схемы для конкретных моделей микроконтроллеров и модулей):
Самодельный цифровой барометр в сборе на монтажной пластине-основе:
Варианты схем-чертежов для сборки метеостанции с барометром на Arduino:
Обычно сборки на Arduino и на подобных микросхемах являются не просто барометрами, а мини-метеостанциями, измеряющими давление, высоту, температуру, влажность, показывающие часы, дату: