Código de búsqueda

Medición de distancia con un módulo láser VL53L0X de 6 pines y una pantalla LCD1602-I2C para Arduino

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.

VL53L0X 200cm range sensor

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

FabricanteSTMicroelectronics
Número de piezaVL53L0X
Tensión de lógica/E/S1.8 V a 2.8 V
Tensión de alimentación2.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

Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)

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

Imágenes

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
113-Measure distance with a laser VL53L0X 6-pin module and an LCD1602-I2C for Arduino
Idioma: C++
/* 

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

Recursos y referencias

Archivos📁

Archivo de Fritzing

Otros archivos