Search Code

Măsurarea distanței cu un modul laser VL53L0X cu 6 pini și LCD1602-I2C pentru Arduino

Măsurarea distanței cu un modul laser VL53L0X cu 6 pini și LCD1602-I2C pentru Arduino

În acest tutorial, vom învăța cum să măsurăm distanța folosind senzorul laser VL53L0X și să afișăm rezultatele pe un LCD1602 cu interfață I2C. Acest proiect vă permite să obțineți măsurători precise ale distanței în milimetri sau centimetri, fiind o adiție versatilă pentru orice proiect bazat pe Arduino. Până la sfârșitul acestui tutorial, veți avea un sistem complet funcțional de măsurare a distanței, ușor de configurat și de utilizat.

VL53L0X 200cm range sensor

Pentru a realiza acest lucru, vom folosi senzorul laser de distanță VL53L0X, care comunică cu Arduino prin I2C. Afișajul LCD1602 va oferi o reprezentare vizuală clară a distanței măsurate. Pentru claritate în procesul de codare, vă rugăm să consultați videoclipul (în videoclip la 00:00).

Hardware Explicat

Componentele principale în această construcție sunt senzorul laser de distanță VL53L0X și afișajul LCD1602. VL53L0X utilizează un laser pentru a măsura distanța cu precizie, fiind potrivit pentru diverse aplicații, inclusiv robotică și automatizare. Funcționează folosind comunicarea I2C, care permite integrarea ușoară cu Arduino.

Afișajul LCD1602 este un afișaj cu caractere activat prin I2C care poate afișa până la 16 caractere pe două linii. Acesta simplifică procesul de afișare a datelor, deoarece necesită mai puțini pini decât LCD-urile tradiționale. Împreună, aceste componente creează un sistem puternic și ușor de utilizat pentru măsurarea distanței.

Detalii din Fișa Tehnică

ProducătorSTMicroelectronics
Număr de piesăVL53L0X
Tensiune logică/IO1,8 V până la 2,8 V
Tensiune de alimentare2,6 V până la 3,5 V
Curent de ieșire (pe canal)
Curent de vârf (pe canal)
Ghid frecvență PWM
Praguri logice de intrare
Cădere de tensiune / RDS(on) / saturație
Limite termice
Pachet
Note / variante

  • Asigurați o tensiune de alimentare adecvată (2,6 V până la 3,5 V).
  • Folosiți rezistențe de pull-up pe liniile SDA și SCL dacă este necesar.
  • Păstrați senzorul departe de suprafețe reflectorizante pentru a evita citiri eronate.
  • Verificați adresa I2C (implicit este 0x29 pentru VL53L0X).
  • Luați în considerare disiparea căldurii dacă este utilizat în medii cu temperaturi ridicate.

Instrucțiuni de Cablare

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

Pentru a cabla senzorul VL53L0X și afișajul LCD1602, începeți prin conectarea alimentării și a masei. Conectați pinul VCC al VL53L0X la pinul 5V de pe Arduino și pinul GND la masa Arduino. Pentru LCD1602, conectați VCC-ul său la același 5V și GND-ul la masă, de asemenea.

Apoi, conectați liniile de comunicare I2C. Pinul SDA al VL53L0X ar trebui conectat la pinul A4 de pe Arduino, iar pinul SCL ar trebui să meargă la A5. Pinul XSHUT poate fi conectat la D12 pe Arduino, dar poate fi lăsat și neconectat. Pentru LCD1602, asigurați-vă că SDA și SCL sunt conectate la aceiași pini ca și senzorul VL53L0X.

Exemple de Cod și Explicații

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(); 
}

În funcția setup, inițializăm comunicarea serială și magistrala I2C. sensor.init() inițializează senzorul VL53L0X, în timp ce lcd.begin() inițializează afișajul LCD. Lumina de fundal a afișajului este pornită, permițând o vizibilitate ușoară.

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);
}

În interiorul buclei, citim continuu distanța folosind sensor.readRangeContinuousMillimeters() și o afișăm pe monitorul serial. LCD-ul este actualizat cu măsurarea distanței, oferind feedback în timp real. Întârzierea de 100 de milisecunde asigură că citirile nu sunt actualizate prea frecvent, permițând o citire ușoară.

Demonstrație / Ce să Așteptați

Când este pornit, sistemul va măsura continuu distanța și va afișa rezultatele pe LCD. Vă puteți aștepta să vedeți valorile distanței schimbându-se pe măsură ce mutați obiectele mai aproape sau mai departe de senzor. Dacă există probleme cu senzorul, cum ar fi erori de timeout, mesaje adecvate vor fi afișate pe monitorul serial (în videoclip la 03:15).

Imagini

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
Limba: 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);
}

Lucruri de care ai putea avea nevoie

Resurse și referințe

Fișiere📁

Fișier Fritzing

Alte fișiere