Componente · Sensor

Sensor ToF VL53L0X

O VL53L0X mede distância com laser, não com som, por I²C. Seu feixe concentrado e preciso é ideal para robôs que precisam de medições de distância precisas.

O que é

O VL53L0X mede distância como um medidor a laser—com luz em vez de som. Ele emite um pulso invisível de laser infravermelho e cronometra a ida e a volta, fornecendo uma leitura concentrada, rápida e com precisão de milímetros por I²C. Enquanto um HC-SR04 detecta um cone largo com alguns centímetros de dispersão, o VL53L0X detecta um ponto estreito com precisão—o sensor indicado quando “aproximadamente quanto” não é suficiente.

Diagrama rotulado de uma placa adaptadora do sensor de tempo de voo VL53L0X: uma pequena placa roxa com o encapsulamento de tempo de voo no centro, mostrando duas aberturas—um emissor de laser redondo e um receptor SPAD quadrado—uma seta de feixe de laser apontando para fora e um conector de 6 pinos (VIN, GND, SCL, SDA, GP1, XSH) na parte inferior.
Um laser infravermelho é emitido pelo emissor, e o receptor SPAD cronometra o reflexo—medição por tempo de voo com um feixe estreito e precisão de milímetro. Baixar SVG

Como funciona

O encapsulamento contém duas aberturas: um emissor de laser e um receptor SPAD (um detector de fóton único). O sensor emite um pulso de luz infravermelha de 940 nm; o receptor cronometra o tempo até o reflexo retornar e, como a luz viaja a uma velocidade conhecida, converte esse tempo em distância. Toda a temporização acontece no próprio chip; seu microcontrolador apenas lê o valor em milímetros por I²C. As vantagens e desvantagens em relação ao som são exatamente as analisadas em ultrassom versus sensores de tempo de voo.

Quando usar

Use um VL53L0X quando um robô precisar de medição precisa com feixe estreito:

  • Distâncias próximas e exatas — avaliar uma abertura específica, acompanhar uma parede a uma distância definida ou fazer uma parada precisa.
  • Obstáculos pequenos ou finos — uma perna de mesa ou um fio que o cone largo do ultrassônico misturaria na leitura ou deixaria passar.
  • Malhas rápidas — atualizações de até 50 Hz para um controle responsivo.

Para a detecção barata e tolerante de “há algo à frente?” em uma área mais ampla, o HC-SR04 é a opção mais vantajosa—as ideias de filtragem da leitura do HC-SR04 se aplicam a qualquer sequência de medições, inclusive com laser.

Conexões e armadilhas

  • I²C e endereços conflitantes. Todos os VL53L0X compartilham um endereço padrão—use o pino XSHUT para ligá-los um de cada vez e reatribuir endereços quando usar vários.
  • Considere a luz ambiente. Sol forte (muito infravermelho) e superfícies escuras ou espelhadas reduzem o alcance útil.
  • Mantenha a janela limpa. Uma impressão digital ou poeira na abertura dispersa o feixe e corrompe as leituras.
  • Respeite o limite próximo (~5 cm); como qualquer sensor de distância, ele tem uma zona morta perto demais para medir.

Pinagem

Pino Nome O que faz
1 VIN 3–5 V. A placa adaptadora regula a saída para os 2,8 V do sensor
2 GND Massa
3 SCL Relógio I²C
4 SDA Dados I²C
5 GPIO1 Saída de interrupção — dispara quando uma medição está pronta
6 XSHUT Desligamento, ativo em nível baixo. Mantenha-o em LOW para desativar totalmente o sensor

XSHUT é o pino que torna possível usar vários sensores, e vale entender seu funcionamento antes de comprar o segundo.

Usando vários sensores VL53L0X

Todos os VL53L0X inicializam no mesmo endereço, 0x29, e não há pinos de seleção de endereço. Coloque dois no mesmo barramento e ambos respondem ao mesmo tempo, o que corrompe todas as transações. O endereço pode ser alterado em software, mas a alteração é volátil—ela se perde a cada ciclo de alimentação.

A solução padrão usa XSHUT para ligá-los um de cada vez:

#include <Wire.h>
#include <VL53L0X.h>

const int XSHUT[] = {4, 5, 6};          // one GPIO per sensor
const uint8_t ADDR[] = {0x30, 0x31, 0x32};
VL53L0X sensor[3];

