Лидар (дальномер) на Arduino и датчике VL6180X

В настоящее время лидары (световые радары, дальномеры оптического диапазона) находят широкое применение в различных областях: сканирование зданий, 3D принтерах, построении объемных карт, беспилотных автомобилях и т.д. Поэтому в данной статье мы рассмотрим создание лидара (дальномера) на основе платы Arduino и датчике света и приближения VL6180X.

Внешнй вид лидара на Arduino и датчике VL6180XНеобходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Датчик света и приближения VL6180X (SparkFun ToF Range Finder Sensor) (купить на AliExpress) – подходит для коротких расстояний. Для больших расстояний лучше использовать датчик VL53L0X (купить на AliExpress).
  3. Сервомотор.

Что такое лидар

Лида́р (транслитерация LIDAR англ. Light Detection and Ranging «обнаружение и определение дальности с помощью света») — технология измерения расстояний путем излучения света (лазер) и замера времени возвращения этого отражённого света на ресивер (Википедия).

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

Лидар (LIDAR) состоит из передатчика светового потока (обычно это лазер) и приемника отраженного от препятствия света. Зная скорость распространения света и время распространения луча света до препятствия и обратно, можно определить расстояние до препятствия.

Одним из способов измерения времени пролета (time of flight, ToF) светового луча является использование импульсного лазера и непосредственное измерение затраченного времени. Но в данном случае электроника, измеряющее это время, должна уметь работать с пикосекундными интервалами времени, что делает эти устройства весьма дорогими.

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

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

c = f ∙ τ

где c – это скорость света, f – модулирующая частота, τ – длина волны.

А расстояние D', пройденное излученным светом, определяется выражением:

D' = B + 2A = B + (θ * τ) / 2π

Где A – это измеряемое расстояние, B – расстояние от устройства измерения фазы. В этом случае необходимое расстояние D между излучателем света и препятствием рассчитывается по формуле:

D = τ * θ / 4π

Где θ – измеренный электроникой фазовый сдвиг между переданным и принятым лучами света.

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

Датчик VL6180X

VL6180X – это оптический датчик от компании STMicroelectronics. Его также называют датчиком света (освещенности) и приближения. Его внешний вид показан на следующем рисунке.

Внешний вид датчика VL6180X

Датчик VL6180 содержит ИК-излучатель, датчик внешней освещенности и датчик дальности. К микроконтроллерам и другим электронным устройствам он подключается по интерфейсу I2C. Также датчик имеет встроенный стабилизатор напряжения 2,8 В, поэтому он не повредится если подключить к нему напряжение больше 2,8 В (ну в пределах разумного, конечно же). Еще в датчике присутствуют два программируемых вывода GPIO. Распиновка датчика показана на следующем рисунке.

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

Датчик VL6180X способен измерять расстояния до 25 см. Поэтому, к примеру, в домашнем использовании он отлично подойдет для измерения фокусного расстояния камеры или фотоаппарата. Если же вам необходим лидар, работающий на большие расстояния, то в данном случае вам вместо датчика VL6180X необходимо использовать датчик Vl53l0x, который также отличается большей точностью измерений и не имеет проблем с линейностью, приводящих к “двойному изображению”.

Схема проекта

Схема лидара (дальномера) на Arduino и датчике VL6180X представлена на следующем рисунке.

Схема лидара (дальномера) на Arduino и датчике VL6180XСкорость лидара в нашем проекте ограничена частотой 10 Гц в связи с низкой скоростью работой сервомотора. Если вы хотите сконструировать высокоскоростной лидар, то используйте шаговый двигатель или двигатель постоянного тока с обратной связью.

Установка библиотеки для работы с датчиком

Для работы с датчиком в Arduino IDE необходимо установить библиотеку Adafruit_VL6180X.h от компании Adafruit. Процесс установки этой библиотеки показан на следующем рисунке.

Установка библиотеки Adafruit_VL6180X.h в Arduino IDEИсходный код программы (скетча)

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

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

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
413 просмотров

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

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