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?
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.
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
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ó
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
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 ...