Medición de distancia con un módulo láser VL53L0X de 6 pines y una pantalla LCD1602-I2C para Arduino
En este tutorial aprenderemos a medir la distancia utilizando el sensor láser VL53L0X y a mostrar los resultados en una pantalla LCD1602 con interfaz I2C. Este proyecto te permite obtener mediciones de distancia precisas en milímetros o centímetros, lo que lo convierte en una adición versátil a cualquier proyecto basado en Arduino. Al final de este tutorial tendrás un sistema de medición de distancia totalmente funcional que es fácil de configurar y usar.

Para lograr esto, utilizaremos el sensor de distancia láser VL53L0X, que se comunica con el Arduino mediante I2C. La pantalla LCD1602 ofrecerá una representación visual clara de la distancia medida. Para mayor claridad sobre el proceso de codificación, consulte el video (en 00:00).
Hardware explicado
Los componentes principales de este montaje son el sensor de distancia láser VL53L0X y la pantalla LCD1602. El VL53L0X utiliza un láser para medir la distancia con precisión, lo que lo hace adecuado para diversas aplicaciones, incluidas la robótica y la automatización. Funciona mediante comunicación I2C, lo que permite una fácil integración con el Arduino.
El display LCD1602 es una pantalla de caracteres compatible con I2C que puede mostrar hasta 16 caracteres en dos líneas. Simplifica el proceso de mostrar datos, ya que requiere menos pines que los LCD tradicionales. Juntos, estos componentes crean un sistema de medición de distancia potente y fácil de usar.
Detalles de la ficha técnica
| Fabricante | STMicroelectronics |
|---|---|
| Número de pieza | VL53L0X |
| Tensión de lógica/E/S | 1.8 V a 2.8 V |
| Tensión de alimentación | 2.6 V a 3.5 V |
| Corriente de salida (por canal) | ... |
| Corriente de pico (por canal) | ... |
| Guía de frecuencia PWM | ... |
| Umbrales lógicos de entrada | ... |
| Caída de tensión / RDS(encendido)/ saturación | ... |
| Límites térmicos | ... |
| Paquete | ... |
| Notas / variantes | ... |
- Asegúrese de que la tensión de alimentación sea la adecuada (2.6 V a 3.5 V).
- Utilice resistencias pull-up en las líneas SDA y SCL si es necesario.
- Mantenga el sensor alejado de superficies reflectantes para evitar lecturas erróneas.
- Verifique la dirección I2C (por defecto es 0x29 para el VL53L0X).
- Tenga en cuenta la disipación de calor si se utiliza en entornos de alta temperatura.
Instrucciones de cableado

Para cablear el sensor VL53L0X y la pantalla LCD1602, comience conectando la alimentación y la masa. ConecteVCCpin del VL53L0X al5Vpin en el Arduino y elGNDpin a la masa del Arduino. Para la LCD1602, conecta suVCCa lo mismo5VyGNDa tierra también
A continuación, conecte las líneas de comunicación I2C. ElSDApin del VL53L0X debe conectarse alA4pin en el Arduino, y elSCLpin debería ir aA5. ElXSHUTel pin puede conectarse aD12en el Arduino, pero también puede dejarse sin conectar. Para la LCD1602, asegúreseSDAySCLtambién están conectados a los mismos pines que el sensor VL53L0X.
Ejemplos de código y guía paso a paso
VL53L0X sensor;
#include
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
sensor.startContinuous();
lcd.begin();
lcd.backlight();
}
En la función setup, inicializamos la comunicación serial y el bus I2C. Elsensor.init()inicializa el sensor VL53L0X, mientras quelcd.begin()inicializa la pantalla LCD. Se enciende la retroiluminación de la pantalla, lo que facilita la visibilidad.
void loop() {
int distance = sensor.readRangeContinuousMillimeters();
Serial.print("Distance: ");
lcd.clear();
lcd.print("Robojax VL53L0X");
lcd.setCursor(0,1);
lcd.print("Dist.: ");
lcd.setCursor(7,1);
lcd.print(distance);
Serial.println();
delay(100);
}
Dentro del bucle, leemos continuamente la distancia usandosensor.readRangeContinuousMillimeters()e imprimirla en el monitor serie. La pantalla LCD se actualiza con la medición de distancia, proporcionando retroalimentación en tiempo real. El retardo de 100 milisegundos asegura que las lecturas no se actualicen con demasiada frecuencia, facilitando su lectura.
Demostración / Qué esperar
Al encenderse, el sistema medirá continuamente la distancia y mostrará los resultados en la pantalla LCD. Puede esperar ver cómo los valores de distancia cambian a medida que acerca o aleja objetos del sensor. Si hay algún problema con el sensor, como errores de tiempo de espera, se imprimirán mensajes apropiados en el monitor serial (en el video a las 03:15).
/*
This is Arduino code to measure distance with VL53L0X and display it on LCD1602 with I2C module.
Distance is displayed in mm (millimeter) or cm (centimeter).
Original Laser Sensor source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: Jun 28, 2018 at 19:06 in Ajax, Ontario, Canada
Watch the video instruction for this code: https://youtu.be/t14ly7Y09oI
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)
LCD1602 Pin
*/
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int type = 1;// 1=mm , 2= cm
String unit;// variable for unit, mm or cm
void setup()
{
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
// 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();
// initialize the LCD,
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
}
void loop()
{
int distance =sensor.readRangeContinuousMillimeters();
//int distance =sensor.startContinuous(100);
//distance = distance;
Serial.print("Distance: ");
//start of loop Robojax code for LCD with I2C
lcd.clear();
lcd.print("Robojax VL53L0X");
lcd.setCursor (0,1); // go to start of 2nd line
lcd.print("Dist.: ");
lcd.setCursor (7,1); // go to start of 2nd line
if(type ==2){
float distanceCM = (float) (distance/10.0);
unit ="cm";
lcd.print(distanceCM);
Serial.print(distanceCM);
Serial.print(unit);
}else{
unit ="mm";
lcd.print(distance);
Serial.print(distance);
Serial.print(unit);
}
lcd.print(unit);
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
delay(100);
}
Cosas que podrías necesitar
-
AmazonasCompra VL53L0X en Amazonamzn.to
-
eBayCompra VL53l0x en eBayebay.us
-
AliExpressCompra de 1 a 10 piezas de VL53L0X en AliExpress.s.click.aliexpress.com
-
BanggoodCompra de 1 a 10 piezas de VL53L0X en Banggoodbanggood.com
Recursos y referencias
-
ExternoCompra de 1 a 10 piezas de VL53L0X en AliExpress.s.click.aliexpress.com
-
ExternoCompra de 1 a 10 piezas de VL53L0X en Banggoodbanggood.com
-
ExternoCompra VL53l0x en eBayebay.us
-
Externo
-
ExternoPágina de descarga de Adafruitlearn.adafruit.com
Archivos📁
Archivo de Fritzing
-
VL53L0X_Sensor_de_distancia_Cuadrados
VL53L0X_Distance_sensor_Squares.fzpz0.02 MB
Otros archivos
-
Biblioteca Adafruit VL53L0X de Robojax
robojax-VL52L0X_Adafruit_VL53L0X-master.zip -
Sensor de distancia VL53L0X púrpura
VL53L0X_Distance_sensor_purple.fzpz0.01 MB