Uso de un medidor de distancia láser VL53L0X con Arduino
En este tutorial, exploraremos cómo usar el medidor de distancia láser VL53L0X con un Arduino. Este dispositivo le permite medir distancias con precisión utilizando un láser, lo que lo hace ideal para diversas aplicaciones, como la robótica y la automatización. Al final de este tutorial, tendrá una configuración funcional que puede medir distancias y mostrarlas en el monitor serie.

Para nuestro proyecto, utilizaremos la biblioteca de VL53L0X de Adafruit, que simplifica el proceso de interfaz con el sensor. Esta biblioteca proporciona las funciones necesarias para inicializar el sensor, leer mediciones y manejar cualquier error que pueda surgir. Puede consultar el video para obtener una guía visual sobre la configuración (en video a las 02:15).
Explicación del hardware
Los componentes principales de este proyecto incluyen el medidor de distancia láser VL53L0X y la placa Arduino. El VL53L0X es un sensor de tiempo de vuelo que utiliza un láser para medir distancias de hasta 2 metros con alta precisión. Funciona a través del protocolo I2C, lo que permite una fácil comunicación con el Arduino.
La placa Arduino sirve como microcontrolador que procesa los datos del VL53L0X. Envía comandos al sensor y recibe las mediciones de distancia, que luego se pueden mostrar o utilizar en otras aplicaciones. El cableado adecuado es crucial para garantizar lecturas precisas del sensor.
Detalles de la hoja de datos
| Fabricante | STMicroelectronics |
|---|---|
| Número de pieza | VL53L0X |
| Voltaje de funcionamiento | De 2,6 V a 3,5 V |
| Gama | De 30 mm a 2000 mm |
| Exactitud | ±3% típico |
| Interfaz | I2C |
| Rango de temperatura | De -40 °C a +85 °C |
| Consumo de corriente | <1 mA (en espera), 20 mA (activo) |
| Paquete | VFLGA-8 |
- Asegúrese de que el sensor esté alimentado correctamente (2,6 V a 3,5 V).
- Mantenga la configuración correcta de la dirección I2C para evitar conflictos.
- Mantenga el sensor limpio para obtener mediciones de distancia precisas.
- Utilice resistencias pull-up apropiadas en las líneas I2C si es necesario.
- Evite la luz solar directa sobre el sensor para obtener lecturas confiables.
Instrucciones de cableado

