Meranie vzdialenosti pomocou laserového modulu VL53L0X so 6 pinmi pre Arduino
V tomto návode sa naučíme, ako merať vzdialenosť pomocou laserového snímača vzdialenosti VL53L0X s modulom so 6 pinmi. Tento malý, ale výkonný snímač využíva technológiu času letu na poskytovanie presných meraní vzdialenosti až do 200 cm. Podľa tohto návodu budete schopní pripojiť snímač k Arduinu a čítať hodnoty vzdialenosti priamo z vášho sériového monitora.

Pre tento projekt použijeme snímač VL53L0X, ktorý je kompaktný a ľahko integrovateľný do rôznych aplikácií. Snímač komunikuje cez I2C, vďaka čomu je jednoduché ho pripojiť k doske Arduino. Vo videu nájdete ďalšie vysvetlenia a ukážky procesu zapojenia (vo videu o 04:00).
Vysvetlenie hardvéru
VL53L0X je snímač vzdialenosti s časom letu, ktorý vysiela laserový lúč a meria čas, ktorý svetlo potrebuje na návrat po odraze od objektu. To mu umožňuje presne vypočítať vzdialenosť k objektu. Snímač pracuje pri napätí medzi 2,6 V až 3,5 V, ale môže byť napájaný 5 V vďaka internému regulátoru napätia.
Modul má šesť pinov: VCC, GND, SDA (dátová linka), SCL (hodinová linka), GPIO1 (všeobecný vstup/výstup) a XSHUT (vypínací pin). Pin GPIO1 sa v tejto konfigurácii nepoužíva a môže zostať nepripojený. Pin XSHUT umožňuje vypnúť snímač na úsporu energie, keď sa nepoužíva.
Podrobnosti z datasheetu
| Výrobca | STMicroelectronics |
|---|---|
| Označenie dielu | VL53L0X |
| Logické/I-O napätie | 2,6 V až 3,5 V (5 V s regulátorom) |
| Prevádzková teplota | -20 °C až 70 °C |
| Rozsah merania | 30 mm až 2000 mm |
| Frekvencia I2C komunikácie | 400 kHz |
| Rozmery | 4,4 mm x 2,4 mm x 1 mm |
- Zabezpečte správne napájanie (odporúča sa 5 V).
- Pripojte SDA a SCL na príslušné I2C piny na Arduine.
- Ak je to potrebné, použite pull-up rezistory na I2C linkách.
- Nenechávajte GPIO1 nepripojený; môže zostať plávajúci.
- Počas prevádzky udržiavajte pin XSHUT na vysokej úrovni.
- Merajte vzdialenosti v dobre osvetlenom prostredí pre lepšiu presnosť.
- Kalibrujte snímač pre presné merania.
- Otestujte rozsah snímača umiestnením objektov do rôznych vzdialeností.
- Sledujte sériový výstup pre hodnoty vzdialenosti a správy o časovom limite.
Pokyny na zapojenie

Na zapojenie snímača VL53L0X k Arduinu začnite pripojením pinu VCC snímača na pin 5V na Arduine. Potom pripojte pin GND na GND na Arduine. Pin SDA snímača by mal byť pripojený na pin A4 na Arduine (alebo na pin SDA, ak má vaša doska vyhradené I2C piny). Podobne pripojte pin SCL snímača na pin A5 (alebo na pin SCL). Pin GPIO1 nechajte nepripojený, pretože nie je potrebný pre tento projekt.
Nakoniec pripojte pin XSHUT na digitálny pin 12 na Arduine. Tento pin sa použije na riadenie stavu vypnutia snímača. Uistite sa, že všetky spojenia sú pevné, aby ste predišli problémom s komunikáciou.
Príklady kódu a vysvetlenie
V kóde začneme zahrnutím potrebných knižníc a inicializáciou snímača VL53L0X. Funkcia setup nakonfiguruje snímač a spustí nepretržité merania vzdialenosti. Tu je ukážka z funkcie setup:
void setup() {
pinMode(12, INPUT_PULLUP);
digitalWrite(12, HIGH);
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
sensor.startContinuous();
}
V tejto ukážke nastavíme pin 12 ako vstup s pull-up rezistorom a inicializujeme sériovú komunikáciu pri 9600 baudoch. Tiež inicializujeme snímač a nastavíme časový limit pre čítania, čím zabezpečíme jeho nepretržitú prevádzku.
Ďalej čítame vzdialenosť vo funkcii loop, kde sa nameraná hodnota vypíše na sériový monitor:
void loop() {
int distance = sensor.readRangeContinuousMillimeters();
Serial.print("Vzdialenosť: ");
Serial.print(distance);
Serial.print("mm");
if (sensor.timeoutOccurred()) { Serial.print(" ČASOVÝ LIMIT"); }
Serial.println();
delay(100);
}
Tento kód číta vzdialenosť v milimetroch a vypisuje ju na sériový monitor. Ak dôjde k časovému limitu, znamená to, že snímač nezískal platné čítanie.
Ukážka / Čo očakávať
Keď spustíte program, mali by ste začať vidieť merania vzdialenosti na sériovom monitore. Výstup bude kolísať, keď budete pohybovať objektmi bližšie alebo ďalej od snímača. Môžete si všimnúť občasné správy o časovom limite, ak snímač nezíska čítanie (vo videu o 10:30). Na zlepšenie presnosti zvážte spriemerovanie viacerých čítaní.
/* This example shows how to use continuous mode to take
range measurements with the 6-pin VL53L0X module. It is based on
vl53l0x_ContinuousRanging_Example.c from the VL53L0X API.
The range readings are in units of mm.
Original source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com/RJT83
Date modified: May 31, 2018 at 19:25 in Ajax, Ontario, Canada
Watch the instruction video for this code https://youtu.be/S2jaAQEv3Yo
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;
void setup()
{
pinMode(12,INPUT_PULLUP);
digitalWrite(12,HIGH);
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();
}
void loop()
{
int distance =sensor.readRangeContinuousMillimeters();
//int distance =sensor.startContinuous(100);
//distance = distance;
Serial.print("Distance: ");
Serial.print(distance);
Serial.print("mm");
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
delay(100);
}
Things you might need
-
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
Resources & references
-
ExternalPurchase 1 to 10 pcs of VL53L0X from AliExpresss.click.aliexpress.com
-
ExternalPurchase 1 to 10 pcs of VL53L0X from Banggoodbanggood.com
-
ExternalPurchase VL53L0X from Amazonamzn.to
-
ExternalPurchase VL53l0x from eBayebay.us
Files📁
Fritzing File
-
VL53L0X_Distance_sensor_Squares
VL53L0X_Distance_sensor_Squares.fzpz0.02 MB -
Adafruit VL6180X Time of Flight Distance SensorFritzing 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.fzpz0.02 MB
Other files
-
Polou VL53L0X library
robojax-VL53L0X-polou-arduino-master.zip0.02 MB -
VL53L0X_Distance_sensor_purple
VL53L0X_Distance_sensor_purple.fzpz0.01 MB