void setup() {
  Wire.begin();

  // 1. Hold every sensor in reset.
  for (int i = 0; i < 3; i++) { pinMode(XSHUT[i], OUTPUT); digitalWrite(XSHUT[i], LOW); }
  delay(10);

  // 2. Release one at a time and give each a new address before the next wakes.
  for (int i = 0; i < 3; i++) {
    digitalWrite(XSHUT[i], HIGH);
    delay(10);
    sensor[i].init();
    sensor[i].setAddress(ADDR[i]);      // now it is off 0x29 and the next can boot
    sensor[i].setTimeout(500);
  }
}

Dois detalhes confundem as pessoas: os pinos precisam ser levados a LOW para entrar em redefinição e depois liberados, e toda a sequência precisa ser executada novamente após cada ciclo de alimentação, porque os endereços não persistem. Algumas placas adaptadoras mantêm XSHUT em nível alto com um resistor integrado; portanto, simplesmente deixar o pino flutuante mantém o sensor ativado.

Orçamento de temporização: o seletor entre precisão, velocidade e alcance

O VL53L0X tem uma configuração mais importante que todas as outras, e a maioria dos exemplos nunca a altera. O orçamento de temporização define por quanto tempo o sensor pode integrar fótons em uma medição e estabelece um compromisso entre três fatores:

Orçamento de temporização Taxa de atualização Alcance típico Melhor para
20 ms ~50 Hz ~0,8 m Malhas de controle rápidas, alcance próximo
33 ms (padrão) ~30 Hz ~1,2 m Uso geral
66 ms ~15 Hz ~1,7 m Maior precisão à distância
200 ms ~5 Hz ~2 m Alcance máximo, medição estática
sensor.setMeasurementTimingBudget(20000);   // microseconds

Também existem modos de longo alcance e alta precisão que ajustam o limiar da taxa de sinal e os períodos de pulso. A regra prática é: se o sensor não está indo longe o bastante, permita mais tempo de medição antes de culpar o sensor. Um orçamento de 200 ms realmente dobra o alcance útil em relação a um de 20 ms.

Código mínimo funcional

#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;

void setup() {
  Serial.begin(115200);
  Wire.begin();

  if (!sensor.init()) {
    Serial.println("VL53L0X not found");   // check wiring and XSHUT
    while (1) {}
  }
  sensor.setTimeout(500);
  sensor.setMeasurementTimingBudget(33000);
  sensor.startContinuous();
}

void loop() {
  uint16_t mm = sensor.readRangeContinuousMillimeters();

  if (sensor.timeoutOccurred()) {
    Serial.println("timeout");
  } else if (mm >= 8190) {
    Serial.println("out of range");        // 8190/8191 mean "no valid target"
  } else {
    Serial.println(mm);
  }
  delay(20);
}

8190 e 8191 não são distâncias. São a forma do sensor dizer que não recebeu nenhum retorno utilizável—não há nada ali, ou o alvo está escuro demais ou longe demais. Código que trata 8191 como 8,19 metros se comportará de forma estranha em uma sala vazia; código que o trata como zero acionará a parada de emergência do robô.

O que ele não consegue enxergar

O VL53L0X falha em praticamente o conjunto oposto de superfícies do sensor ultrassônico, e esse é todo o fundamento para escolher entre eles.

Condição O que acontece Por quê
Superfícies pretas e foscas O alcance cai muito, muitas vezes para um terço Quase nada da luz de 940 nm retorna
Espelhos e metal polido Lê longe ou nada O feixe reflete de forma especular, como a luz no vidro
Luz solar direta intensa O alcance desaba A luz do sol é cheia de infravermelho de 940 nm e sobrepõe o retorno
Vidro Lê de forma imprevisível o que está atrás ou o próprio vidro Transmite parcialmente e reflete parcialmente
Mais próximo que ~3–5 cm Não confiável Abaixo da distância mínima de operação do sensor
Além de ~1,2 m nas configurações padrão A medição expira Aumente o orçamento de temporização antes de concluir que ele quebrou

O caso da luz do sol merece ênfase por ser o mais surpreendente. Um VL53L0X que funciona perfeitamente em ambientes internos pode ser quase inútil em uma estufa iluminada pelo sol, e a falha é gradual—o alcance encurta, em vez de as leituras ficarem obviamente erradas.

Solução de problemas

