Код для поиска

Использование лазерного дальномера VL53L0X с Arduino

Использование лазерного дальномера VL53L0X с Arduino

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

VL53L0X 200cm range sensor-blue

Для нашего проекта мы будем использовать библиотеку 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.
  • Избегайте попадания прямых солнечных лучей на датчик для получения надежных показаний.

Инструкции по подключению

Arduino Wiring for VL53L0X
Arduino Wiring for VL53L0X

Чтобы подключить датчик 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 200cm range sensor-blue
VL53L0X 200cm range sensor-blue
Arduino Wiring for VL53L0X
Arduino Wiring for VL53L0X
15-Using a VL53L0X laser distance meter in Arduino
Язык: C++
/*
 * Этот пример показывает, как использовать непрерывный режим для получения измерений расстояния с помощью 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);
}

Ресурсы и ссылки

Файлы📁

Нет доступных файлов.