亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

构建 Arduino 激光雷达系统:VL6180X ToF 传感器 + 舵机扫描

元器件与物料

元器件 数量 备注
Arduino UNO 1 主控制器
SparkFun ToF 测距传感器 - VL6180X 1 短距测距;长距可选 VL53L0X
舵机 (通用) 1 驱动传感器旋转扫描

软件与在线服务

项目简介

关于 LiDAR 的基础知识

LiDAR (光探测与测距) 通过发射激光脉冲并测量回波时间来确定目标距离。广泛应用于机器人环境感知、物体分类、地形测绘及自主着陆导航。核心组件:发射器 (激光)、接收器 (光电二极管)、机械扫描机构 (旋转镜/点头镜)。

测距原理主要有两种:
1. 直接飞行时间 (ToF):发射脉冲激光,测量往返时间。需皮秒级电子器件,成本高。
2. 相位差法:发射调制连续波,测量发射/反射光相位差。公式:D = τ × θ / 4π (τ 为调制波长,θ 为相位差)。

VL6180X / VL53L0X 是 ST 意法半导体的 ToF 传感器,手机自动对焦即用此技术。VL53L0X 精度更高、无线性问题、无「双重成像」模糊。本项目用 VL6180X 实现 180° 扫描,生成 2D 环境地图,用于毕业设计自主导航车辆。优于超声波:感知锥角极窄、速度快、精度高。

电路图

构建 Arduino 激光雷达系统:VL6180X ToF 传感器 + 舵机扫描

安装 Adafruit VL6180X 库

构建 Arduino 激光雷达系统:VL6180X ToF 传感器 + 舵机扫描

在 Arduino IDE 库管理器搜索「Adafruit VL6180X」安装。

Arduino 代码

#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() {
  // 0° 到 180° 扫描,步进 0.5°
  for (pos = 0; pos <= 180; pos += 0.5) {
    myservo.write(pos);
    uint8_t range = vl.readRange(); // 读取距离 (mm)
    // 格式: 距离 p 角度(弧度) p 角度(度)
    Serial.println(String(range) + "p" + String(pos * Pi / 180) + "p" + String(pos));
    delay(10);
  }
  // 可选:回扫代码已注释
  myservo.write(0);
  delay(2000); // 复位等待
}

Processing 可视化代码

运行前修改 portName 为实际 Arduino 串口 (如 "COM3"):

import processing.serial.*;

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

void setup() {
  size(550, 500);
  frameRate(36);
  String portName = "COMx"; // 修改此处
  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)));
}
构建 Arduino 激光雷达系统:VL6180X ToF 传感器 + 舵机扫描

性能限制: 传感器刷新率限 10 Hz,舵机高速响应差。如需高速 LiDAR,建议改用步进电机/带编码器直流电机 + 导电滑环 (Adafruit #736) 实现连续 360° 旋转。

欢迎提问与建议!

代码

原理图

见上文「电路图」章节。

制造工艺

  1. 煤气灯:演变、设计与现代制造
  2. 激光笔:设计、制造与安全概览
  3. 手电筒:从诞生到现代创新
  4. 万花筒:从布鲁斯特科学发明到现代设计艺术
  5. 半导体激光器:现代科技的精密光源
  6. 摄影工艺的艺术与科学:从达盖尔银版到现代胶片
  7. 交通信号灯:工程原理、历史沿革与未来创新
  8. 从火到灯丝:现代灯泡的演进与生产
  9. 光纤:技术、生产与未来
  10. 手势控制 RGB 台灯 —— 交互式免手操作照明
  11. DIY 蓝牙控制 Arduino 间谍小车
  12. Kodiak 3D激光雷达:高轨道任务精密空间测距