Đo khoảng cách bằng Module Laser VL53L0X 6 chân và Màn hình TM1637 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 khoảng cách laser VL53L0X và hiển thị kết quả trên màn hình 7 đoạn TM1637. Dự án này kết hợp cả hai linh kiện để tạo ra một công cụ đo khoảng cách đơn giản nhưng hiệu quả. VL53L0X sử dụng công nghệ laser để cung cấp các phép đo khoảng cách chính xác, trong khi màn hình TM1637 hiển thị các kết quả này theo định dạng thân thiện với người dùng.


Chúng ta sẽ đi qua các phần cứng cần thiết, hướng dẫn đấu dây và mã code cần thiết để mọi thứ hoạt động. Đến cuối hướng dẫn này, bạn sẽ có một thiết bị đo khoảng cách hoạt động có thể được sử dụng trong nhiều ứng dụng khác nhau. Để có hướng dẫn trực quan, hãy xem video tại (trong video ở 00:00).
Giải thích phần cứng
Các thành phần chính cho dự án này là cảm biến khoảng cách laser VL53L0X và mô-đun hiển thị TM1637. VL53L0X là cảm biến thời gian bay đo khoảng cách đến một vật thể bằng cách phát ra chùm tia laser và tính toán thời gian để phản xạ quay trở lại. Nó hoạt động ở dải điện áp từ 2.6V đến 3.5V nhưng cũng có thể hoạt động với 5V nhờ bộ điều chỉnh điện áp tích hợp.
TM1637 là bộ điều khiển hiển thị điều khiển màn hình LED 7 đoạn. Nó giao tiếp qua giao diện 2 dây đơn giản (CLK và DIO), giúp dễ dàng kết nối với Arduino. Màn hình có thể hiển thị các giá trị số và hoàn hảo để trực quan hóa các phép đo khoảng cách từ cảm biến VL53L0X.
Chi tiết datasheet
| Nhà sản xuất | STMicroelectronics |
|---|---|
| Số bộ phận | VL53L0X |
| Điện áp logic/IO | 2.6 V - 3.5 V |
| Điện áp cấp nguồn | 2.6 V - 5 V |
| Nhiệt độ hoạt động | -20 °C đến 70 °C |
| Phạm vi đo | 30 mm đến 2000 mm |
| Tần số I2C | 400 kHz |
| Cài đặt thời gian chờ | 500 ms |
| Đóng gói | Mô-đun 6 chân |
- Đảm bảo nguồn điện phù hợp (5V là chấp nhận được).
- Kết nối chân XSHUT để tránh rò rỉ với điện trở kéo lên.
- Sử dụng I2C để giao tiếp; kết nối SDA và SCL một cách phù hợp.
- Xử lý thời gian chờ trong code để tránh hành vi không mong muốn.
- Lưu ý đến dải nhiệt độ hoạt động để đảm bảo độ chính xác.
Hướng dẫn đấu dây

