Подключение VL53L1X к Ардуино

Лазерный дальномер VL53L1X Arduino — это датчик для измерения расстояния до препятствия, расположенного на удалении не более 4 метров с длиной волны 940 нм. В менее дорогих модулях дальномера VL53L0X дальность действия составляет всего 2 метра. Рассмотрим в этом обзоре подключение VL53LOX (GY-53-L1X) к Ардуино и использование данного сенсора для измерения расстояния до препятствия.

Датчик VL53L1X характеристики, распиновка

Сенсоры GY-53-L1X и VL53LOX имеют 6 разъемов, но для подключения потребуется только только 4. Два разъема служат для питания, еще два разъема используются для связи по шине I2C. По умолчанию VL53L1X настроен в режиме «больших расстояний» до 4 метров. С помощью библиотеки SparkFun_VL53L1X.h можно настроить более точный режим измерений «коротких расстояний» с дальностью около 2 метров.

VL53L0X и VL53L1X распиновка, характеристики
Датчик VL53L0X и VL53L1X распиновка, характеристики

Характеристики 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 экран;
  • провода «папа-мама».
Подключение дальномера VL53L0X / VL53L1X
Подключение лазерного дальномера VL53L0X / VL53L1X к Ардуино
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);
}

Пояснения к коду:

  1. с помощью команды setROI(4,4,199); можно настроить активные элементы матрицы, где первый и второй аргумент — ширина и высота матрицы в пикселях;
  2. с помощью функции setOffset(); можно откалибровать датчик.



Измерение расстояния с помощью сенсора VL53L1X
Измерение расстояния с помощью сенсора VL53L0X Arduino

В следующем примере полученные результаты измерения расстояния до препятствия, будут выводиться на 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);
}

Пояснения к коду:

  1. сенсор VL53L0X способен обеспечить максимально точное измерение расстояния, независимо от отражающей способности объекта.

Заключение. Преимущество лазерного датчика расстояния VL53L1X и VL53L0X заключается в том, что точность измерения меньше зависит от температуры окружающего воздуха по сравнению с ультразвуковым датчиком HC-SR04. К плюсам также следует отнести и возможность настройки угла поля зрения, чтобы уменьшить погрешность измерений из-за предметов, находящихся вблизи сенсора.



2 Replies to “Подключение лазерного дальномера VL53L1X к Ардуино”

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

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.