Использование лазерного дальномера VL53L0X с Arduino
В этом уроке мы рассмотрим, как использовать лазерный дальномер VL53L0X с Arduino. Это устройство позволяет точно измерять расстояния с помощью лазера, что делает его идеальным для различных приложений, таких как робототехника и автоматизация. К концу этого урока у вас будет функциональная настройка, которая может измерять расстояния и отображать их на последовательном мониторе.

Для нашего проекта мы будем использовать библиотеку VL53L0X Adafruit, которая упрощает процесс сопряжения с датчиком. Эта библиотека предоставляет необходимые функции для инициализации датчика, считывания измерений и обработки любых ошибок, которые могут возникнуть. Вы можете обратиться к видео за наглядной инструкцией по настройке (в видео на 02:15).
Объяснение аппаратного обеспечения
Основными компонентами этого проекта являются лазерный дальномер VL53L0X и плата Arduino. VL53L0X представляет собой времяпролетный датчик, который использует лазер для измерения расстояний до 2 метров с высокой точностью. Он работает по протоколу I2C, что обеспечивает простую связь с Arduino.
Плата Arduino служит микроконтроллером, который обрабатывает данные с VL53L0X. Он отправляет команды датчику и получает данные измерений расстояния, которые затем могут быть отображены или использованы в других приложениях. Правильная проводка имеет решающее значение для обеспечения точных показаний датчика.
Детали технического описания
| Изготовитель | СТМикроэлектроника |
|---|---|
| Номер для заказа | VL53L0X |
| Рабочее напряжение | От 2.6 В до 3.5 В |
| Диапазон | от 30 мм до 2000 мм |
| Точность | ±3% (тип.) |
| Интерфейс | I2C |
| Диапазон температур | от -40 °C до +85 °C |
| Потребляемый ток | <1 мА (в режиме ожидания), 20 мА (в активном режиме) |
| Пакет | ВФЛГА-8 |
- Убедитесь, что датчик правильно питается (от 2,6 В до 3,5 В).
- Поддерживайте правильные настройки адреса I2C, чтобы избежать конфликтов.
- Содержите датчик в чистоте для точного измерения расстояния.
- При необходимости используйте соответствующие подтягивающие резисторы на линиях I2C.
- Избегайте попадания прямых солнечных лучей на датчик для получения надежных показаний.
Инструкции по подключению

