VL53L0X: Лазерный ToF дальномер
VL53L0X: Лазерный ToF дальномер
VL53L0X от STMicroelectronics — это миниатюрный лазерный дальномер, работающий по принципу Time-of-Flight (ToF). Он излучает невидимые импульсы лазера (940 нм) и замеряет время их возвращения.
(Типичный модуль 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 |
| SCL | I2C Clock | A5 |
| SDA | I2C Data | A4 |
| XSHUT | Shutdown | (Опционально) Для смены адреса |
| GPIO1 | Interrupt | (Опционально) Прерывание по готовности |
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. Чтобы подключить два датчика:
- Подключите пины
XSHUTкаждого датчика к разным цифровым пинам Arduino. - При старте подайте
LOWна всеXSHUT(выключите датчики). - Включите первый (
HIGHна XSHUT), инициализируйте его и смените адрес командойsensor.setAddress(new_addr). - Включите второй, инициализируйте его (он останется на
0x29или тоже смените).
4. Acting: Применение
- Точная парковка: Заезд робота на зарядную станцию.
- Определение высоты: Для дронов (на малых высотах).
- Жестовое управление: Можно детектировать движение руки вверх/вниз над датчиком.
- Сканирование: Если поставить датчик на сервопривод, можно получить 2D карту помещения (простой лидар).
Ограничения
- Солнечный свет: Яркое солнце содержит много ИК излучения и может “ослепить” датчик на улице.
- Прозрачные объекты: Стекло не видит (свет проходит сквозь).
