Tìm kiếm mã

Sử dụng Máy đo khoảng cách laser VL53L0X với Arduino

Sử dụng Máy đo khoảng cách laser VL53L0X với Arduino

Trong hướng dẫn này, chúng ta sẽ khám phá cách sử dụng máy đo khoảng cách laser VL53L0X với Arduino. Thiết bị này cho phép bạn đo khoảng cách chính xác bằng tia laser, lý tưởng cho các ứng dụng khác nhau như robot và tự động hóa. Đến cuối hướng dẫn này, bạn sẽ có một thiết lập chức năng có thể đo khoảng cách và hiển thị chúng trong màn hình nối tiếp.

VL53L0X 200cm range sensor-blue

Đối với dự án của chúng tôi, chúng tôi sẽ sử dụng thư viện VL53L0X Adafruit, giúp đơn giản hóa quá trình giao tiếp với cảm biến. Thư viện này cung cấp các chức năng cần thiết để khởi tạo cảm biến, đọc các phép đo và xử lý bất kỳ lỗi nào có thể phát sinh. Bạn có thể tham khảo video để biết hướng dẫn trực quan về cách thiết lập (trong video lúc 02:15).

Giải thích phần cứng

Các thành phần chính của dự án này bao gồm máy đo khoảng cách laser VL53L0X và bo mạch Arduino. VL53L0X là cảm biến thời gian bay sử dụng tia laser để đo khoảng cách lên đến 2 mét với độ chính xác cao. Nó hoạt động thông qua giao thức I2C, cho phép giao tiếp dễ dàng với Arduino.

Bo mạch Arduino đóng vai trò là bộ vi điều khiển xử lý dữ liệu từ VL53L0X. Nó gửi lệnh đến cảm biến và nhận các phép đo khoảng cách, sau đó có thể được hiển thị hoặc sử dụng trong các ứng dụng khác. Hệ thống dây điện thích hợp là rất quan trọng để đảm bảo kết quả đọc chính xác từ cảm biến.

Chi tiết bảng dữ liệu

Nhà sản xuấtSTMicroelectronics
Một phần sốVL53L0X
Hoạt động voltage2.6 V đến 3.5 V
Phạm vi30 mm đến 2000 mm
Chính xác±3% điển hình
Giao diệnI2C
Phạm vi nhiệt độ-40 ° C đến +85 ° C
Mức tiêu thụ hiện tại<1 mA (chế độ chờ), 20 mA (hoạt động)
GóiVFLGA-8 ·

  • Đảm bảo cảm biến được cấp nguồn đúng cách (2.6 V đến 3.5 V).
  • Duy trì cài đặt địa chỉ I2C chính xác để tránh xung đột.
  • Giữ cảm biến sạch sẽ để đo khoảng cách chính xác.
  • Sử dụng điện trở kéo lên thích hợp trên đường I2C nếu cần.
  • Tránh ánh nắng trực tiếp vào cảm biến để có kết quả đáng tin cậy.

Hướng dẫn đấu dây

Arduino Wiring for VL53L0X
Arduino Wiring for VL53L0X

Để đấu dây cảm biến VL53L0X với Arduino, hãy kết nối chân VCC của cảm biến với chân 5V trên Arduino. Chân GND phải được kết nối với đất (GND) của Arduino. Đối với giao tiếp I2C, hãy kết nối chân SDA của VL53L0X với chân A4 trên Arduino và kết nối chân SCL với chân A5. Nếu bạn đang sử dụng một mô hình Arduino khác, hãy tham khảo các chỉ định chân SDA và SCL cụ thể cho bo mạch đó.

Ví dụ: trên Arduino Mega, bạn sẽ kết nối SDA với chân 20 và SCL với chân 21. Đảm bảo rằng tất cả các kết nối đều an toàn để tránh sự cố giao tiếp. Nếu cảm biến không phản hồi, hãy kiểm tra kỹ hệ thống dây điện và đảm bảo rằng Arduino được cấp nguồn đúng cách.

Ví dụ về mã và hướng dẫn

Dưới đây là đoạn trích từ chức năng thiết lập khởi tạo cảm biến 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);
  }
}

Mã này khởi tạo giao tiếp nối tiếp và cố gắng khởi động cảm biến VL53L0X. Nếu cảm biến không khởi động được, nó sẽ in thông báo lỗi và tạm dừng chương trình.

Tiếp theo, đây là một đoạn trích từ hàm vòng lặp đọc phép đo khoảng cách:

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);
}

Khối này liên tục đọc phép đo khoảng cách từ cảm biến và in nó lên màn hình nối tiếp. Nếu phép đo nằm ngoài phạm vi, nó cho biết điều này tương ứng.

Trình diễn / Điều gì sẽ xảy ra

Khi bạn chạy chương trình, bạn sẽ thấy các phép đo khoảng cách được hiển thị trên màn hình nối tiếp. Các bài đọc sẽ cập nhật sau mỗi 100 mili giây. Nếu cảm biến đang hướng vào một vật thể, nó sẽ hiển thị khoảng cách tính bằng milimét. Nếu đối tượng nằm ngoài phạm vi, nó cũng sẽ chỉ ra điều đó. Đảm bảo kiểm tra cảm biến trong phạm vi quy định để có kết quả tối ưu (trong video lúc 10:00).

Dấu thời gian video

  • 00:00-Giới thiệu
  • 02:15- Thiết lập hệ thống dây điện
  • 05:30- Giải thích mã
  • 10:00-Cuộc biểu tình

Hình ảnh

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
Ngôn ngữ: C++
/* This example shows how to use continuous mode to take
range measurements with the VL53L0X.
// Original source from Adafruit https://github.com/adafruit/Adafruit_VL53L0X
// Modified by Ahmad Shamshiri for RoboJax.com
// Date modified: Sep 26, 2017
// Nejrabi

* Get this code and other Arduino codes from Robojax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. 

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

   Copyright (c) 2015, Majenko Technologies
   All rights reserved.

   Redistribution and use in source and binary forms, with or without modification,
   are permitted provided that the following conditions are met:

 * * Redistributions of source code must retain the above copyright notice, this
     list of conditions and the following disclaimer.

 * * Redistributions in binary form must reproduce the above copyright notice, this
     list of conditions and the following disclaimer in the documentation and/or
     other materials provided with the distribution.

 * * Neither the name of Majenko Technologies nor the names of its
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include "Adafruit_VL53L0X.h"

Adafruit_VL53L0X lox = Adafruit_VL53L0X();

void setup() {
  Serial.begin(9600);

  // wait until serial port opens for native USB devices
  while (! Serial) {
    delay(1);
  }
  
  Serial.println("Robojax Test");
  if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X"));
    while(1);
  }
  // power 
  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); // pass in 'true' to get debug data printout!

  if (measure.RangeStatus != 4) {  // phase failures have incorrect data
    Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
  } else {
    Serial.println(" out of range ");
  }
    
  delay(100);
}

Nghĩ bạn có thể cần

Tài nguyên & tài liệu tham khảo

Tập tin📁

Tập tin Fritzing

  • Adafruit VL6180X Time of Flight Distance Sensor
    Fritzing part for the Adafruit VL6180X Time of Flight distance sensor. This sensor measures absolute distance up to 100mm and ambient light, communicating via I2C. Includes the sensor breakout board and pin connections for use in Fritzing projects.
    Adafruit VL6180X Time of Flight Distance Sensor-1.fzpz 0.02 MB

Các tập tin khác