Чтобы подключить датчик VL53L0X к Arduino, подключите контакт VCC датчика к контакту 5 В на Arduino. Контакт GND должен быть подключен к земле (GND) Arduino. Для связи I2C подключите контакт SDA VL53L0X к контакту A4 на Arduino, а контакт SCL — к контакту A5. Если вы используете другую модель Arduino, обратитесь к конкретным назначениям контактов SDA и SCL для этой платы.
Например, на Arduino Mega вы должны подключить SDA к контакту 20, а SCL к контакту 21. Убедитесь, что все соединения безопасны, чтобы избежать проблем со связью. Если датчик не реагирует, перепроверьте проводку и убедитесь, что Arduino правильно питается.
Примеры кода и пошаговое руководство
Ниже приведен фрагмент из функции setup, которая инициализирует датчик VL53L0X:
void setup() {
Serial.begin(9600);
while (! Serial) {
delay(1);
}
Serial.println("Robojax Test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
}Этот код инициализирует последовательную связь и пытается запустить датчик VL53L0X. Если датчик не загрузится, он выведет сообщение об ошибке и остановит программу.
Далее приведем фрагмент из функции loop, который считывает данные об измерении расстояния:
void loop() {
VL53L0X_RangingMeasurementData_t measure;
lox.rangingTest(&measure, false);
if (measure.RangeStatus != 4) {
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}Этот блок непрерывно считывает данные о расстоянии, измеренные с датчика, и выводит их на последовательный монитор. Если измерение выходит за пределы допустимого диапазона, это указывает на это.
Демонстрация / Чего ожидать
При запуске программы вы должны увидеть измерения расстояния, отображаемые на последовательном мониторе. Показания должны обновляться каждые 100 миллисекунд. Если датчик направлен на объект, он будет отображать расстояние в миллиметрах. Если объект находится вне зоны действия, это также будет указывать на это. Обязательно протестируйте датчик в указанном диапазоне для получения оптимальных результатов (на видео в 10:00).
Временные метки видео
- 00:00-Знакомство
- 02:15- Настройка электропроводки
- 05:30- Объяснение кода
- 10:00-Демонстрация
/*
* Этот пример показывает, как использовать непрерывный режим для получения измерений расстояния с помощью VL53L0X.
*
* Получите этот код и другие коды для Arduino с Robojax.com. Учитесь использовать Arduino шаг за шагом в структурированном курсе со всеми материалами, схемами подключения и библиотеками, все в одном месте.
*
* Если вы нашли этот учебник полезным, пожалуйста, поддержите меня, чтобы я мог продолжать создавать подобный контент.
*
* или сделайте пожертвование через PayPal http://robojax.com/L/?id=64
*
* Этот код предоставляется "КАК ЕСТЬ" без гарантии или ответственности. Его можно использовать, пока вы сохраняете эту записку нетронутой.*
* Этот код был загружен с Robojax.com.
* Эта программа является бесплатным программным обеспечением: вы можете перераспределять ее и/или изменять в соответствии с условиями GNU General Public License, как это опубликовала Free Software Foundation, либо версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
*
* Эта программа распространяется с надеждой, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии ТОРГОВОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Смотрите GNU General Public License для получения дополнительной информации.
*
* Вы должны были получить копию GNU General Public License вместе с этой программой. Если нет, смотрите <https://www.gnu.org/licenses/>.
*
* Авторские права (c) 2015, Majenko Technologies. Все права защищены.
*
* Перераспределение и использование в исходной и двоичной формах, с изменениями или без, разрешены при условии выполнения следующих условий:
*
* Перераспределения исходного кода должны сохранять вышеуказанное уведомление об авторских правах, этот список условий и следующую оговорку.
*
* Перераспределения в двоичной форме должны воспроизводить вышеуказанное уведомление об авторских правах, этот список условий и следующую оговорку в документации и/или других материалах, предоставленных с распределением.
*
* Ни имя Majenko Technologies, ни имена его участников не могут использоваться для поддержки или продвижения продуктов, производных от этого программного обеспечения, без специального предварительного письменного разрешения.
*
* ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЕНО ДЕРЖАТЕЛЯМИ АВТОРСКИХ ПРАВ И УЧАСТНИКАМИ "КАК ЕСТЬ" И ЛЮБЫЕ ЯВНЫЕ ИЛИ ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ПОДРАЗУМЕВАЕМЫМИ ГАРАНТИЯМИ ТОРГОВОЙ ПРИГОДНОСТИ И ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ, ОТКЛОНЯЮТСЯ. НИ В КОМ СЛУЧАЕ ДЕРЖАТЕЛИ АВТОРСКИХ ПРАВ ИЛИ УЧАСТНИКИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБЫЕ ПОСРЕДСТВЕННЫЕ, НЕПРЯМЫЕ, СЛУЧАЙНЫЕ, ОСОБЫЕ, ОРДЕРНЫЕ ИЛИ ПОСЛЕДОВАТЕЛЬНЫЕ УБЫТКИ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ПОКУПКУ ЗАМЕНЯЮЩИХ ТОВАРОВ ИЛИ УСЛУГ; УБЫТКИ ОТ ИСПОЛЬЗОВАНИЯ, ДАННЫХ или ПРИБЫЛИ; ИЛИ ПРЕКРАЩЕНИЕ ДЕЯТЕЛЬНОСТИ) ЛЮБЫМ ОБРАЗОМ И ПО ЛЮБОЙ ТЕОРИИ ОТВЕТСТВЕННОСТИ, БУДЬ В ДОГОВОРЕ, СТРОГОЙ ОТВЕТСТВЕННОСТИ ИЛИ ДЕЛИКТЕ (ВКЛЮЧАЯ НЕДОБРОСОВЕСТНОСТЬ ИЛИ ИНЫЕ) В РЕЗУЛЬТАТЕ ИСПОЛЬЗОВАНИЯ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ УВЕДОМЛЕНЫ О ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ.
*/
#include "Adafruit_VL53L0X.h"
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
void setup() {
Serial.begin(9600);
// подождите, пока последовательный порт откроется для устройств с поддержкой USB
while (! Serial) {
delay(1);
}
Serial.println("Robojax Test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
// власть
Serial.println(F("VL53L0X API Simple Ranging example\n\n"));
}
void loop() {
VL53L0X_RangingMeasurementData_t measure;
Serial.print("Reading a measurement... ");
lox.rangingTest(&measure, false); // передайте 'true', чтобы получить вывод отладочных данных!
if (measure.RangeStatus != 4) { // фазовые сбои имеют некорректные данные
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}
Ресурсы и ссылки
-
ВнешнийVL53L0X спецификация (PDF)st.com
Файлы📁
Нет доступных файлов.