Skip to main content

VL53L0X: Лазерный ToF дальномер

VL53L0X: Лазерный ToF дальномер

VL53L0X от STMicroelectronics — это миниатюрный лазерный дальномер, работающий по принципу Time-of-Flight (ToF). Он излучает невидимые импульсы лазера (940 нм) и замеряет время их возвращения.

VL53L0X Module (Типичный модуль GY-530)

1. Sensing: Характеристики

  • Диапазон: от 3 см до 200 см (2 метра).
  • Интерфейс: I2C (адрес 0x29 по умолчанию).
  • Точность: ±3% (лучше, чем у ультразвука и Sharp).
  • Угол обзора (FOV): ~25°.
  • Скорость: до 50 Гц.
  • Питание: 2.6V – 3.5V (на модулях обычно стоит стабилизатор на 2.8V, можно питать от 3.3V или 5V, если есть регулятор).

Преимущества перед УЗ и ИК

  • Цвет не важен: Работает одинаково хорошо на белых и черных поверхностях (в разумных пределах).
  • Узкий луч: Меньше ложных срабатываний от стен сбоку по сравнению с широким конусом ультразвука.

2. Подключение

PinНазначениеArduino
VCCПитание5V (или 3.3V)
GNDЗемляGND
SCLI2C ClockA5
SDAI2C DataA4
XSHUTShutdown(Опционально) Для смены адреса
GPIO1Interrupt(Опционально) Прерывание по готовности

3. Thinking: Программная реализация

Используем библиотеку от Pololu или Adafruit. Установка: Sketch -> Include Library -> Manage Libraries -> VL53L0X (Pololu).

Базовый пример (Pololu)

#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;

void setup() {
  Serial.begin(9600);
  Wire.begin();

  sensor.setTimeout(500);
  if (!sensor.init()) {
    Serial.println("Failed to detect and initialize sensor!");
    while (1) {}
  }

  // Режим дальнобойности (Long Range)
  // Увеличивает чувствительность, но снижает скорость
  // sensor.setSignalRateLimit(0.1);
  // sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
  // sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);

  // Непрерывное измерение
  sensor.startContinuous();
}

void loop() {
  uint16_t distance = sensor.readRangeContinuousMillimeters();

  Serial.print("Distance: ");
  Serial.print(distance);
  if (sensor.timeoutOccurred()) { 
    Serial.print(" TIMEOUT"); 
  }
  Serial.println(" mm");
  
  delay(100);
}

Работа с несколькими датчиками

У всех VL53L0X адрес по умолчанию 0x29. Чтобы подключить два датчика:

  1. Подключите пины XSHUT каждого датчика к разным цифровым пинам Arduino.
  2. При старте подайте LOW на все XSHUT (выключите датчики).
  3. Включите первый (HIGH на XSHUT), инициализируйте его и смените адрес командой sensor.setAddress(new_addr).
  4. Включите второй, инициализируйте его (он останется на 0x29 или тоже смените).

4. Acting: Применение

  1. Точная парковка: Заезд робота на зарядную станцию.
  2. Определение высоты: Для дронов (на малых высотах).
  3. Жестовое управление: Можно детектировать движение руки вверх/вниз над датчиком.
  4. Сканирование: Если поставить датчик на сервопривод, можно получить 2D карту помещения (простой лидар).

Ограничения

  • Солнечный свет: Яркое солнце содержит много ИК излучения и может “ослепить” датчик на улице.
  • Прозрачные объекты: Стекло не видит (свет проходит сквозь).