VL53L0X: sensor de distància làser d'alta precisió

VL53L0X

En alguns dels teus projectes hauràs necessitat mesurar distàncies. Doncs has de saber que el VL53L0X és un dispositiu que permet mesurar-les amb una alta precisió. A més, la seva reduïda grandària i el baix preu que té el fan ideal per als teus projectes DIY, especialment per integrar amb Arduino.

Hi ha molts dispositius que poden mesurar distàncies, alguns d'ells són distanciòmetres basats en ultrasons que emeten un so i a l'rebotar amb l'objecte permet saber amb força exactitud la distància que hi ha. Però si vols la més alta de les precisions, per a això necessites un distanciòmetre òptic. Aquest tipus de dispositius de mesura es basa en làser, Com és el cas de l'VL53L0X.

Què és el ToF?

ToF principi (esquema)

Cambra de temps de vol o ToF (Time-of-Flight) és una tècnica utilitzada per mesurar distàncies. Es basa en l'òptica, mesurant el temps transcorregut entre l'emissió d'un feix lluminós i la recepció. Poden ser sensors CCD, CMOS, i els polsos poden ser infrarojos, làser, etc. El sistema estarà sincronitzat per començar el mesurament de temps just quan es llança el pols i aturar el comptador quan reben el rebot pel sensor.

D'aquesta forma, es pot calcular la distància amb força precisió. Tan sols cal una circuiteria lògica addicional integrada en el xip per fer els càlculs des que es llança el feix fins que es rep i així determinar quina és la distància. El principi és força senzill.

ESP8266
Article relacionat:
ESP8266: el mòdul WIFI per Arduino

Aquest tipus de dispositius s'empren en robòtica per permetre a l'robot o drone evitar obstacles, saber a quina distància es troben d'un objectiu, per detectar moviment o proximitat, per a sensors per a automòbils usats per a diferents aplicacions, per implementar un metre electrònic, com un actuador perquè Arduino faci alguna cosa quan detecti certa proximitat d'un objecte, etc.

Què és el VL53L0X i datasheet

VL53L0X

El VL53L0X empra aquest principi per mesurar distàncies per infraroig làser d'última generació. Juntament amb un processador, com Arduino, pot ser una potent eina per a mesurar. Concretament el xip pot captar distàncies d'entre 50mm i 2000mm, és a dir, entre 5 centímetres i 2 metres.

Per mesurar distàncies més properes probablement necessitis una variant d'aquest xip anomenada VL6180X que permet mesurar un rang d'entre 5 i 200 mm, és a dir, entre mig centímetre i 20 centímetres. Si vols trobar un dispositiu similar però basat en ultrasons per qualsevol motiu tècnic, llavors hauries de mirar l'HC-SR04, un altre mòdul bastant barat i popular entre els makers.

El xip VL53L0X ha estat dissenyat per a funcionar fins i tot quan la llum ambiental és força elevada. Tingues en compte que a l'treballar de forma òptica, mentre més gran sigui la «contaminació» lluminosa de l'ambient, més complicat serà captar adequadament el rebot del senyal. Però en aquest cas no presenta massa problema. A més, el sistema de compensació que integra li permet mesurar fins i tot si ho fas servir després d'un vidre protector.

Això ho transformen en un dels millors sensors de distàncies que trobaràs al mercat. Amb una precisió bastant superior als sensors basats en ultrasons o infrarojos (IR). El motiu de ser tan precís és que el làser no es veurà afectat per ecos o reflectància d'objectes com passa en els altres casos.

Actualment pots trobar integrat en muls amb alguns extra per uns 16 € o en plaques més simples de poc més d'1 € o 3 € en altres casos. Ja saps que el trobaràs a botigues com eBay, AliExpress, Amazon, etc. Els fabricants d'aquests dispositius són diversos, de manera que si necessites conèixer els detalls de el model que has comprat el millor és que comprovis el datasheet de l'fabricant que has triat. Per exemple:

