Search Code

Meranie vzdialenosti pomocou laserového modulu VL53L0X so 6 pinmi pre Arduino

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.

VL53L0X 200cm range sensor

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ýrobcaSTMicroelectronics
Označenie dieluVL53L0X
Logické/I-O napätie2,6 V až 3,5 V (5 V s regulátorom)
Prevádzková teplota-20 °C až 70 °C
Rozsah merania30 mm až 2000 mm
Frekvencia I2C komunikácie400 kHz
Rozmery4,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

Arduino wiring VL53L0X laser distance sensor
Arduino wiring VL53L0X laser distance sensor

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

Images

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
Arduino wiring VL53L0X laser distance sensor
Arduino wiring VL53L0X laser distance sensor
103-Measureing distance using VL53L0X TOF range sensor
Language: C++
/* 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

Resources & references

Files📁

Fritzing File

  • VL53L0X_Distance_sensor_Squares
    VL53L0X_Distance_sensor_Squares.fzpz 0.02 MB
  • Adafruit VL6180X Time of Flight Distance Sensor
    Fritzing 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.fzpz 0.02 MB

Other files