Para conectar el sensor VL53L0X al Arduino, conecte el pin VCC del sensor al pin de 5V del Arduino. El pin GND debe estar conectado a tierra (GND) del Arduino. Para la comunicación I2C, conecte el pin SDA del VL53L0X al pin A4 del Arduino y conecte el pin SCL al pin A5. Si está utilizando un modelo de Arduino diferente, consulte las asignaciones específicas de pines SDA y SCL para esa placa.
Por ejemplo, en el Arduino Mega, conectaría SDA al pin 20 y SCL al pin 21. Asegúrese de que todas las conexiones sean seguras para evitar problemas de comunicación. Si el sensor no responde, verifique dos veces el cableado y asegúrese de que el Arduino esté correctamente alimentado.
Ejemplos de código y tutorial
A continuación se muestra un fragmento de la función de configuración que inicializa el sensor de VL53L0X:
void setup() {
Serial.begin(9600);
while (! Serial) {
delay(1);
}
Serial.println("Robojax Test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
}Este código inicializa la comunicación en serie e intenta iniciar el sensor VL53L0X. Si el sensor no arranca, imprimirá un mensaje de error y detendrá el programa.
A continuación, aquí hay un fragmento de la función de bucle que lee la medición de distancia:
void loop() {
VL53L0X_RangingMeasurementData_t measure;
lox.rangingTest(&measure, false);
if (measure.RangeStatus != 4) {
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}Este bloque lee continuamente la medición de distancia del sensor y la imprime en el monitor serie. Si la medición está fuera de rango, lo indica en consecuencia.
Demostración / Qué esperar
Cuando ejecute el programa, debería ver las mediciones de distancia que se muestran en el monitor serie. Las lecturas deben actualizarse cada 100 milisegundos. Si el sensor apunta a un objeto, mostrará la distancia en milímetros. Si el objeto está fuera de rango, también lo indicará. Asegúrese de probar el sensor dentro de su rango especificado para obtener resultados óptimos (en video a las 10:00).
Marcas de tiempo de video
- 00:00-Introducción
- 02:15- Configuración del cableado
- 05:30- Explicación del código
- 10:00-Demostración
/*
* Este ejemplo muestra cómo usar el modo continuo para tomar medidas de distancia con el VL53L0X.
* // Fuente original de Adafruit https://github.com/adafruit/Adafruit_VL53L0X
* // Modificado por Ahmad Shamshiri para RoboJax.com
* // Fecha de modificación: 26 de sep, 2017
* // Nejrabi
*
* Obtén este código y otros códigos de Arduino en Robojax.com
* Aprende Arduino paso a paso en un curso estructurado con todo el material, diagramas de cableado y bibliotecas, todo en un solo lugar.
*
* Si encontraste útil este tutorial, por favor apóyame para que pueda seguir creando contenido como este.
*
* o haz una donación usando PayPal http://robojax.com/L/?id=64
*
* Este código es "EN LAS CONDICIONES EN QUE SE ENCUENTRE" sin garantía ni responsabilidad. Libre de ser utilizado siempre que mantengas esta nota intacta.*
* Este código ha sido descargado de Robojax.com
* Este programa es software libre: puedes redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU, tal como la publicó la Fundación de Software Libre, ya sea la versión 3 de la Licencia o (a tu opción) cualquier versión posterior.
*
* Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de COMERCIALIZACIÓN o ADECUACIÓN PARA UN PROPÓSITO PARTICULAR. Consulta la Licencia Pública General de GNU para más detalles.
*
* Deberías haber recibido una copia de la Licencia Pública General de GNU junto con este programa. Si no, consulta <https://www.gnu.org/licenses/>.
*
* Copyright (c) 2015, Majenko Technologies
* Todos los derechos reservados.
*
* La redistribución y el uso en formas de código fuente y binario, con o sin modificaciones, están permitidos siempre que se cumplan las siguientes condiciones:
*
* Las redistribuciones del código fuente deben conservar el aviso de copyright anterior, esta lista de condiciones y el siguiente descargo de responsabilidad.
*
* Las redistribuciones en forma binaria deben reproducir el aviso de copyright anterior, esta lista de condiciones y el siguiente descargo de responsabilidad en la documentación y/o otros materiales proporcionados con la distribución.
*
* Ni el nombre de Majenko Technologies ni los nombres de sus contribuyentes pueden ser utilizados para promover o respaldar productos derivados de este software sin permiso específico por escrito.
*
* ESTE SOFTWARE ES PROPORCIONADO POR LOS TITULARES DE COPYRIGHT Y LOS CONTRIBUIDORES "EN LAS CONDICIONES EN QUE SE ENCUENTRE" Y CUALQUIER GARANTÍA EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITÁNDOSE A, LAS GARANTÍAS IMPLÍCITAS DE COMERCIALIZACIÓN Y ADECUACIÓN PARA UN PROPÓSITO PARTICULAR ESTÁN RENUNCIADAS. EN NINGÚN CASO EL TITULAR DEL COPYRIGHT O LOS CONTRIBUIDORES SERÁN RESPONSABLES POR NINGÚN DAÑO DIRECTO, INDIRECTO, INCIDENTAL, ESPECIAL, EJEMPLAR O CONSECUENTE (INCLUYENDO, PERO NO LIMITÁNDOSE A, LA OBTENCIÓN DE BIENES O SERVICIOS SUSTITUTIVOS; PÉRDIDA DE USO, DATOS O BENEFICIOS; O INTERRUPCIÓN DEL NEGOCIO) CAUSADO DE CUALQUIER MANERA Y EN CUALQUIER TEORÍA DE RESPONSABILIDAD, YA SEA EN CONTRATO, RESPONSABILIDAD ESTRICTA O DELITO (INCLUYENDO NEGLIGENCIA U OTRO) SURGIENDO EN CUALQUIER MANERA DEL USO DE ESTE SOFTWARE, AUNQUE SE HAYA ADVERTIDO DE LA POSIBILIDAD DE DICHOS DAÑOS.
*/
#include "Adafruit_VL53L0X.h"
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
void setup() {
Serial.begin(9600);
// espera hasta que el puerto serie se abra para dispositivos USB nativos
while (! Serial) {
delay(1);
}
Serial.println("Robojax Test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
// poder
Serial.println(F("VL53L0X API Simple Ranging example\n\n"));
}
void loop() {
VL53L0X_RangingMeasurementData_t measure;
Serial.print("Reading a measurement... ");
lox.rangingTest(&measure, false); // ¡Pasa 'true' para obtener la impresión de datos de depuración!
if (measure.RangeStatus != 4) { // las fallas de fase tienen datos incorrectos
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}
Recursos y referencias
-
Externo
Archivos📁
No hay archivos disponibles.