Создание дешевого лазерного дальномера для Arduino
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Необходимые инструменты и машины
| ||||
|
Приложения и онлайн-сервисы
|
Об этом проекте
Нужен быстрый и дешевый модуль лазерного дальномера для вашего проекта Arduino?
Конечно, для этой задачи можно использовать специализированные модули, но большинство из них имеют большую цену. Модули VL53L0X / VL53L1X дешевы, но имеют очень большое поле зрения.
Так что я нашел решение:использовать дешевую лазерную рулетку «Х-40» в качестве лазерного дальномера. Эти устройства стоят 20 долларов и меньше, и они могут измерять расстояние до 40 м с точностью ~ 3 мм. Но есть две проблемы - нет возможности снять показания с ленты и измерения идут медленно - менее 1 Гц.
Чтобы решить эту проблему, я сделал реверс-инжиниринг этой лазерной рулетки и написал свою собственную прошивку для микроконтроллера STM32 модуля лазерного дальномера. Для меня была важна скорость измерения, и я могу достичь ~ 60 Гц, но максимально стабильное расстояние уменьшилось до ~ 6 м (полный максимальный диапазон составляет 37 м, но я не тестировал его).
Точность измерения расстояния может варьироваться от 1 мм до 10 мм в зависимости от цвета объекта и расстояния.
Размеры модуля:25x13x50 мм.
ВАЖНОЕ ЗАМЕЧАНИЕ:ВЫ ПОТЕРЯЕТЕ ОРИГИНАЛЬНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ, ПОЭТОМУ, УСТРОЙСТВО НЕ МОЖЕТ ИСПОЛЬЗОВАТЬСЯ В КАЧЕСТВЕ ЛЕНТОЧНОГО ИЗМЕРЕНИЯ ПОЗЖЕ!
Обратите внимание, что лазерные рулетки "X-40" могут иметь разные версии модуля лазерного дальномера, и моя прошивка поддерживает только некоторые из них!
«X-40» - не единственное название для лазерных рулеток с такими модулями - я знаю, что существует несколько различных китайских лазерных рулеток с подходящими модулями.
Шаг 1. Разборка лазерной рулетки
Разберем лазерную рулетку, чтобы достать из нее модуль лазерного дальномера.
Из корпуса нужно открутить 7 саморезов:
Лазерная рулетка в разобранном виде:
Внутри корпуса прибора виден небольшой модуль лазерного дальномера. Вам необходимо отсоединить ленточные кабели от модуля и вынуть модуль из корпуса:
Обратите внимание, что модуль обозначен как «701A». Моя прошивка поддерживает только версии модулей "512A" и "701A". Несколько пользователей подтвердили, что модули "703A" тоже работают (я не тестировал).
UPD 11/2019:
Внимание:обнаружено, что новые лазерные рулетки «x-40» поставляются с модулями «M88B». Маркировка «88B» на печатной плате рядом с MCU. Эти модули основаны на микроконтроллере STM32F0 (имеет пакет QFN-32). Эти модули не поддерживаются моей прошивкой!
UPD 10/2021:
Внимание: добавлена поддержка модулей U85B :см. ссылку! Они используются в современных типах лазерных рулеток.
Если ваш модуль поддерживается, вам необходимо отпаять силовые линии от модуля.
Шаг 2:Программирование модуля лазерного дальномера
Вам необходимо написать специализированную прошивку для MCU модуля, чтобы получить необходимую функциональность.
1. Для начала нужно припаять несколько проводов для программирования микроконтроллера. Распиновка показана на картинке:
Подключите контакты 7-8 разъема клавиатуры - он нужен для включения.
Линии «GND» и «Vbat» должны быть подключены к источнику питания. Диапазон напряжения питания +2,7 ... + 3,3 В. При подаче питания на модуль на линии "Vdd" должно быть +3,5 В.
Линии «GND», «SWDIO», «SWCLK», «NRST» должны быть подключены к программатору ST-LINK. Строка «NRST» очень важна - оригинальная прошивка MCU заблокирована, поэтому эта строка нужна для входа MCU в режим программирования.
У некоторых программистов есть эта строка, а у некоторых (дешевых) нет, но есть обходной путь для этой проблемы.
Кроме того, некоторым программистам (например, оригинальному "ST-LINK / V2") требуется, чтобы линия "Vbat" была соединена с линией "VCC / TVCC" программатора.
Пример подключений (у этого программатора нет строки "NRST"):
2. Установить на ПК «Утилиту ST-LINK». Если у вас нет опыта использования этого программного обеспечения, в Интернете есть множество учебных пособий.
Вам необходимо настроить утилиту (Цель -> Настройки):
Если у вашего программатора есть выход «NRST», вы можете просто включить питание и нажать «Target -> Connect» в утилите.
Если такой строки нет, выполните следующие действия:
- Включите питание.
- Подключите линию "NRST" модуля к GND.
- Нажмите "Target -> Connect" в утилите.
- Быстро отсоедините линию "NRST" от GND.
- Утилита должна отображать соединение
У вас должна получиться такая картина:
3. Флэш-память MCU заблокирована для чтения, поэтому вам необходимо отключить «Защиту от чтения». На этом этапе вы потеряете оригинальную прошивку!
Откройте меню Target -> Option Bytes. Должны быть такие настройки:
Переключите «Защита от чтения» на «Отключено» и нажмите кнопку «Снять выделение», затем нажмите кнопку «Применить». Попробуйте перезапустить модуль (отключив питание).
Нажмите Target -> Connect. В окне журнала должна быть информация об успешном подключении, и вы должны увидеть содержимое памяти - заполненное 0xFF. Теперь вы можете загрузить кастомную прошивку в MCU.
4. Нужная прошивка находится здесь:https://github.com/iliasam/Laser_tape_reverse_engineering/tree/master/Code/Firmware_dist_calculation_fast
Выберите подходящий HEX-файл для вашего модуля и загрузите его во Flash MCU с помощью «Утилиты ST-LINK».
Шаг 3. Подключение модуля лазерного дальномера к Arduino
Вам нужно припаять провод или какой-нибудь разъем к контактной площадке TX на плате:
См. Схему подключения ниже.
Во-первых, вам нужно убедиться, что модуль дальномера исправен. На этом этапе вам не нужно подключать OLED-дисплей к Arduino - просто подключите линию TX модуля лазерного дальномера к линии TX Arduino, а линии питания модуля к источнику питания + 3 В.
Создайте пустой скетч и загрузите его в Arduino. Откройте «Serial Monitor» в среде Arduino IDE. Выберите скорость передачи:250000
Если модуль дальномера работает нормально, вы получите те же данные:
На самом деле, для этого теста лучше использовать специализированный преобразователь USB-UART. Выберите в его утилите скорость 256000 бод (это реальная скорость для микроконтроллера x-40).
Во-вторых, вам нужно собрать полную схему с дисплеем.
Подключите линию TX модуля лазерного дальномера к линии RX Arduino (вам необходимо отключить этот провод во время загрузки программы в Arduino).
Если все работает нормально, вы получите тот же результат:
Вы можете увидеть дисплей с 3 цифрами:
- «COUNT» - счетчик полученных значений
- «AMPL» - амплитуда сигнала. Символическая полоса («<--->») ниже показывает амплитуду графически (в логарифмической шкале).
- Самая большая величина - расстояние в метрах и миллиметрах.
Шаг 4. Калибровка нуля
После первого запуска модуль лазерного дальномера необходимо откалибровать.
Вам нужно разместить какой-нибудь белый объект на определенном расстоянии от модуля. Расстояние до этого объекта станет нулевым расстоянием для модуля дальномера. Чтобы начать процесс калибровки, вам необходимо подключить клавиатуру к лазерной рулетке и нажать нижнюю кнопку. Модуль издаст два звуковых сигнала - в начале калибровки и в конце (продолжительность калибровки около 10 секунд).
Теперь вы можете использовать этот модуль лазерного дальномера.
Ссылки:
1. Github - результаты обратного проектирования и исходный код.
2. Habr.com - Гугл перевод статьи о процессе реверс-инжиниринга лазерной рулетки.
Извините за мой английский - я из неанглоязычной страны.
Код
- Эскиз Arduino
Эскиз Arduino Arduino
Нет предварительного просмотра (только загрузка).
Github
Код для лазерной ленты https://github.com/iliasam/Laser_tape_reverse_engineeringСхема
Схема сборки макетаПроизводственный процесс
- Как измерить качество воздуха на OpenSensors
- Для чего используется лазерный резак?
- Мониторинг температуры SMART для школ
- 8-битная библиотека портов ввода-вывода для Arduino
- 64-клавишная матрица клавиатуры для прототипирования для Arduino
- TFT Shield для Arduino Nano - запуск
- Изолированный аналоговый вход для Arduino
- Контроллер дыхания Arduino для дешевых (USB-MIDI)
- Робот для супер-крутой навигации внутри помещений
- Обоснование использования 5G в производстве