Đ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.

Để đạ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ất | STMicroelectronics |
|---|---|
| Số bộ phận | VL53L0X |
| Điện áp Logic/IO | 1,8 V đến 2,8 V |
| Điện áp cung cấp | 2,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

Để đấ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 5V và GND 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 SDA và SCL 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).
/*
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
-
AmazonPurchase VL53L0X from Amazonamzn.to
-
eBayPurchase VL53L0X from eBayebay.us
-
AliExpressPurchase 1 to 10 pcs of VL53L0X from AliExpresss.click.aliexpress.com
-
BanggoodPurchase 1 to 10 pcs of VL53L0X from Banggoodbanggood.com
Tài nguyên & tài liệu tham khảo
-
Bên ngoàiAdafruit download pagelearn.adafruit.com
-
Bên ngoàiPurchase 1 to 10 pcs of VL53L0X from AliExpresss.click.aliexpress.com
-
Bên ngoàiPurchase 1 to 10 pcs of VL53L0X from Banggoodbanggood.com
-
Bên ngoàiPurchase VL53L0X from eBayebay.us
-
Bên ngoàiVL53L0X datasheet (PDF)st.com
Tập tin📁
Tập tin Fritzing
-
VL53L0X_Distance_sensor_Squares
VL53L0X_Distance_sensor_Squares.fzpz0.02 MB
Các tập tin khác
-
Thư viện Adafruit VL53L0X từ Robojax
robojax-VL52L0X_Adafruit_VL53L0X-master.zip0.08 MB -
VL53L0X_Distance_sensor_purple
VL53L0X_Distance_sensor_purple.fzpz0.01 MB