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.

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ător | STMicroelectronics |
|---|---|
| Număr de piesă | VL53L0X |
| Tensiune logică/IO | 1,8 V până la 2,8 V |
| Tensiune de alimentare | 2,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

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).
/*
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
-
AmazonPurchase VL53L0X from Amazonamzn.to
-
eBayPurchase VL53l0x from eBayebay.us
-
AliExpressPurchase 1 to 10 pcs of VL53L0X from AliExpresss.click.aliexpress.com
-
BanggoodPurchase 1 to 10 pcs of VL53L0X from Banggoodbanggood.com
Resurse și referințe
-
ExternAdafruit download pagelearn.adafruit.com
-
ExternPurchase 1 to 10 pcs of VL53L0X from AliExpresss.click.aliexpress.com
-
ExternPurchase 1 to 10 pcs of VL53L0X from Banggoodbanggood.com
-
ExternPurchase VL53l0x from eBayebay.us
-
ExternVL53L0X datasheet (PDF)st.com
Fișiere📁
Fișier Fritzing
-
VL53L0X_Distance_sensor_Squares
VL53L0X_Distance_sensor_Squares.fzpz0.02 MB
Alte fișiere
-
Biblioteca Adafruit VL53L0X de la Robojax
robojax-VL52L0X_Adafruit_VL53L0X-master.zip0.08 MB -
VL53L0X_Distance_sensor_purple
VL53L0X_Distance_sensor_purple.fzpz0.01 MB