Medindo distância com o módulo laser VL53L0X de 6 pinos e o display TM1637 para Arduino
Neste tutorial, vamos aprender como medir a distância usando o sensor de distância a laser VL53L0X e exibir as leituras em um display de 7 segmentos TM1637. Este projeto combina ambos os componentes para criar uma ferramenta de medição de distância simples, porém eficaz. O VL53L0X usa tecnologia laser para fornecer leituras de distância precisas, enquanto o display TM1637 mostra essas leituras em um formato amigável ao usuário.


Vamos passar pelo hardware necessário, pelas instruções de fiação e pelo código para colocar tudo em funcionamento. Ao final deste tutorial, você terá um dispositivo de medição de distância funcional que pode ser usado em várias aplicações. Para um guia visual, não deixe de conferir o vídeo (no minuto 00:00).
Hardware Explicado
Os componentes principais deste projeto são o sensor de distância a laser VL53L0X e o módulo de display TM1637. O VL53L0X é um sensor de tempo de voo (ToF) que mede a distância até um objeto emitindo um feixe laser e calculando o tempo que a reflexão demora para retornar. Ele opera numa faixa de tensão de 2,6 V a 3,5 V, mas também pode funcionar com 5 V graças a um regulador de tensão integrado.
O TM1637 é um controlador de display que aciona um display LED de 7 segmentos. Ele se comunica por meio de uma interface simples de 2 fios (CLK e DIO), facilitando a conexão a um Arduino. O display pode mostrar valores numéricos e é perfeito para visualizar as medições de distância do sensor VL53L0X.
Detalhes da ficha técnica
| Fabricante | STMicroelectronics |
|---|---|
| Número da peça | VL53L0X |
| Tensão lógica/E/S | 2,6 V - 3,5 V |
| Tensão de alimentação | 2.6 V - 5 V |
| Temperatura de operação | de -20 °C a 70 °C |
| Faixa de medição | 30 mm a 2000 mm |
| Frequência I2C | 400 kHz |
| Configuração do tempo limite | 500 ms |
| Pacote | módulo de 6 pinos |
- Certifique-se de uma fonte de alimentação adequada (5V é aceitável).
- Conecte o pino XSHUT a um resistor pull-up para evitar fuga de corrente.
- Use I2C para comunicação; conecte SDA e SCL adequadamente.
- Trate timeouts no código para evitar comportamentos inesperados.
- Fique atento à faixa de temperatura de operação para garantir a precisão.
Instruções de fiação

