Código de búsqueda

Medición de distancia con el módulo láser VL53L0X de 6 pines y la pantalla TM1637 para Arduino

Medición de distancia con el módulo láser VL53L0X de 6 pines y la pantalla TM1637 para Arduino


En este tutorial aprenderemos cómo medir la distancia usando el sensor de distancia láser VL53L0X y mostrar las lecturas en una pantalla de 7 segmentos TM1637. Este proyecto combina ambos componentes para crear una herramienta de medición de distancia sencilla pero eficaz. El VL53L0X utiliza tecnología láser para proporcionar lecturas de distancia precisas, mientras que la pantalla TM1637 muestra estas lecturas en un formato fácil de usar.

VL53L0X 200cm range sensor
TM1637 4 digit display module

Repasaremos el hardware requerido, las instrucciones de cableado y el código necesarios para poner todo en funcionamiento. Al final de este tutorial tendrás un dispositivo funcional de medición de distancia que podrá utilizarse en diversas aplicaciones. Para una guía visual, asegúrate de ver el video a las 00:00.

Hardware explicado

Los componentes principales de este proyecto son el sensor de distancia láser VL53L0X y el módulo de pantalla TM1637. El VL53L0X es un sensor de tiempo de vuelo que mide la distancia a un objeto emitiendo un haz láser y calculando el tiempo que tarda en volver la reflexión. Funciona en un rango de voltaje de 2.6V a 3.5V, pero también puede funcionar con 5V gracias a un regulador de voltaje integrado.

El TM1637 es un controlador para pantallas LED de 7 segmentos. Se comunica mediante una sencilla interfaz de 2 hilos (CLK y DIO), lo que facilita su conexión a un Arduino. La pantalla puede mostrar valores numéricos y es perfecta para visualizar las mediciones de distancia del sensor VL53L0X.

Detalles de la hoja de datos

FabricanteSTMicroelectronics
Número de piezaVL53L0X
Voltaje de lógica/E/S2.6 V - 3.5 V
Tensión de alimentación2.6 V - 5 V
Temperatura de funcionamiento-20 °C a 70 °C
Rango de mediciónde 30 mm a 2000 mm
Frecuencia I2C400 kHz
Configuración del tiempo de espera500 ms
Paquetemódulo de 6 pines

  • Asegúrese de una fuente de alimentación adecuada (5 V es aceptable).
  • Conecte el pin XSHUT con una resistencia pull-up para evitar fugas.
  • Utilice I2C para la comunicación; conecte SDA y SCL adecuadamente.
  • Gestiona los tiempos de espera en el código para evitar comportamientos inesperados.
  • Tenga en cuenta el rango de temperatura de funcionamiento para mantener la precisión.

Instrucciones de cableado

Arduino wiring for VL53L0X with TM1637 4 digit dispaly
Arduino wiring for VL53L0X with TM1637 4 digit dispaly

Para cablear el VL53L0X y la pantalla TM1637, comience conectando el pin VCC del VL53L0X al pin 5V del Arduino y el pin GND a un pin de tierra del Arduino. A continuación, conecte el pin SDA del VL53L0X al pin A4 del Arduino, que normalmente se usa para la comunicación de datos I2C. El pin SCL debe conectarse al pin A5 del Arduino, utilizado para la señal de reloj.

Para la pantalla TM1637, conecte el pin CLK al pin digital 2 del Arduino y el pin DIO al pin digital 3. Finalmente, conecte el pin XSHUT del VL53L0X al pin digital 12 del Arduino. Asegúrese de que cualquier pin sin usar, como GPIO1 en el VL53L0X, quede sin conectar. Esta configuración permitirá que el Arduino se comunique de forma efectiva con el sensor y la pantalla.

Ejemplos de código y guía paso a paso

El código inicializa el sensor y la pantalla, configura la comunicación I2C y lee continuamente las mediciones de distancia. A continuación se muestra un fragmento que muestra la función setup donde se configuran los pines y se inicializa el sensor:

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
}

En esta función de configuración, el pin de XSHUT se configura como una entrada con una resistencia pull-up y el sensor se inicializa para mediciones continuas de distancia. El monitor serial también se configura para mostrar las lecturas de distancia.

A continuación, el bucle principal lee la distancia y actualiza la pantalla. Aquí tienes un extracto centrado de la función 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 bucle lee continuamente la distancia del sensor y actualiza la pantalla TM1637 con la medición más reciente. También imprime la distancia en el monitor serie con fines de depuración. Si quieres ver el código completo, se cargará más abajo en el artículo.

Demostración / Qué esperar

Al completar la configuración y subir el código, debería ver la distancia medida por el VL53L0X mostrada en el TM1637. Al acercar o alejar un objeto del sensor, el valor mostrado cambiará en consecuencia. Si experimenta lecturas inesperadas, asegúrese de que el sensor no esté obstruido y de que la superficie del objeto sea adecuada para la reflexión del láser (en el video a las 09:30).

Los errores comunes incluyen el cableado invertido o no inicializar correctamente el sensor, lo que puede provocar errores de tiempo de espera. Asegúrese de que los pines correctos estén conectados y de que el sensor esté alimentado adecuadamente para obtener mediciones de distancia precisas.

Imágenes

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
TM1637 4 digit display module
TM1637 4 digit display module
Arduino wiring for VL53L0X with TM1637 4 digit dispaly
Arduino wiring for VL53L0X with TM1637 4 digit dispaly
104-Measure distance with a Laser VL53L0X 6-pin module and a TM1637 LED display for Arduino
Idioma: C++
/* 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 y referencias

Aún no hay recursos.

Archivos📁

Hoja de datos (pdf)

Archivo de Fritzing

Manual del Usuario

Otros archivos