lO MoARcPSD|9242611
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN
***
BÁO CÁO
NHẬP MÔN NGÀNH ĐIỆN
Đề tài: Kết nối Arduino
với thiết bị bên ngồi: module
VL53L5CX
GVHD: Chu Đức Việt
Nhóm : 2
SVTH: - Trần Tấn Dương 20202741.
- Nguyễn Tiến Dũng 20202786
- Nguyễn Tuấn Dương 20202740
- Lại Nguyễn Đức Giang 20202742
Hà Nội : tháng 2 năm 2022
MỤC LỤC
I. GIỚI THIỆU CHUNG............................................................................................ 3
1. Tính năng:............................................................................................................ 3
2. Ứng dụng:............................................................................................................ 4
3. Mô tả.................................................................................................................... 4
II. Thông số kĩ thuật.....................................................................................................5
1. Thông số chung....................................................................................................5
2. Trường quan sát....................................................................................................5
3. Trường chiếu sáng................................................................................................6
4. Sơ đồ khối hệ thống............................................................................................. 7
5. Cổng kết nối thiết bị.............................................................................................7
III. GIAO TIẾP VỚI MODULE VL53L5CX - SATEL VÀ ARDUINO......................9
1. Kết nối module lv53l5cx-satel với arduino..........................................................9
2. Lập trình điều khiển module VL53L5CX – SATEL..........................................10
I. GIỚI THIỆU CHUNG
MODLUE VL53L5CX - SATEL
1. Tính năng:
• Cảm biến đo khoảng cách đa vùng nhanh và chính xác:
-
Đầu ra đa vùng khác nhau với các vùng riêng biệt 4x4 hoặc 8x8.
-
Chế độ năng lượng thấp tự động với ngưỡng có thể lập trình ngắt để đánh thức
máy chủ.
- Lên đến 400 cm khác nhau.
- Phát hiện đa mục tiêu và đo khoảng cách trong mỗi khu vực.
- Khả năng tốc độ khung hình 60 Hz.
- Xử lý biểu đồ và bù theo thuật toán giảm thiểu hoặc loại bỏ tác động của nhiễu
xuyên âm kính che.
- Chỉ báo chuyển động cho từng khu vực để hiển thị nếu các mục tiêu đã di
chuyển và chúng đã di chuyển như thế nào.
• Mơ-đun thu nhỏ được tích hợp đầy đủ với trường nhìn rộng (FoV):
- Bộ phát: bề mặt khoang dọc phát ra ánh sáng vơ hình 940 nm phát ra tia laser
(VCSEL) và trình điều khiển tương tự tích hợp.
- FoV vng chéo 63 ° sử dụng các phần tử quang học nhiễu xạ (DOE) trên cả
bộ phát và bộ thu.
- Nhận mảng điốt tuyết lở photon đơn (SPAD).
- Bộ vi điều khiển công suất thấp chạy Firmware.
- Kích thước: 6.4 x 3.0 x 1.5 mm.
• Tích hợp dễ dàng:
- Thành phần có thể chỉnh lại đơn lẻ.
- Các tùy chọn nguồn điện linh hoạt, hoạt động đơn lẻ 3,3 V hoặc 2,8 V hoặc
kết hợp giữa 3,3 V hoặc 2,8 V AVDD với 1,8 V IOVDD.
- Tương thích với nhiều loại vật liệu kính che.
2. Ứng dụng:
• Sự hiểu biết về cảnh vật. Phát hiện khoảng cách đa vùng và đa đối tượng cho
phép lập bản đồ phòng 3D và phát hiện chướng ngại vật cho các ứng dụng robot.
• FoV rộng và quét đa vùng cho phép quản lý nội dung (tải trong xe tải, xe tăng,
thùng rác).
• Cơng nhận cử chỉ.
• Kiểm sốt mức chất lỏng.
• Chỉnh sửa keystone cho máy chiếu video.
• Tự động lấy nét hỗ trợ bằng laser (LAF). Nâng cao tốc độ và độ mạnh của hệ
thống AF của máy ảnh, đặc biệt là trong các cảnh khó ánh sáng yếu hoặc độ
tương phản thấp.
• Tăng cường thực tế ảo / thực tế ảo (AR / VR). Máy ảnh kép lập thể và hỗ trợ độ
sâu 3D nhờ đo khoảng cách đa vùng.
• Tịa nhà thơng minh và hệ thống chiếu sáng thông minh (phát hiện người dùng để
đánh thức thiết bị).
• IoT (phát hiện người dùng và đối tượng).
• Theo dõi tiêu điểm video. Phạm vi 60 Hz cho phép tối ưu hóa thuật tốn lấy nét
liên tục.
3. Mơ tả
VL53L5CX là cảm biến hiện đại, Time-of-Flight (ToF), cảm biến đa vùng nâng cao
dòng sản phẩm ST FlightSense. Nằm trong một gói nhỏ gọn có thể chỉnh lại, nó tích
hợp một mảng SPAD, bộ lọc hồng ngoại vật lý và các phần tử quang học nhiễu xạ
(DOE) để đạt được hiệu suất khác nhau tốt nhất trong các điều kiện ánh sáng xung
quanh khác nhau với nhiều loại vật liệu kính che phủ.
Việc sử dụng DOE phía trên bề mặt khoang thẳng đứng phát ra tia laser (VCSEL)
cho phép chiếu một FoV vuông lên hiện trường. Sự phản xạ của ánh sáng này được
thấu kính thu hội tụ vào một mảng SPAD.
Không giống như các cảm biến IR thông thường, VL53L5CX sử dụng công nghệ
ToF trực tiếp thế hệ mới nhất của ST cho phép đo khoảng cách tuyệt đối bất kể màu
sắc và độ phản xạ mục tiêu. Nó cung cấp phạm vi chính xác lên đến 400 cm và có
thể hoạt động ở tốc độ nhanh (60 Hz), khiến nó trở thành cảm biến ToF thu nhỏ, đa
vùng, nhanh nhất trên thị trường.
Có thể đo khoảng cách đa vùng lên đến 8x8 vùng với FoV chéo 63 ° rộng có thể
được giảm bớt bằng phần mềm
Nhờ các thuật tốn được cấp bằng sáng chế ST Histogram, VL53L5CX có thể phát
hiện các đối tượng khác nhau trong FoV. Biểu đồ cũng cung cấp khả năng miễn
dịch để che phủ nhiễu xun âm của thủy tinh ngồi 60 cm.
II. Thơng số kĩ thuật
1. Thơng số chung
Bảng 1. Các thơng số vl53l5cx
Tính năng
Chi tiết
Gói
Optical LGA16
Kích cỡ
6.4 x 3.0 x 1.5 mm
Phạm vi
2 to 400 cm mỗi vùng
Điện áp hoạt động
IOVDD: 1.8 hoặc 2.8 V hoặc 3.3 V
AVDD: 2.8 V hoặc 3.3 V
Nhiệt độ hoạt động
-30 đến 85 °C
Tần số mẫu
Lên tới 60 Hz
Bộ phát hồng ngoại
940 nm
I2C bus
I2C: 400 kHz to 1 MHz serial bus,
address: 0x52
Chế độ hoạt động
Liên tục hoặc tự động
2. Trường quan sát
Rx (hoặc bộ cảm biến) vùng loại trừ bao gồm tất cả các mô-đun dung sai lắp
ráp và được sử dụng để xác định kích thước cửa sổ đo. Cửa sổ đo phải bằng
hoặc rộng hơn khu vực loại trừ.
Khu vực phát hiện đại diện cho việc áp dụng của hệ thống FoV mà mục tiêu đc
phát hiện, và khoảng cách đo được. nó được xác định bởi ống kính Rx hoạc
khẩu độ Rx, và hẹp hơn vùng loại trừ.
Hình 1. Mơ tả hệ thống FoV và vùng loại trừ (ko theo tỉ lệ)
Bảng 2. góc FoV
Vùng phát hiện
Tổng vùng loại trừ
Ngang
Thẳng
Chéo
45 o
45 o
63 o
55.5 o
61 o
82 o
Note:
vùng phát hiện phụ thuộc vào mơi trường và cấu hình cảm biến cũng như khoảng
cách mục tiêu, độ phản xạ, mức độ ánh sáng xung quanh, độ phân giải cảm biến, bộ
mài, chế độ khác nhau và thời gian tích hợp.
Note:
vùng phát hiện Bảng 2. góc FoV được đo lường với mục tiêu vng góc phản xạ
88% trong FoV đầy đủ, nằm ở 1 m từ cảm biến, khơng có ánh sáng xung quanh (điều
kiện tối), với độ phân giải 8x8 và bộ làm sắc nét 14% (giá trị mặc định), ở chế độ
Liên tục ở 15 Hz.
3. Trường chiếu sáng
Trường chiếu sáng VCSEL (FoI) được thể hiện trong hình dưới. Cơng suất tín
hiệu phát ra tương đối phụ thuộc vào góc Fol và tương ứng với:
• 50 ° x 50 ° xét chùm tia với 75 % tín hiệu tối đa.
• 65 ° x 65 ° xét chùm tia với 10 % tín hiệu.
Hình 2. VL53L5CX FoI
4. Sơ đồ khối hệ
thống
Hình 3. sơ đồ khối VL53L5CX
5. Cổng kết nối thiết bị
Hình dưới đây cho thấy cổng kết nối của VL53L5CX
Hình 4. VL53L5CX pinout (góc nhìn từ dưới lên)
Bảng 3. Mơ tả chân kết nối VL53L5CX
Số pin
A1
Tên tín hiệu
I2C_RST
Loại tín hiẹu
Digital input
Mơ tả tín hiệu
Đặt lại chân I2C, kích hoạt ở trạng thái
high. Chuyển đổi chân này từ 0 sang 1,
rồi trở lại 0 để đặt lại I2C . Nối đất GND
qua trở 47 kΩ.
A2
RSVD4
A3
INT
A4
IOVDD
Reserved
Digital input/output
(I/O)
Power
Nối đất ground
Đầu ra gián đoạn, mặc định là opendrain
output (tristate), cần trở 47 kΩ đến
IOVDD
Nguồn 1.8 V, 2.8 V or 3.3 V cấp cho lõi kĩ
thuật số và nguồn I/O
Kích hoạt comms. Đặt chân này là logic 0
để vơ hiệu hóa I2C comms khi thiết bị ở
A5
LPn
Digital input
chế độ LP. Đặt chán này là logic 1 để kích
hoạt I2C comms ở chế độ LP. Đặc biệt
dùng khi cần thay đổi địa chỉ (adress) I2C
trong hệ thống đa thiết bị. Cần trở 47 kΩ
đến IOVDD.
A6
RSVD1
Reserved
Nối đất (ground)
A7
RSVD2
Reserved
Nối đất (ground)
B1
AVDD
Power
Nguồn 2.8 V or 3.3 V analog nguồn
VCSEL
B4
THERMALPAD
Ground
Nối đất ground để dẫn tản nhiệt tốt hơn
B7
AVDD
Power
Nguồn 2.8 V or 3.3 V analog và VCSEL
C1
GND
Ground
Ground
C2
RSVD6
Reserved
Chân đa nhiệm I/O, mặc định là
opendrain output (tristate), cần trở 47 kΩ
đến IOVDD
C3
SDA
Digital I/O
Data (hai chiều), cần trở 2.2 kΩ đến
IOVDD
C4
SCL
Digital input
Đồng hồ (đầu vào input), cần trở 2.2 kΩ
đến IOVDD
C5
RSVD5
Reserved
Không kết nối
C6
RSVD3
Reserved
Nối đất (ground)
C7
GND
Ground
Ground
Note:
chân THERMALPAD phải được kết nối với ground
Note:
tất cả các tín hiệu kỹ thuật phải được chuyển đến mức IOVDD .
Note:
bật chân I2C_RST chỉ đặt lại giao tiếp cảm biến I2C. khơng thiết lập lại bản thân
cảm biến đó.
III. GIAO TIẾP VỚI MODULE VL53L5CX - SATEL VÀ
ARDUINO
1. Kết nối module lv53l5cx-satel với arduino
lO MoARcPSD|9242611
Hình 5. Sơ đồ kết nối chân vl53l5cx-satel và arduino
Kênh kết nối trái
Kênh kết nối phải
VL53L5C XPin No. Pin Name MCU Pin MCU Pin Pin Name Pin No.
SATEL
Downloaded by tran quang
VL53L5C XSATEL
-
-
-
-
PC5
D15
10
SCL
-
-
-
-
PC4
D14
9
SDA
-
-
-
-
-
AREF
8
-
-
-
-
-
GND
7
-
1
NC
-
PB5
D13
6
-
2
IOREF
-
PB4
D12
5
-
3
RESET
PC6
PB3
~D11
4
IOVDD
4
+3V3
-
PB2
~D10
3
AVDD
5
+5V
-
PB1
~D9
2
6
GND
-
PB0
D8
1
7
GND
-
-
-
-
8
VIN
-
PD7
D7
8
-
-
-
~PD6
D6
7
1
A0
PC0
~PD5
D5
6
I2C_RST
2
A1
PC1
PD4
D4
5
INT
3
A2
PC2
~PD3
D3
4
LPn
4
A3
PC3
PD2
D2
3
5
A4
PC4
PD1
D1
2
6
A5
PC5
PD0
D0
1
PWR_EN
GND
Bảng 4. Sơ đồ chân kết nối module vl53l5cx-satel và arduino tương ứng
2. Lập trình điều khiển module VL53L5CX – SATEL
Dưới đây là một vài ví dụ về code trong lập trình điều khiển module VL53CXSATEL:
- Ví dụ 1: Đọc 64 giá trị khoảng cách cùng lúc.
#include <Wire.h>
#include <SparkFun_VL53L5CX_Library.h>
//http://librarymanager/All#SparkFun_VL53L5CX
SparkFun_VL53L5CX myImager;
VL53L5CX_ResultsData measurementData; /* Result data class structure, 1356 byes
of RAM */
int imageResolution = 0; /*Used to pretty print output*/
int imageWidth = 0; /*Used to pretty print output*/
void setup(){
Serial.begin(115200);
delay(1000);
Serial.println("SparkFun VL53L5CX Imager Example");
Wire.begin(); /*This resets to 100kHz I2C*/
Serial.println("Initializing sensor board. This can take up to 10s. Please wait.");
if (myImager.begin() == false){
Serial.println(F("Sensor not found - check your wiring. Freezing"));
while (1) ;
}
myImager.setResolution(8*8); /*Enable all 64 pads*/
imageResolution = myImager.getResolution(); /*Query sensor for current
resolution - either 4x4 or 8x8*/
imageWidth = sqrt(imageResolution); /*Calculate printing width*/
myImager.startRanging();
}
void loop(){
/*Poll sensor for new data*/
if (myImager.isDataReady() == true){
if (myImager.getRangingData(&measurementData)) /*Read distance data
into array*/
{
/*The ST library returns the data transposed from zone mapping
shown in datasheet*/
/*Pretty-print data with increasing y, decreasing x to reflect reality*/
for (int y = 0 ; y <= imageWidth * (imageWidth - 1) ; y +=
imageWidth){
for (int x = imageWidth - 1 ; x >= 0 ; x--){
Serial.print("\t");
Serial.print(measurementData.distance_mm[x + y]);
}
Serial.println();
}
Serial.println();
}
}
delay(5); /*Small delay between polling*/
}
- Ví dụ 2: Thiết lập bus I2C để giảm thiểu số lượng khoảng thời gian cần
thiết để kích hoạt cảm biến.
#include <Wire.h>
#include <SparkFun_VL53L5CX_Library.h>
/*http://librarymanager/All#SparkFun_VL53L5CX*/
SparkFun_VL53L5CX myImager;
VL53L5CX_ResultsData measurementData; /*Result data class structure, 1356 byes
of RAM*/
int imageResolution = 0; /*Used to pretty print output*/
int imageWidth = 0; /*Used to pretty print output*/
void setup()
{
Serial.begin(115200);
delay(1000);
Serial.println("SparkFun VL53L5CX Imager Example");
Wire.begin(); /*This resets I2C bus to 100kHz*/
Wire.setClock(400000); /*Sensor has max I2C freq of 400kHz*/
/*Wire.setClock(1000000)*/; /*Run sensor out of spec*/
/*myImager.setWireMaxPacketSize(128); /*Increase default from 32 bytes to
128 - not supported on all platforms*/
Serial.println("Initializing sensor board. This can take up to 10s. Please wait.");
/*Time how long it takes to transfer firmware to sensor*/
long startTime = millis();
bool startup = myImager.begin();
long stopTime = millis();
if (startup == false){
Serial.println(F("Sensor not found - check your wiring. Freezing"));
while (1) ;
}
Serial.print("Firmware transfer time: ");
float timeTaken = (stopTime - startTime) / 1000.0;
Serial.print(timeTaken, 3);
Serial.println("s");
myImager.setResolution(8*8); /*Enable all 64 pads*/
imageResolution = myImager.getResolution(); /*Query sensor for current
resolution - either 4x4 or 8x8*/
imageWidth = sqrt(imageResolution); /*Calculate printing width*/
myImager.startRanging();
}
void loop(){
/*Poll sensor for new data*/
if (myImager.isDataReady() == true){
if (myImager.getRangingData(&measurementData)) /*Read distance data
into array*/
{
/*The ST library returns the data transposed from zone mapping shown
in datasheet*/
/*Pretty-print data with increasing y, decreasing x to reflect reality*/
for (int y = 0 ; y <= imageWidth * (imageWidth - 1) ; y +=
imageWidth){
for (int x = imageWidth - 1 ; x >= 0 ; x--){
Serial.print("\t");
Serial.print(measurementData.distance_mm[x + y]);
}
Serial.println();
}
Serial.println();
}
}
delay(5); /*Small delay between polling*/
}
- Ví dụ 3: Tăng tần số đầu ra.
#include <Wire.h>
#include <SparkFun_VL53L5CX_Library.h>
/*http://librarymanager/All#SparkFun_VL53L5CX*/
SparkFun_VL53L5CX myImager;
VL53L5CX_ResultsData measurementData; /* Result data class structure, 1356 byes
of RAM*/
int imageResolution = 0; /*Used to pretty print output*/
int imageWidth = 0; /*Used to pretty print output*/
void setup(){
Serial.begin(115200);
delay(1000);
Serial.println("SparkFun VL53L5CX Imager Example");
Wire.begin(); /*This resets I2C bus to 100kHz*/
Wire.setClock(400000); /*Sensor has max I2C freq of 400kHz*/
Serial.println("Initializing sensor board. This can take up to 10s. Please wait.");
if (myImager.begin() == false){
Serial.println(F("Sensor not found - check your wiring. Freezing"));
while (1) ;
}
myImager.setResolution(8 * 8); /*Enable all 64 pads*/
imageResolution = myImager.getResolution(); /*Query sensor for current
resolution - either 4x4 or 8x8*/
imageWidth = sqrt(imageResolution); /*Calculate printing width*/
/*Using 4x4, min frequency is 1Hz and max is 60Hz*/
/*Using 8x8, min frequency is 1Hz and max is 15Hz*/
bool response = myImager.setRangingFrequency(15);
if (response == true){
int frequency = myImager.getRangingFrequency();
if (frequency > 0){
Serial.print("Ranging frequency set to ");
Serial.print(frequency);
Serial.println(" Hz.");
}
else
Serial.println(F("Error recovering ranging frequency."));
}
else{
Serial.println(F("Cannot set ranging frequency requested. Freezing..."));
while (1) ;
}
myImager.startRanging();
}
void loop(){
/*Poll sensor for new data*/
if (myImager.isDataReady() == true){
if (myImager.getRangingData(&measurementData)) /*Read distance data
into array*/
{
/*The ST library returns the data transposed from zone mapping
shown in datasheet*/
/*Pretty-print data with increasing y, decreasing x to reflect reality*/
for (int y = 0 ; y <= imageWidth * (imageWidth - 1) ; y +=
imageWidth){
for (int x = imageWidth - 1 ; x >= 0 ; x--){
Serial.print("\t");
Serial.print(measurementData.distance_mm[x + y]);
}
Serial.println();
}
Serial.println();
}
}
delay(5); /*Small delay between polling*/
}