Sintoma Causa provável Solução
init() falha Ligação errada ou XSHUT mantido em LOW Varra o barramento em busca de 0x29; confirme que XSHUT está em HIGH ou flutuante em nível alto
Dois sensores, mas apenas um funciona Ambos estão em 0x29 Use a sequência XSHUT acima em toda inicialização
Endereços perdidos após um ciclo de alimentação São voláteis por projeto Execute novamente a sequência de atribuição no setup()
Lê 8190/8191 constantemente Nenhum retorno válido Verifique a cor, a distância e a luz ambiente do alvo
Alcance bem menor que 2 m Orçamento de temporização padrão Aumente para 100–200 ms
Funciona em ambientes internos, mas falha ao ar livre Infravermelho ambiente do sol Proteja o sensor ou use ultrassom ao ar livre
As leituras derivam ao longo de minutos Janela suja ou temperatura Limpe a abertura; execute a calibração do sensor
Valores atípicos ocasionais Borda do alvo ou reflexo parcial Aplique um filtro de mediana à sequência, como em qualquer sensor de distância

VL53L0X ou outra opção?

Componente Alcance Destaque Escolha quando
VL53L0X 5 cm – 2 m A opção barata e onipresente Medição precisa de curta distância em ambientes internos
VL53L1X 4 cm – 4 m Dobro do alcance e região de interesse programável Você precisa de mais alcance ou de estreitar o campo de visão em software
VL6180X 5 mm – 20 cm Alcance muito curto; também mede luz ambiente Detecção de aberturas e proximidade na escala de centímetros
HC-SR04 2 cm – 4 m Som, cone largo e nenhuma biblioteca necessária Detecção barata e tolerante de obstáculos; enxerga superfícies escuras
Sharp GP2Y0A21 10–80 cm Triangulação infravermelha analógica, um pino ADC Não há I²C disponível e uma saída não monotônica é aceitável

O VL53L1X merece destaque específico: é uma alternativa de substituição direta em quase todos os aspectos, e sua região de interesse programável permite estreitar o campo de visão em software—na prática, direcionar o feixe sem mover o sensor. Se você está escolhendo hoje, em vez de usar o que já tem, ele costuma ser a melhor compra.

Explore o grafo

Usado nestas montagens

Projetos, caminhos de aprendizagem e simuladores que incluem Sensor ToF VL53L0X.

Comparar

Alternativas

Perguntas

Perguntas frequentes sobre Sensor ToF VL53L0X

Qual é a distância máxima do VL53L0X?

Cerca de 2 metros no modo padrão—algumas placas trocam taxa de atualização por maior alcance. É mais preciso na faixa próxima; depois de um ou dois metros, ou sob luz infravermelha ambiente intensa, como a luz do sol, as leituras ficam pouco confiáveis. Também existe uma zona morta próxima, abaixo de aproximadamente 5 cm.

Quais são as limitações do VL53L0X?

O alcance é curto (~2 m) em comparação com o de um sensor ultrassônico; luz do sol intensa e superfícies escuras ou espelhadas o reduzem ainda mais. Todos os sensores vêm com o mesmo endereço I²C; por isso, usar vários exige o truque de XSHUT para reatribuir endereços. Mantenha a janelinha limpa, pois a poeira dispersa o feixe.

O VL53L0X funciona em superfícies pretas?

Mal. Superfícies escuras e foscas absorvem o laser infravermelho, deixando o reflexo fraco e reduzindo muito o alcance útil—uma parede preta produz uma leitura muito mais próxima do limite do sensor do que uma parede branca. Superfícies brilhantes ou espelhadas também o enganam, devolvendo o feixe para longe do receptor.

O que é o sensor de distância por laser VL53L0X?

Um pequeno sensor de tempo de voo que mede distância com luz em vez de som. Ele emite um pulso invisível de laser infravermelho de 940 nm e cronometra o tempo até o reflexo retornar, oferecendo uma leitura concentrada, rápida e com precisão de milímetros por I²C.

Tempo de voo ou ultrassom—qual é melhor?

Um sensor de tempo de voo como o VL53L0X tem um feixe estreito e precisão de milímetro, portanto detecta um ponto específico e objetos pequenos que um sensor ultrassônico deixaria passar. O HC-SR04 é mais barato, tem maior alcance, e seu cone largo ajuda a não perder obstáculos. Use ToF para precisão e ultrassom para detecção barata e tolerante.

Leitura complementar

Referências