El VL53L0X té dins de l'xip l'emissor de el pols làser i el sensor per captar el feix que torna. En aquest cas l'emissor és un làser de 940nm de longitud d'ona i de tipus VCSEL (Vertical Cavity Surface-Emitting Laser). Pel que fa a l'sensor de captació és un SPAD (Single Photon Avalanche Diodes). També integra una electrònica interna anomenada FlightSenseTM que calcularà la distància.

El angle de mesurament o FOV (Field of View) és de 25º en aquest cas. Això es tradueix a una àrea de mesurament de 0,44m de diàmetre a una distància de 1 m. Tot i que el rang de mesurament dependrà de les condicions de l'entorn. Si es fa a l'interior és una mica superior a si es fa a l'exterior. També dependrà de la reflectància de l'objecte a què apunts:

reflectància objectiu Condicions Interior Exterior
objectiu blanc típic 200cm 80cm
mímimo 120cm 60cm
objectiu gris típic 80cm 50cm
mínim 70cm 40cm

A més, el VL53L0X té diversos modes de funcionament que pot variar els resultats. Aquests modes es resumeixen en la següent taula:

Mode Sincronització Abast Precisió
per defecte 30ms 1.2m Veure la taula següent
Alta precisió 200ms 1.2m + / - 3%
Llarg abast 33ms 2m Veure la taula següent
Alta velocitat 20ms 1.2m + / - 5%

Segons aquestes maneres, tenim diverses precisions estàndard i de llarg abast que tens en aquesta taula:

Interior Exterior
reflectància objectiu Distància 33ms 66ms Distància 33ms 66ms
objectiu blanc un 120cm 4% 3% un 60cm 7% 6%
objectiu gris un 70cm 7% 6% un 40cm 12% 9%

Pinout i connexió

VL53L0X diagrama de el xip

 

Perquè tot això funcioni adequadament necessita una interfície amb l'exterior. I això s'aconsegueix a través d'uns pins o connexions. El pinout de l'VL53L0X és bastant simple, només disposa de 6 pins. Per a la seva integració amb Arduino es pot fer la comunicació mitjançant I2C.

Per alimentar-lo, pots connectar els pins així:

  • VCC a 5v d'Arduino
  • GND a GND d'Arduino
  • SCL a un pin analògic d'Arduino. Per exemple A5
  • SDA a un altre pin analògic. Per exemple A4
  • Els pins GPI01 i XSHUT no els has de fer servir de moment.

Integració amb Arduino

VL53L0X connectat a Arduino

A l'igual que per molts mòduls, per a l'VL53L0X també tens biblioteques (pe la de Adafruit) De codi disponibles que pots fer servir per treballar amb certes funcions quan escrius el codi font per gestionar el teu projecte en Arduino IDE. Si és la primera vegada amb Arduino, et recomano nostre manual de programació.

Un exemple d' codi simple perquè prengui mesures i mostri el valor del mesurament mitjançant el port sèrie perquè puguis veure-ho des de la pantalla del teu PC mentre tinguis la placa Arduino connectada és:

#include "Adafruit_VL53L0X.h"
 
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
 
void setup() {
  Serial.begin(9600);
 
  // Iniciar sensor
  Serial.println("VL53L0X test");
  if (!lox.begin()) {
    Serial.println(F("Error al iniciar VL53L0X"));
    while(1);
  }
}
 
 
void loop() {
  VL53L0X_RangingMeasurementData_t measure;
    
  Serial.print("Leyendo sensor... ");
  lox.rangingTest(&measure, false); // si se pasa true como parametro, muestra por puerto serie datos de debug
 
  if (measure.RangeStatus != 4)
  {
    Serial.print("Distancia (mm): ");
   Serial.println(measure.RangeMilliMeter);
  } 
  else
  {
    Serial.println("  Fuera de rango ");
  }
    
  delay(100);
}

A la pròpia biblioteca de Adafruit tens més exemples d'ús si ho necessites ...


El contingut d'l'article s'adhereix als nostres principis de ètica editorial. Per notificar un error punxa aquí.

Sigues el primer a comentar

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

Prova d’anglèsTest CatalàTest espanyol