O assunto de hoje é o sensor de distância a laser VL53L0x da ST semiconductos. É um sensor de distância que usa laser (não visível) e é capaz de medir até dois (2) metros. Se você quiser ler seu datasheet, ele está aqui.
Ele tem uma tecnologia que quase não importa a cor e a refletância do objeto alvo a ser medido, provavelmente funcionará. A “advertência” é que ele só pode ser usado para detectar objetos bem na sua frente.
Além disso, “tempo de voo” significa que ele mede o tempo que a luz leva para ir embora e voltar do alvo.
O circuito
Não há segredo no que estamos fazendo aqui, tudo o que você precisa são os dois pinos para i2c (SDA, SCL), 3V3 e GND.
Montá-lo em uma breadboard resultou no circuito abaixo, muito compacto mesmo. Você pode ignorar a placa de circuito roxa à direita, é um conversor de 5V para 3V3 AMS1117-3.3 não usado agora.
A biblioteca necessária para que este teste funcione no Arduino IDE é “VL53L0x by Pololu”. Para instalá-la vá em “Sketch > Include library > Manage library …” e digite “VL53L0x by Pololu”.
Testando o código
Após instalar a biblioteca no Arduino IDE, abri o exemplo “Continuous” em “File > Examples > VL53L0x > Continuous”. Ele é visto abaixo. Não houve necessidade de alterar nada no código.
/* This example shows how to use continuous mode to take
range measurements with the VL53L0X. It is based on
vl53l0x_ContinuousRanging_Example.c from the VL53L0X API.
The range readings are in units of mm. */
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
void setup()
{
Serial.begin(9600);
Wire.begin();
sensor.setTimeout(500);
if (!sensor.init())
{
Serial.println("Failed to detect and initialize sensor!");
while (1) {}
}
// 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()
{
Serial.print(sensor.readRangeContinuousMillimeters());
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
}
Posicionei uma caneca a 160-170 mm do sensor (veja abaixo) e as medições do VL53L0x estavam em torno de 184-187 mm. Não é tão ruim, mas não é exatamente preciso.
Usar a biblioteca Adafruit no Arduino IDE me deu resultados semelhantes, então não vou mostrar isso para você aqui. Em relação às diferenças de medidas, aparentemente o sensor tem seu próprio erro que não pode ser corrigido. Eu não usaria o sensor como uma régua digital, por exemplo, mas para medidas pequenas e menos precisas, seria apenas um ajuste.
Pra finalizar
Por mais barato que esse sensor seja, ele fornece medições bastante constantes e concisas. Como vimos, ele não é 100% preciso, mas pode ser corrigido manualmente, se necessário (no esboço).
Se você quiser saber mais sobre sensores de “distância”, leia sobre este de presença que escrevi há algum tempo. Caso queira comprar o sensor usado neste artigo (VL53L0x), clique no meu link de afiliado aqui.
Deixe um comentário