Để đấu dây VL53L0X và màn hình TM1637, bắt đầu bằng cách kết nối chân VCC của VL53L0X với chân 5V trên Arduino và chân GND với chân nối đất trên Arduino. Tiếp theo, kết nối chân SDA của VL53L0X với chân A4 trên Arduino, thường được sử dụng cho giao tiếp dữ liệu I2C. Chân SCL nên được kết nối với chân A5 trên Arduino, được sử dụng cho tín hiệu xung nhịp.
Đối với màn hình TM1637, kết nối chân CLK với chân kỹ thuật số 2 trên Arduino và chân DIO với chân kỹ thuật số 3. Cuối cùng, kết nối chân XSHUT của VL53L0X với chân kỹ thuật số 12 trên Arduino. Đảm bảo rằng bất kỳ chân không sử dụng nào, chẳng hạn như GPIO1 trên VL53L0X, được để trống. Thiết lập này sẽ cho phép Arduino giao tiếp hiệu quả với cả cảm biến và màn hình.
Ví dụ code & hướng dẫn chi tiết
Code khởi tạo cảm biến và màn hình, thiết lập giao tiếp I2C và liên tục đọc các phép đo khoảng cách. Dưới đây là một đoạn trích hiển thị hàm setup nơi các chân được cấu hình và cảm biến được khởi tạo:
void setup() {
pinMode(12, INPUT_PULLUP); // đặt chân 12 làm đầu vào
digitalWrite(12, HIGH); // đặt chân 12 ở mức cao (5V)
Serial.begin(9600);
Wire.begin(); // giao tiếp I2C được khởi tạo
sensor.init(); // cảm biến khoảng cách được khởi tạo
sensor.setTimeout(500); // thời gian chờ được đặt
sensor.startContinuous(); // loại đo được đặt
}
Trong hàm setup này, chân cho XSHUT được cấu hình làm đầu vào với điện trở kéo lên và cảm biến được khởi tạo để đo liên tục. Màn hình nối tiếp cũng được thiết lập để hiển thị các kết quả đo khoảng cách.
Tiếp theo, vòng lặp chính đọc khoảng cách và cập nhật màn hình. Đây là một đoạn trích tập trung từ hàm loop:
void loop() {
int distance = sensor.readRangeContinuousMillimeters(); // đọc khoảng cách bằng mm
display.setSegments(clearLED); // xóa giá trị trước đó khỏi màn hình LED
display.showNumberDec(distance, false, 4, 0); // hiển thị khoảng cách
Serial.print("Distance: ");
Serial.print(distance); // in khoảng cách trên màn hình nối tiếp
}
Vòng lặp này liên tục đọc khoảng cách từ cảm biến và cập nhật màn hình TM1637 với phép đo mới nhất. Nó cũng in khoảng cách ra màn hình nối tiếp để gỡ lỗi. Nếu bạn muốn xem toàn bộ code, nó sẽ được tải xuống bên dưới bài viết.
Trình diễn / Điều gì sẽ xảy ra
Sau khi hoàn tất thiết lập và tải code lên, bạn sẽ thấy khoảng cách đo được bởi VL53L0X được hiển thị trên TM1637. Khi bạn di chuyển một vật thể đến gần hoặc ra xa cảm biến, giá trị hiển thị sẽ thay đổi tương ứng. Nếu bạn gặp bất kỳ kết quả đo bất thường nào, hãy đảm bảo rằng cảm biến không bị che chắn và bề mặt của vật thể phù hợp để phản xạ laser (trong video ở 09:30).
Các lỗi thường gặp bao gồm đấu dây ngược hoặc không khởi tạo cảm biến đúng cách, có thể dẫn đến lỗi thời gian chờ. Đảm bảo rằng các chân được kết nối đúng và cảm biến được cấp nguồn đầy đủ để có các phép đo khoảng cách chính xác.
/* This example shows how to use continuous mode to take readings.
This is Arduino code to measure distance with VL53L0X and display it on a TM1637 LED 7-segment display.
Original Laser Sensor source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: May 31, 2018 at 19:25 in Ajax, Ontario, Canada
You have to watch 1 video before using this code:
1- Watch VL53L0X video and get code https://youtu.be/1n9eJ9HaYpE
2- Watch TM1637 video and get code https://robojax.com?vid=robojax-TM1637
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)
*/
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
/////// start of TM1637 Display
#include <Arduino.h>
#include <TM1637Display.h>
#define CLK 2
#define DIO 3
#define TEST_DELAY 500
TM1637Display display(CLK, DIO);
uint8_t clearLED[] = { 0x0, 0x0, 0x0, 0x0 }; // value for clearing the LEDs
////// End of TM1637 Display
void setup()
{
pinMode(12,INPUT_PULLUP);// set pin 12 for input
digitalWrite(12,HIGH);// set pin 12 high (5V)
Serial.begin(9600);
Wire.begin();// I2C communication initialized
sensor.init();// distance sensor is initialized
sensor.setTimeout(500); // time out is set
// 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();// type of measurement is set
Serial.println("VL53L0X with MAX6675 test");
delay(500);
display.setBrightness(0x0f);// set brightness for display
}
void loop()
{
int distance =sensor.readRangeContinuousMillimeters();// read the distance in mm
display.setSegments(clearLED);// remove previous value from LED display
display.showNumberDec(distance, false, 4, 0);// display the distance
//distance = distance;
Serial.print("Distance: ");
Serial.print(distance);// print distance on serial monitor
Serial.print("mm");
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
delay(100);
}
Tài nguyên & tài liệu tham khảo
Chưa có tài nguyên nào.
Tập tin📁
Bảng dữ liệu (pdf)
-
Datasheet TM1637
/download/datasheet/robojax_TM1637_datasheet.pdf0.67 MB
Tập tin Fritzing
-
Mô-đun bảy đoạn TM1637
TM1637.fzpz0.01 MB -
Màn hình 7 đoạn 4 chữ số TM1637
TM1637-1.fzpz0.01 MB -
Cảm biến khoảng cách thời gian bay Adafruit VL6180XBộ phận Fritzing cho cảm biến khoảng cách thời gian bay Adafruit VL6180X. Cảm biến này đo khoảng cách tuyệt đối lên đến 100mm và ánh sáng xung quanh, giao tiếp qua I2C. Bao gồm bảng mạch cảm biến và các kết nối chân để sử dụng trong các dự án Fritzing.
Adafruit VL6180X Time of Flight Distance Sensor-1.fzpz0.02 MB
Hướng dẫn Sử dụng
-
Hướng dẫn sử dụng màn hình TM1637
robojax-TM1637_display_manual.pdf0.31 MB
Các tập tin khác
-
Thư viện Polou VL53L0X
robojax-VL53L0X-polou-arduino-master.zip0.02 MB -
Cảm biến khoảng cách VL53L0X màu tím
VL53L0X_Distance_sensor_purple.fzpz0.01 MB