Tìm kiếm mã

Đo Khoảng Cách bằng Module Laser VL53L0X 6 Chân và LCD1602-I2C cho Arduino

Đo Khoảng Cách bằng Module Laser VL53L0X 6 Chân và LCD1602-I2C cho Arduino

Trong hướng dẫn này, chúng ta sẽ học cách đo khoảng cách bằng cảm biến laser VL53L0X và hiển thị kết quả trên LCD1602 có giao diện I2C. Dự án này cho phép bạn có được các phép đo khoảng cách chính xác bằng milimét hoặc centimét, biến nó thành một bổ sung linh hoạt cho bất kỳ dự án nào dựa trên Arduino. Đến cuối hướng dẫn này, bạn sẽ có một hệ thống đo khoảng cách hoạt động đầy đủ, dễ thiết lập và sử dụng.

VL53L0X 200cm range sensor

Để đạt được điều này, chúng ta sẽ sử dụng cảm biến khoảng cách laser VL53L0X, giao tiếp với Arduino qua I2C. Màn hình LCD1602 sẽ cung cấp biểu diễn trực quan rõ ràng về khoảng cách đo được. Để rõ ràng về quá trình viết mã, vui lòng tham khảo video tại (trong video lúc 00:00).

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

Các thành phần chính trong bản dựng này là cảm biến khoảng cách laser VL53L0X và màn hình LCD1602. VL53L0X sử dụng tia laser để đo khoảng cách chính xác, phù hợp cho nhiều ứng dụng khác nhau, bao gồm robot và tự động hóa. Nó hoạt động bằng giao tiếp I2C, cho phép tích hợp dễ dàng với Arduino.

Màn hình LCD1602 là màn hình ký tự hỗ trợ I2C có thể hiển thị tối đa 16 ký tự trên hai dòng. Nó đơn giản hóa quá trình hiển thị dữ liệu vì cần ít chân hơn so với LCD truyền thống. Cùng nhau, các thành phần này tạo ra một hệ thống đo khoảng cách mạnh mẽ và thân thiện với người dùng.

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

Nhà sản xuấtSTMicroelectronics
Số bộ phậnVL53L0X
Điện áp Logic/IO1,8 V đến 2,8 V
Điện áp cung cấp2,6 V đến 3,5 V
Dòng điện đầu ra (mỗi kênh)
Dòng điện đỉnh (mỗi kênh)
Hướng dẫn tần số PWM
Ngưỡng logic đầu vào
Sụt áp / RDS(on) / bão hòa
Giới hạn nhiệt
Đóng gói
Ghi chú / biến thể

  • Đảm bảo điện áp cung cấp phù hợp (2,6 V đến 3,5 V).
  • Sử dụng điện trở kéo lên trên các đường SDA và SCL nếu cần.
  • Giữ cảm biến tránh xa các bề mặt phản chiếu để tránh đọc sai.
  • Xác minh địa chỉ I2C (mặc định là 0x29 cho VL53L0X).
  • Cân nhắc tản nhiệt nếu sử dụng trong môi trường nhiệt độ cao.

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

Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)

Để đấu dây cảm biến VL53L0X và màn hình LCD1602, bắt đầu bằng cách kết nối nguồn và đất. Kết nối chân VCC của VL53L0X với chân 5V trên Arduino và chân GND với đất của Arduino. Đối với LCD1602, kết nối VCC của nó với cùng 5VGND với đất.

Tiếp theo, kết nối các đường giao tiếp I2C. Chân SDA của VL53L0X nên được kết nối với chân A4 trên Arduino, và chân SCL nên đi đến A5. Chân XSHUT có thể được kết nối với D12 trên Arduino, nhưng cũng có thể để không kết nối. Đối với LCD1602, đảm bảo SDASCL cũng được kết nối với cùng các chân như cảm biến VL53L0X.

Ví dụ Mã & Hướng dẫn

VL53L0X sensor;

#include 
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(9600);
  Wire.begin();
  sensor.init();
  sensor.setTimeout(500);
  sensor.startContinuous();
  lcd.begin();
  lcd.backlight(); 
}

