СОДЕРЖАНИЕ ►
Лазерный дальномер VL53L1X Arduino — это датчик для измерения расстояния до препятствия, расположенного на удалении не более 4 метров с длиной волны 940 нм. В менее дорогих модулях дальномера VL53L0X дальность действия составляет всего 2 метра. Рассмотрим в этом обзоре подключение VL53LOX (GY-53-L1X) к Ардуино и использование данного сенсора для измерения расстояния до препятствия.
Датчик VL53L1X характеристики, распиновка
Сенсоры GY-53-L1X и VL53LOX имеют 6 разъемов, но для подключения потребуется только только 4. Два разъема служат для питания, еще два разъема используются для связи по шине I2C. По умолчанию VL53L1X настроен в режиме «больших расстояний» до 4 метров. С помощью библиотеки SparkFun_VL53L1X.h можно настроить более точный режим измерений «коротких расстояний» с дальностью около 2 метров.

Характеристики VL53L1X / VL53L0X
- Напряжение: от 2,6 В до 5,5 В
- Ток питания: от 10 мА
- Выход (IIC): считывание 16-битного расстояния (в миллиметрах)
- Длина волны лазера: 940 нм
- Диапазон измерения: 4 метра / 2 метра
Угол зрения сенсора составляет 27° по умолчанию. В некоторых случаях это может привести к тому, что на точность сенсора могут повлиять препятствия на периферии. Угол зрения можно уменьшить, контролируя область ROI. Сенсор состоит из матрицы 16 X 16 элементов, а управление областью ROI заключается в активации части элементов. Самый узкий луч получается при активации части матрицы 4 X 4 элемента.
Как подключить датчик VL53L1X к Ардуино
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- лазерный дальномер VL53L1X / VL53L0X;
- лазерный датчик расстояния GY-53-L1X;
- 128×64 OLED экран;
- провода «папа-мама».

| VL53LOX / VL53L1X | Arduino Uno | Arduino Nano | Arduino Mega |
| GND | GND | GND | GND |
| VDD | 5V | 5V | 5V |
| SDA | A4 | A4 | 20 |
| SCL | A5 | A5 | 21 |
Для начала представим первый пример, который регулярно отображает измеренное расстояние (в миллиметрах) в последовательном мониторе Arduino IDE. Работа программы выполняется в фоновом режиме с помощью библиотек Wire и VL53L1X, поэтому скетч очень короткий. Подключите лазерный датчик расстояния к плате Arduino, как показано на схеме выше и загрузите код в микроконтроллер.
Скетч. Лазерный датчик расстояния VL53L1X
#include "Wire.h" #include "SparkFun_VL53L1X.h" // библиотека для сенсора SFEVL53L1X vl; // создаем объект vl void setup () { Serial.begin(9600); vl.setOffset(0); // калибровка датчика // vl.setDistanceModeShort(); // установка режима "близкого расстояния" // vl.setROI(4,4,199); // уменьшения угла зрения до минимума } void loop() { vl.startRanging(); while (!vl.checkForDataReady()) { delay(1); } int dist = vl.getDistance(); vl.stopRanging(); Serial.print("Distance: "); Serial.print(dist); Serial.println(" mm"); delay(1000); }
Пояснения к коду:
- с помощью команды setROI(4,4,199); можно настроить активные элементы матрицы, где первый и второй аргумент — ширина и высота матрицы в пикселях;
- с помощью функции setOffset(); можно откалибровать датчик.

В следующем примере полученные результаты измерения расстояния до препятствия, будут выводиться на OLED дисплей. Если расстояние до предмета, измеренное датчиком, не точное, то можно исправить данные с помощью функции setOffset. Например, если измеренное расстояние меньше на 10 мм фактического расстояния, то следует указать setOffset(10), чтобы добавить к конечному результату 10 мм.
| OLED i2c 0,96 | Arduino Uno | Arduino Nano | Arduino Mega |
| GND | GND | GND | GND |
| VDD | 5V | 5V | 5V |
| SDA | A4 | A4 | 20 |
| SCL | A5 | A5 | 21 |
Скетч. Измерение расстояния с помощью VL53L1X
#include "Wire.h" #include "OLED_I2C.h" // библиотека для экрана OLED myOLED(SDA, SCL, 8); // создаем объект myOLED extern uint8_t BigNumbers[]; extern uint8_t SmallFont[]; #include "SparkFun_VL53L1X.h" // библиотека для сенсора SFEVL53L1X vl; // создаем объект vl void setup () { Serial.begin(9600); myOLED.begin(); vl.setOffset(0); // калибровка датчика // vl.setDistanceModeShort(); // установка режима "близкого расстояния" // vl.setROI(4,4,199); // уменьшения угла зрения до минимума } void loop() { vl.startRanging(); while (!vl.checkForDataReady()) { delay(1); } int dist = vl.getDistance(); vl.stopRanging(); Serial.print("Distance: "); Serial.print(dist); Serial.println(" mm"); myOLED.setFont(BigNumbers); myOLED.print(String(dist), CENTER, 20); myOLED.setFont(SmallFont); myOLED.print("MILLIMETRES", CENTER, 50); myOLED.update(); delay(1000); }
Пояснения к коду:
- сенсор VL53L0X способен обеспечить максимально точное измерение расстояния, независимо от отражающей способности объекта.
Заключение. Преимущество лазерного датчика расстояния VL53L1X и VL53L0X заключается в том, что точность измерения меньше зависит от температуры окружающего воздуха по сравнению с ультразвуковым датчиком HC-SR04. К плюсам также следует отнести и возможность настройки угла поля зрения, чтобы уменьшить погрешность измерений из-за предметов, находящихся вблизи сенсора.










Здравствуйте. Загрузил ваш скетч и на дисплее только одно показание и надпись снизу «5696 millimetres». В мониторе порта так же без изменений Distance: 5696 mm. Датчики расстояния исправны, поменял несколько штук и даже снял с рабочего проекта. Без изменений.
Спасибо! Работает.