شِفر (کود) جستجو

اندازه‌گیری فاصله با ماجیول لیزری VL53L0X با 6 پایه و LCD1602-I2C برای آردوینو

اندازه‌گیری فاصله با ماجیول لیزری VL53L0X با 6 پایه و LCD1602-I2C برای آردوینو

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

VL53L0X 200cm range sensor

برای دستیابی به این هدف، از حساس(حس کننده) فاصله‌سنج لیزری 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 است).
  • در صورت استفاده در محیط‌های با دمای بالا، به دفع حرارت توجه کنید.

دستورالعمل‌های سیم‌کشی

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

برای سیم‌کشی حساس(حس کننده) 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).

تصاویر

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
زبان: 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);
}

مواردی که ممکن است به آن‌ها نیاز داشته باشید

فایل‌ها📁

فایل فریزینگ

سایر فایل‌ها