Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Построение LIDAR-системы на Arduino с VL6180X и сервоприводом

Компоненты и материалы

Программное обеспечение

О проекте

Кратко о LiDAR

LIDAR (Light Detection and Ranging) — оптическая система дистанционного зондирования, измеряющая расстояние до объекта за счет времени полета светового импульса (Time-of-Flight, ToF). Применяется в робототехнике для картирования окружения и классификации объектов.

Принцип: передатчик излучает лазерный луч, приемник фиксирует отраженный сигнал. Расчет расстояния по фазовому сдвигу или прямому замеру времени полета. Механизм (зеркало или вращающийся датчик) сканирует пространство в плоскости или 3D.

Датчики VL6180X / VL53L0X (STMicroelectronics) используют ToF с фазовой модуляцией. Они компактны, дешевы и применяются в смартфонах для автофокуса камеры. VL53L0X точнее и дальномернее, VL6180X — для ближнего диапазона (до ~10-20 см).

Автору нужен 2D-сканер для автономного робота — LiDAR выбран за скорость и узкий луч (в отличие от сонаров).

Схема подключения

Построение LIDAR-системы на Arduino с VL6180X и сервоприводом
VL6180X подключается по I2C (SDA/SCL), серва — на пин 9, питание от Arduino

Установка библиотеки Adafruit

Построение LIDAR-системы на Arduino с VL6180X и сервоприводом
Установка Adafruit_VL6180X через менеджер библиотек Arduino IDE

Код Arduino (скетч)

Сервопривод поворачивается от 0° до 180° с шагом 0.5°. На каждой позиции считывается расстояние (0-255) и отправляется в Serial в формате: range p angle_rad p angle_deg (разделитель «p»).

#include <Wire.h>
#include "Adafruit_VL6180X.h"
#include <Servo.h>

Adafruit_VL6180X vl = Adafruit_VL6180X();
Servo myservo;
float pos = 0;
const float Pi = 3.14159;

void setup() {
  myservo.attach(9);
  Serial.begin(115200);
  while (!Serial) delay(1);
  if (!vl.begin()) while (1); // Остановка если датчик не найден
}

void loop() {
  for (pos = 0; pos <= 180; pos += 0.5) {
    myservo.write(pos);
    uint8_t range = vl.readRange();
    Serial.println(String(range) + "p" + String(pos * Pi / 180) + "p" + String(pos));
    delay(10);
  }
  myservo.write(0);
  delay(2000); // Пауза перед следующим сканом
}

Код Processing (визуализация)

Запускается на компьютере, подключенном к Arduino по USB. Не забудьте поменять COMx на свой порт.

import processing.serial.*;

Serial myPort;
String val;
int range, i = 0;
float pos;

void setup() {
  size(550, 500);
  frameRate(36);
  String portName = "COM3"; // ВАШ ПОРТ!
  myPort = new Serial(this, portName, 115200);
  background(255);
}

void draw() {
  if (myPort.available() > 0) {
    val = myPort.readStringUntil('\n');
    if (val != null) {
      String[] nums = split(val, "p");
      if (nums.length == 3) {
        range = int(nums[0]);
        pos = float(nums[1]);
        i = int(nums[2]);
        if (i == 180) background(255); // Очистка экрана в конце скана
      }
    }
  }
  translate(25, -50);
  line(250, 500, 250 - 2 * (range * cos(pos)), 500 - 2 * (range * sin(pos)));
}
Построение LIDAR-системы на Arduino с VL6180X и сервоприводом
Визуализация сканирования в Processing

Ограничения и улучшения

Вопросы и предложения приветствуются!

Производственный процесс

  1. Газовые фонари: эволюция, дизайн и современное производство
  2. Лазерный указатель: дизайн, производство и обзор безопасности
  3. Фонарик: от изобретения к современным инновациям
  4. Калейдоскоп: от науки Брюстера к современному дизайну
  5. Полупроводниковые лазеры: точное генерирование света для современных технологий
  6. Искусство и наука фотографических процессов: от dageерротипов к современной пленке
  7. Светофоры: инженерия, история и будущие инновации
  8. От огня к нити накаливания: эволюция и производство современной лампы накаливания
  9. Оптоволокно: технологии, производство и перспективы
  10. Kodiak 3D LiDAR: Точная космическая дальномерность для миссий на высоких орбитах