Trong hàm setup, chúng ta khởi tạo giao tiếp nối tiếp và bus I2C. sensor.init() khởi tạo cảm biến VL53L0X, trong khi lcd.begin() khởi tạo màn hình LCD. Đèn nền của màn hình được bật lên, cho phép nhìn rõ dễ dàng.

void loop() {
  int distance = sensor.readRangeContinuousMillimeters();
  Serial.print("Distance: ");
  lcd.clear();
  lcd.print("Robojax VL53L0X");
  lcd.setCursor(0,1); 
  lcd.print("Dist.: ");
  lcd.setCursor(7,1); 
  lcd.print(distance); 
  Serial.println();
  delay(100);
}

Bên trong vòng lặp, chúng ta liên tục đọc khoảng cách bằng sensor.readRangeContinuousMillimeters() và in nó ra màn hình nối tiếp. LCD được cập nhật với phép đo khoảng cách, cung cấp phản hồi theo thời gian thực. Độ trễ 100 mili giây đảm bảo rằng các lần đọc không được cập nhật quá thường xuyên, cho phép đọc dễ dàng.

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

Khi được bật nguồn, hệ thống sẽ liên tục đo khoảng cách và hiển thị kết quả trên LCD. Bạn có thể mong đợi thấy các giá trị khoảng cách thay đổi khi bạn di chuyển các vật thể đến gần hoặc ra xa cảm biến. Nếu có bất kỳ vấn đề nào với cảm biến, chẳng hạn như lỗi hết thời gian, các thông báo thích hợp sẽ được in ra màn hình nối tiếp (trong video lúc 03:15).

Hình ảnh

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
113-Measure distance with a laser VL53L0X 6-pin module and an LCD1602-I2C for Arduino
Ngôn ngữ: C++
/* 

This is Arduino code to measure distance with VL53L0X and display it on LCD1602 with I2C module.
Distance is displayed in mm (millimeter) or cm (centimeter).

Original Laser Sensor source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: Jun 28, 2018 at 19:06 in Ajax, Ontario, Canada

Watch the video instruction for this code: https://youtu.be/t14ly7Y09oI
You can get this code from RoboJax.com.
Pin connection

VL53L0X Pin  Arduino Pin
VCC         5V
GND         GND
SDA         A4 or SDA if available
SCL         A5 or SCL if available
GPIO1       leave it unconnected
XSHUT       D12 (digital 12 or pin 12)

LCD1602 Pin

*/


#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;


#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

const int type = 1;// 1=mm , 2= cm
String unit;// variable for unit, mm or cm
void setup()
{

  Serial.begin(9600);
  Wire.begin();

  sensor.init();
  sensor.setTimeout(500);

  // Start continuous back-to-back mode (take readings as
  // fast as possible).  To use continuous timed mode
  // instead, provide a desired inter-measurement period in
  // ms (e.g. sensor.startContinuous(100)).
  sensor.startContinuous();
  
  // initialize the LCD, 
  lcd.begin();
  // Turn on the blacklight and print a message.
  lcd.backlight(); 
}

void loop()
{
  int distance =sensor.readRangeContinuousMillimeters();
  //int distance =sensor.startContinuous(100);

 //distance = distance;
  Serial.print("Distance: ");

  //start of loop Robojax code for LCD with I2C
  lcd.clear();
  lcd.print("Robojax VL53L0X");
  lcd.setCursor (0,1); // go to start of 2nd line
  lcd.print("Dist.: ");
  lcd.setCursor (7,1); // go to start of 2nd line
  if(type ==2){
    float distanceCM = (float) (distance/10.0);
      unit ="cm";
      lcd.print(distanceCM);
      Serial.print(distanceCM);
      Serial.print(unit);      
    }else{
    unit ="mm";
      lcd.print(distance);
      Serial.print(distance);
      Serial.print(unit);       
    }  

  lcd.print(unit);    
  
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

  Serial.println();
  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

Các tập tin khác