اندازهگیری فاصله با ماجیول لیزری VL53L0X با 6 پایه و LCD1602-I2C برای آردوینو
در این آموزش، خواهیم آموخت چگونه با استفاده از حساس(حس کننده) لیزری VL53L0X فاصله را اندازهگیری کنیم و نتایج را روی LCD1602 با رابط I2C نمایش دهیم. این پروژه به شما امکان میدهد اندازهگیریهای دقیقی از فاصله را به صورت میلیمتر یا سانتیمتر بهدست آورید و آن را به افزونهای چندکاره برای هر پروژه مبتنی بر Arduino تبدیل میکند. تا پایان این آموزش، یک سیستم اندازهگیری فاصلهٔ کاملاً عملیاتی خواهید داشت که راهاندازی و استفاده از آن آسان است.

برای دستیابی به این هدف، از حساس(حس کننده) فاصلهسنج لیزری VL53L0X استفاده خواهیم کرد که از طریق I2C با آردوینو ارتباط برقرار میکند. نمایشگر LCD1602 نمایش بصری واضحی از فاصلهٔ اندازهگیریشده ارائه میدهد. برای روشن شدن روند کدنویسی، لطفاً به ویدئو (در 00:00) مراجعه کنید.
سختافزار به زبان ساده
اجزای اصلی در این پروژه عبارتاند از حساس(حس کننده) فاصلهسنج لیزری VL53L0X و نمایشگر LCD1602. VL53L0X از لیزر برای اندازهگیری دقیق فاصله استفاده میکند، که آن را برای کاربردهای مختلف از جمله رباتیک و اتوماسیون مناسب میسازد. این ماجیول از طریق ارتباط I2C کار میکند که امکان ادغام آسان با آردوینو را فراهم میکند.
نمایشگر LCD1602 یک نمایشگر کاراکتری مجهز به I2C است که میتواند حداکثر 16 خصیصه را روی دو خط نمایش دهد. این نمایشگر فرایند نمایش دادهها را ساده میکند، زیرا به پایههای کمتری نسبت به نمایشگرهای LCD سنتی نیاز دارد. با هم، این اجزا یک سیستم اندازهگیری فاصله قدرتمند و کاربرپسند ایجاد میکنند.
جزئیات مشخصات فنی
| تولیدکننده | استی میکروالکترونیکس |
|---|---|
| شماره قطعه | VL53L0X |
| ولتاژ منطق/ورودی-خروجی | 1.8 ولت تا 2.8 ولت |
| ولتاژ تغذیه | 2.6 V تا 3.5 V |
| جریان خروجی (به ازای هر کانال) | ... |
| جریان پیک (برای هر کانال) | ... |
| راهنمای فرکانس PWM | ... |
| آستانههای منطقی ورودی | ... |
| افت ولتاژ / Rدرین–سورس (در حالت روشن)/ اشباع | ... |
| محدودیتهای حرارتی | … |
| بسته | ... |
| یادداشتها / گونهها | ... |
- از مناسب بودن ولتاژ منبع تغذیه اطمینان حاصل کنید (2.6 V تا 3.5 V).
- در صورت نیاز، از مقاومتهای پولآپ روی خطوط SDA و SCL استفاده کنید.
- حساس(حس کننده) را از سطوح بازتابنده دور نگه دارید تا از خوانشهای نادرست جلوگیری شود.
- آدرس I2C را بررسی کنید (پیشفرض برای VL53L0X برابر 0x29 است).
- در صورت استفاده در محیطهای با دمای بالا، به دفع حرارت توجه کنید.
دستورالعملهای سیمکشی

برای سیمکشی حساس(حس کننده) VL53L0X و نمایشگر LCD1602، با اتصال تغذیه و زمین شروع کنید. وصل کنیدVCCپایهِ VL53L0X به5Vپایه روی آردوینو وGNDپایه را به زمین آردوینو وصل کنید. برای LCD1602، آن را وصل کنیدVCCبه همان5VوGNDبه زمین نیز.
در مرحله بعد، خطوط ارتباطی I2C را متصل کنید. اینSDAپایهِ VL53L0X باید بهA4پایه روی آردوینو، وSCLپایه باید برود بهA5. آنXSHUTپایه را میتوان به ... متصل کردD12روی آردوینو قرار دارد، اما میتوان آن را بدون اتصال نیز رها کرد. برای LCD1602، اطمینان حاصل کنیدSDAوSCLآنها نیز به همان پایههایی متصل هستند که حساس(حس کننده) VL53L0X به آنها متصل است.
نمونههای شِفر (کود) و راهنمای گامبهگام
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();
}
در تابع setup، ما ارتباط سریال و باس I2C را مقداردهی اولیه میکنیم. اینsensor.init()حساس(حس کننده) VL53L0X را مقداردهی اولیه میکند، در حالی کهlcd.begin()نمایشگر LCD را مقداردهی اولیه میکند. نور پسزمینهٔ نمایشگر روشن میشود تا مشاهدهٔ آن بهراحتی ممکن باشد.
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);
}
در داخل حلقه، بهطور مداوم فاصله را با استفاده ازsensor.readRangeContinuousMillimeters()و آن را در نمایشگر مسلسل چاپ میکند. السیدی با اندازهگیری فاصله بهروزرسانی میشود و بازخورد در زمان واقعی را فراهم میکند. تأخیر 100 میلیثانیه تضمین میکند که خوانشها خیلی مکرر بهروزرسانی نشوند و خواندن آسان شود.
نمایش / آنچه باید انتظار داشته باشید
پس از روشن شدن، سیستم بهصورت پیوسته فاصله را اندازهگیری کرده و نتایج را روی LCD نمایش میدهد. میتوانید انتظار داشته باشید که مقادیر فاصله وقتی اجسام را به حساس(حس کننده) نزدیکتر یا دورتر میکنید تغییر کنند. اگر مشکلی در حساس(حس کننده) وجود داشته باشد، مانند خطاهای timeout، پیامهای مربوطه در نمایشگر مسلسل چاپ خواهند شد (در ویدئو در 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);
}
مواردی که ممکن است به آنها نیاز داشته باشید
-
آمازونخرید VL53L0X از اَمه زونamzn.to
-
ایبیخرید VL53l0x از eBayebay.us
-
علیاکسپرساز علیاکسپرس ۱ تا ۱۰ عدد VL53L0X خریداری کنید.s.click.aliexpress.com
-
بنگ گود1 تا 10 عدد از VL53L0X را از Banggood خریداری کنیدbanggood.com
منابع و مراجع
-
خارجی1 تا 10 عدد از VL53L0X را از Banggood خریداری کنیدbanggood.com
-
خارجیاز علیاکسپرس ۱ تا ۱۰ عدد VL53L0X خریداری کنید.s.click.aliexpress.com
-
خارجیخرید VL53l0x از eBayebay.us
-
خارجیصفحه دانلود آدافروتlearn.adafruit.com
-
خارجیورقۀ مشخصات VL53L0X (PDF)st.com
فایلها📁
فایل فریزینگ
-
حساس(حس کننده) فاصله VL53L0X مربعات
VL53L0X_Distance_sensor_Squares.fzpz0.02 MB
سایر فایلها
-
کتابخانه VL53L0X آدافروت از روبوجکس
robojax-VL52L0X_Adafruit_VL53L0X-master.zip -
حساس(حس کننده)_فاصله_VL53L0X_بنفش
VL53L0X_Distance_sensor_purple.fzpz0.01 MB