Para ligar o VL53L0X e o display TM1637, comece conectando o pino VCC do VL53L0X ao pino 5V do Arduino e o pino GND a um pino de terra do Arduino. Em seguida, conecte o pino SDA do VL53L0X ao pino A4 do Arduino, que normalmente é usado para comunicação de dados I2C. O pino SCL deve ser conectado ao pino A5 do Arduino, usado para o sinal de clock.
Para o display TM1637, conecte o pino CLK ao pino digital 2 do Arduino e o pino DIO ao pino digital 3. Por fim, conecte o pino XSHUT do VL53L0X ao pino digital 12 do Arduino. Garanta que quaisquer pinos não utilizados, como o GPIO1 do VL53L0X, permaneçam desconectados. Essa configuração permitirá que o Arduino se comunique efetivamente com o sensor e com o display.
Exemplos de código e guia passo a passo
O código inicializa o sensor e o display, configura a comunicação I2C e lê continuamente as medições de distância. Abaixo está um trecho mostrando a função setup onde os pinos são configurados e o sensor é inicializado:
void setup() {
pinMode(12, INPUT_PULLUP); // set pin 12 for input
digitalWrite(12, HIGH); // set pin 12 high (5V)
Serial.begin(9600);
Wire.begin(); // I2C communication initialized
sensor.init(); // distance sensor is initialized
sensor.setTimeout(500); // time out is set
sensor.startContinuous(); // type of measurement is set
}Na função setup, o pino XSHUT é configurado como entrada com resistor de pull-up, e o sensor é inicializado para medição contínua de distância. O monitor serial também é configurado para exibir as leituras de distância.
Em seguida, o loop principal lê a distância e atualiza o display. Aqui está um trecho focado da função loop:
void loop() {
int distance = sensor.readRangeContinuousMillimeters(); // read the distance in mm
display.setSegments(clearLED); // remove previous value from LED display
display.showNumberDec(distance, false, 4, 0); // display the distance
Serial.print("Distance: ");
Serial.print(distance); // print distance on serial monitor
}Este loop lê continuamente a distância do sensor e atualiza o display TM1637 com a medição mais recente. Também imprime a distância no monitor serial para fins de depuração. Se quiser ver o código completo, ele será exibido abaixo do artigo.
Demonstração / O que esperar
Ao concluir a configuração e fazer o upload do código, você deverá ver a distância medida pelo VL53L0X exibida no TM1637. Ao aproximar ou afastar um objeto do sensor, o valor exibido mudará de acordo. Se você tiver leituras inesperadas, verifique se o sensor não está obstruído e se a superfície do objeto é adequada para a reflexão do laser (no vídeo em 09:30).
Erros comuns incluem fiação invertida ou não inicializar corretamente o sensor, o que pode levar a erros de tempo limite. Certifique-se de que os pinos corretos estão conectados e de que o sensor está alimentado adequadamente para medições de distância precisas.
/* This example shows how to use continuous mode to take readings.
This is Arduino code to measure distance with VL53L0X and display it on a TM1637 LED 7-segment display.
Original Laser Sensor source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: May 31, 2018 at 19:25 in Ajax, Ontario, Canada
You have to watch 1 video before using this code:
1- Watch VL53L0X video and get code https://youtu.be/1n9eJ9HaYpE
2- Watch TM1637 video and get code https://robojax.com?vid=robojax-TM1637
You can get this code from Robojax.com
Pin connection
VL53L0X Pin Arduino Pin
VCC 5V
GND GND
SDA A4 or SDA if available
SCL A5 or SCL if available
GPIO1 leave it unconnected
XSHUT D12 (digital 12 or pin 12)
*/
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
/////// start of TM1637 Display
#include <Arduino.h>
#include <TM1637Display.h>
#define CLK 2
#define DIO 3
#define TEST_DELAY 500
TM1637Display display(CLK, DIO);
uint8_t clearLED[] = { 0x0, 0x0, 0x0, 0x0 }; // value for clearing the LEDs
////// End of TM1637 Display
void setup()
{
pinMode(12,INPUT_PULLUP);// set pin 12 for input
digitalWrite(12,HIGH);// set pin 12 high (5V)
Serial.begin(9600);
Wire.begin();// I2C communication initialized
sensor.init();// distance sensor is initialized
sensor.setTimeout(500); // time out is set
// 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();// type of measurement is set
Serial.println("VL53L0X with MAX6675 test");
delay(500);
display.setBrightness(0x0f);// set brightness for display
}
void loop()
{
int distance =sensor.readRangeContinuousMillimeters();// read the distance in mm
display.setSegments(clearLED);// remove previous value from LED display
display.showNumberDec(distance, false, 4, 0);// display the distance
//distance = distance;
Serial.print("Distance: ");
Serial.print(distance);// print distance on serial monitor
Serial.print("mm");
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
delay(100);
}
Recursos e referências
Ainda não há recursos.
Arquivos📁
Folha de dados (pdf)
-
Folha de dados para o display de sete segmentos de 4 dígitos TM1637
/download/datasheet/robojax_TM1637_datasheet.pdf0.67 MB
Arquivo Fritzing
-
Módulo de sete segmentos TM1637
TM1637.fzpz0.01 MB -
Display de sete segmentos de 4 dígitos TM1637
TM1637-1.fzpz0.01 MB
Manual do Usuário
-
Manual do Display TM1637
robojax-TM1637_display_manual.pdf0.31 MB
Outros arquivos
-
Sensor de Distância VL53L0X roxo
VL53L0X_Distance_sensor_purple.fzpz0.01 MB