Оглавление:

Изготовление дальномера с помощью лазера и камеры: 6 шагов
Изготовление дальномера с помощью лазера и камеры: 6 шагов

Видео: Изготовление дальномера с помощью лазера и камеры: 6 шагов

Видео: Изготовление дальномера с помощью лазера и камеры: 6 шагов
Видео: Дальномер для измерений на УЛИЦЕ и в помещениях Sndway SW-S80 и SW-S120 - (лазерная рулетка) 2024, Ноябрь
Anonim
Изготовление дальномера с помощью лазера и камеры
Изготовление дальномера с помощью лазера и камеры

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

Проект основан на этой статье:

Единственная разница в том, что я буду строить дальномер, используя Raspberry Pi Zero W, ЖК-дисплей и модуль камеры Raspberry Pi. Я также буду использовать OpenCV для отслеживания лазера.

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

Давайте начнем!

Шаг 1: Список материалов

Для этого проекта вам понадобятся:

  • дешевый лазер 6 мм 5 мВт
  • резистор 220 Ом
  • транзистор 2N2222A или аналогичный
  • Raspberry Pi Zero W
  • Камера Raspberry Pi v2
  • ЖК-дисплей Nokia 5110 или аналогичный
  • несколько перемычек и небольшой макет

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

Шаг 2: Создание приспособления для лазера и камеры

Создание приспособления для лазера и камеры
Создание приспособления для лазера и камеры
Создание приспособления для лазера и камеры
Создание приспособления для лазера и камеры
Создание приспособления для лазера и камеры
Создание приспособления для лазера и камеры

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

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

Я использовал Tinkercad для сборки, вы можете найти модель здесь:

Расстояние между центром линзы лазера и центром линзы камеры составляет 3,75 см.

Шаг 3: Управление лазером и ЖК-дисплеем

Управление лазером и ЖК-дисплеем
Управление лазером и ЖК-дисплеем
Управление лазером и ЖК-дисплеем
Управление лазером и ЖК-дисплеем

Я последовал этому руководству https://www.algissalys.com/how-to/nokia-5110-lcd-on-raspberry-pi, чтобы управлять ЖК-дисплеем с помощью Raspberry Pi Zero. Вместо редактирования файла /boot/config.txt вы можете включить интерфейс SPI с помощью sudo raspi-config через командную строку.

Я использую Raspberry Pi Zero в безголовом режиме, используя последнюю на сегодняшний день версию Raspbian Stretch. Я не буду описывать установку в этом руководстве, но вы можете следовать этому руководству: https://medium.com/@danidudas/install-raspbian-jessie-lite-and-setup-wi-fi-without-access-to- командная строка или использование сети 97f065af722e

Чтобы получить яркую лазерную точку, я использую шину 5V Pi. Для этого я буду использовать транзистор (2N2222a или аналогичный) для управления лазером через GPIO. Резистор 220 Ом на базе транзистора пропускает достаточный ток через лазер. Я использую RPi. GPIO для управления Pi GPIO. Я подключил базу транзистора к выводу GPIO22 (15 вывод), эмиттер к земле, а коллектор к лазерному диоду.

Не забудьте включить интерфейс камеры с помощью sudo raspi-config через командную строку.

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

Если все прошло хорошо, у вас должен быть файл dot.jpg, в котором вы увидите фон и лазерную точку.

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

На этом этапе ваше оборудование должно быть настроено.

Шаг 4: Обнаружение лазера с помощью OpenCV

Во-первых, нам нужно установить OpenCV на Pi. У вас есть три способа сделать это. Вы можете установить старую упакованную версию с помощью apt. Вы можете скомпилировать нужную вам версию, но в этом случае время установки может достигать 15 часов, и большую часть этого времени занимает сама компиляция. Или, как я предпочитаю, вы можете использовать предварительно скомпилированную версию для Pi Zero, предоставленную третьей стороной.

Поскольку это проще и быстрее, я использовал сторонний пакет. Вы можете найти шаги по установке в этой статье: https://yoursunny.com/t/2018/install-OpenCV3-PiZero/ Я пробовал много других источников, но их пакеты не были обновлены.

Чтобы отслеживать лазерную указку, я обновил код с https://github.com/bradmontgomery/python-laser-tracker, чтобы использовать модуль камеры Pi вместо USB-устройства. Вы можете напрямую использовать код, если у вас нет модуля камеры Pi и вы хотите использовать камеру USB.

Вы можете найти полный код здесь:

Чтобы запустить этот код, вам необходимо установить пакеты Python: Pillow и Picamera (sudo pip3 install Pillow Picamera).

Шаг 5: Калибровка дальномера

Калибровка дальномера
Калибровка дальномера
Калибровка дальномера
Калибровка дальномера
Калибровка дальномера
Калибровка дальномера

В оригинальной статье автор разработал процедуру калибровки, чтобы получить необходимые параметры для преобразования координат y в фактическое расстояние. Я использовал стол в гостиной для калибровки и старый кусок крафт-бумаги. Каждые 10 см или около того я записывал координаты x и y в электронную таблицу: https://docs.google.com/spreadsheets/d/1OTGu09GLAt … Чтобы убедиться, что все работает правильно, на каждом этапе я проверял захваченные изображения, чтобы убедиться, что лазер был правильно отслежен. Если вы используете зеленый лазер или ваш лазер неправильно отслеживается, вам нужно будет соответствующим образом настроить оттенок, насыщенность и пороговое значение программы.

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

Пришло время ввести параметры в программу дальномера для измерения расстояний.

Шаг 6: Измерение расстояний

Измерение расстояний
Измерение расстояний

В коде: https://gist.github.com/kevinlebrun/e767a46855e5fd501d820e1c5fcc527c Я обновил переменные HEIGHT, GAIN и OFFSET в соответствии с калибровочными измерениями. Я использовал формулу расстояния из оригинальной статьи, чтобы оценить расстояние, и распечатал расстояние с помощью ЖК-дисплея.

Код сначала настроит камеру и GPIO, затем мы хотим включить подсветку ЖК-дисплея, чтобы лучше видеть измерения. Вход ЖК-дисплея подключен к GPIO14. Примерно каждые 5 секунд мы будем:

  1. включить лазерный диод
  2. захватить изображение в память
  3. отключить лазерный диод
  4. отслеживать лазер с помощью фильтров диапазона HSV
  5. записать полученный образ на диск для отладки
  6. вычислить расстояние на основе координаты y
  7. запишите расстояние на ЖК-дисплее.

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

Я также могу увеличить разрешение дальномера, повернув камеру на 90º, используя полный с, и увеличить разрешение до максимального, поддерживаемого камерой. В текущей реализации мы ограничены диапазоном от 0 до 384 пикселей, мы можем увеличить верхний предел до 1640, что в 4 раза превышает текущее разрешение. Расстояние будет еще точнее.

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

В общем, нынешней системы мне достаточно, и я сэкономлю немного денег на планировании дома!

Рекомендуемые: