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