کوڈ تلاش کریں

سبق 78: VL53L0X سے فاصلہ LCD پر دکھائیں | Arduino Step By Step کورس

سبق 78: VL53L0X سے فاصلہ LCD پر دکھائیں | Arduino Step By Step کورس

یہ گائیڈ VL53L0X ٹائم-آف-فلائٹ سینسر اور I2C ماجیول کے ساتھ 16x2 LCD ڈسپلے کا استعمال کرتے ہوئے ایک درست لیزر فاصلہ میٹر بنانے کا طریقہ دکھاتی ہے۔ یہ پروجیکٹ ان makers کے لیے بہترین ہے جو اپنی تخلیقات میں درست، غیر رابطہ فاصلہ پیمائش شامل کرنا چاہتے ہیں۔ VL53L0X فاصلہ ناپنے کے لیے لیزر استعمال کرتا ہے، جو ان ایپلیکیشنز کے لیے مثالی ہے جہاں الٹراسونک سینسرز کو مشکلات کا سامنا ہو سکتا ہے، جیسے ٹینک کی بھرائی کی سطح ناپنا یا کنویئر بیلٹ پر کسی چیز کی درست پوزیشن کا پتہ لگانا۔

یہاں اس پروجیکٹ کو استعمال کرنے کے چند عملی طریقے ہیں:

  • خودکار پالتو جانوروں کا فیڈر: کنٹینر میں خوراک کی سطح ناپیں تاکہ دوبارہ بھرنے کا عمل شروع ہو یا اطلاع بھیجی جا سکے۔
  • سمارٹ کوڑے دان: پتہ لگائیں کہ ڈبہ کتنا بھرا ہے اور جب اسے خالی کرنے کی ضرورت ہو تو آپ کو خبردار کریں۔
  • DIY اونچائی گیج: چھوٹی اشیاء کے لیے درست پیمائشی آلہ بنائیں یا بچے کی نشوونما کا ریکارڈ رکھیں۔
  • پارکنگ اسسٹنٹ: گیراج یا تنگ جگہ میں درست پارکنگ میں مدد کے لیے سینسر سسٹم بنائیں۔
  • روبوٹکس: روبوٹ میں رکاوٹوں کا پتہ لگانے یا نیویگیشن کے لیے دیوار تک فاصلہ ناپنے میں استعمال کریں۔
VL53L0x_pin_round_module

مطلوبہ ہارڈویئر

  • Arduino بورڈ (مثلاً Uno)
  • VL53L0X لیزر فاصلہ سینسر
  • I2C ماجیول کے ساتھ LCD 1602 ڈسپلے
  • جمپر تار

وائرنگ گائیڈ

اس پروجیکٹ کی وائرنگ سیدھی ہے، I2C پروٹوکول کی بدولت، جو LCD اور سینسر دونوں کو ایک ہی دو تاروں پر بات چیت کرنے کی اجازت دیتا ہے۔ VL53L0X سینسر کو 5V بجلی کی فراہمی درکار ہے، جو براہ راست Arduino کے 5V پن سے لی جاتی ہے۔ سینسر کو مستحکم بجلی کا ذریعہ یقینی بنانے کے لیے، ایک اضافی پن کو ثانوی VCC کے طور پر استعمال کیا جاتا ہے۔ (ویڈیو میں 00:27 پر)

VL53L0X_LCD1602_wiring-3
VL53L0X_LCD1602_wiring-2
VL53L0X_LCD1602_wiring-1
VL53L0X_LCD1602_wiring-4

یہاں کنکشن ڈایاگرام ہے:

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

کنکشن درج ذیل ہیں:

  • VL53L0X VCC -> Arduino 5V اور پن 13 (پن 13 کو اضافی بجلی استحکام فراہم کرنے کے لیے ڈیجیٹل آؤٹ پٹ کے طور پر سیٹ کیا گیا ہے)۔
  • VL53L0X GND -> Arduino GND۔
  • VL53L0X SCL -> Arduino SCL (A5)۔
  • VL53L0X SDA -> Arduino SDA (A4)۔
  • LCD I2C VCC -> Arduino 5V۔
  • LCD I2C GND -> Arduino GND۔
  • LCD I2C SCL -> Arduino SCL (A5)۔
  • LCD I2C SDA -> Arduino SDA (A4)۔

اگر آپ Arduino کا کوئی مختلف ماڈل استعمال کر رہے ہیں، تو I2C پن کہیں اور ہو سکتے ہیں۔ SDA اور SCL پن اکثر بورڈ پر براہ راست لیبل ہوتے ہیں۔ (ویڈیو میں 02:42 پر)

کوڈ کی وضاحت

کوڈ کو ترتیب دینے میں آسان بنانے کے لیے ڈیزائن کیا گیا ہے۔ مرکزی صارف کے قابل ترتیب حصے اسکیچ کے بالکل اوپر ہیں۔ (ویڈیو میں 04:18 پر)

سب سے پہلے، ہم اضافی بجلی پن کے لیے ایک مستقل تعریف کرتے ہیں۔ یہ سینسر کو صاف 5V فراہمی فراہم کرنے کے لیے استعمال ہوتا ہے۔

const int vcc2 = 13; // VL53L0X سینسر کے لیے اضافی VCC پن

اگلا، ہم LCD لائبریری کا ایک انسٹینس بناتے ہیں اور اس کا I2C ایڈریس متعین کرتے ہیں۔ آپ یہ ایڈریس I2C اسکینر اسکیچ چلا کر تلاش کر سکتے ہیں، جیسا کہ ویڈیو میں دکھایا گیا ہے۔ (ویڈیو میں 03:26 پر)

LiquidCrystal_I2C lcd(0x3F, 16, 2); // LCD ایڈریس 0x3F سیٹ کریں 16 حروف اور 2 لائن ڈسپلے کے لیے

آخر میں، ایک متغیر ہے جو پیمائش کی اکائی کو کنٹرول کرتا ہے۔ آپ اس قدر کو تبدیل کر کے فاصلہ ملی میٹر یا سینٹی میٹر میں دکھا سکتے ہیں۔

const int type = 1; // ملی میٹر کے لیے 1، سینٹی میٹر کے لیے 2 سیٹ کریں

setup() فنکشن میں، اضافی VCC پن کو آؤٹ پٹ کے طور پر ترتیب دیا جاتا ہے اور سینسر کو بجلی فراہم کرنے کے لیے HIGH پر سیٹ کیا جاتا ہے۔ پھر LCD کو ابتدائی کیا جاتا ہے۔

loop() فنکشن میں مرکزی منطق سینسر سے فاصلہ پڑھتی ہے، LCD صاف کرتی ہے، اور قدر کو اکائی کے ساتھ پرنٹ کرتی ہے۔ جب type کو 2 پر سیٹ کیا جاتا ہے، تو فاصلہ ملی میٹر سے سینٹی میٹر میں فلوٹ قدر میں تبدیل ہوتا ہے تاکہ زیادہ درست پڑھائی ہو۔ (ویڈیو میں 06:47 پر)

لائیو پروجیکٹ ڈیموسٹریشن

ڈیموسٹریشن میں، سینسر کی درستگی کی تصدیق کے لیے اسے ایک پیمانے کے ساتھ آزمایا جاتا ہے۔ ویڈیو دکھاتی ہے کہ سینسر بہت درست ریڈنگ فراہم کرتا ہے، صرف چند ملی میٹر کے انحراف کے ساتھ۔ (ویڈیو میں 08:32 پر)

یہ نوٹ کرنا ضروری ہے کہ مسلسل پیمائش موڈ میں سینسر کی زیادہ سے زیادہ رینج تقریباً 1.2 میٹر ہے۔ جب ہدف رینج سے باہر ہوتا ہے، تو ڈسپلے 8190 کی قدر دکھائے گا۔ (ویڈیو میں 09:53 پر)

ایک اور اہم مشاہدہ یہ ہے کہ سینسر انتہائی چمکدار سطحوں پر غلط ریڈنگ دے سکتا ہے۔ اسے کسی چمکدار چیز کی طرف اشارہ کرنے سے نمایاں خرابیاں آ سکتی ہیں، جبکہ اسے دھندلی سطح کی طرف اشارہ کرنے سے درست نتائج ملتے ہیں۔ (ویڈیو میں 10:42 پر)

یہ کوڈ VL53L0X ماجیول کے مختلف ورژنز اور بڑی LCDs، جیسے 2004 ماڈل، کے ساتھ بھی مطابقت رکھتا ہے، بغیر وائرنگ میں کسی تبدیلی کے۔ (ویڈیو میں 11:30 پر)

ویڈیو ابواب

  • [00:05] VL53L0X اور LCD پروجیکٹ کا تعارف
  • [00:27] VL53L0X اور LCD کے لیے وائرنگ ڈایاگرام
  • [02:51] اصل Arduino بورڈ پر تفصیلی وائرنگ
  • [03:26] I2C ایڈریسز کی اسکیننگ
  • [04:18] کوڈ کی وضاحت اور کنفیگریشن
  • [08:32] فاصلہ پیمائش کا لائیو مظاہرہ
  • [09:53] سینسر کی رینج اور حدود کی جانچ
  • [10:42] مختلف سطحوں پر درستگی
  • [11:30] مختلف سینسر ماجیول اور بڑی LCD کے ساتھ جانچ

تصاویر

VL53L0X 200cm range sensor-black
VL53L0X 200cm range sensor-black
VL53L0X 200cm range sensor-blue
VL53L0X 200cm range sensor-blue
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
VL53L0x_pin_module
VL53L0x_pin_module
VL53L0x_pin_round_module
VL53L0x_pin_round_module
VL53L0X LCD1602 wiring 4
VL53L0X LCD1602 wiring 4
VL53L0X LCD1602 wiring 1
VL53L0X LCD1602 wiring 1
VL53L0X LCD1602 wiring 2
VL53L0X LCD1602 wiring 2
VL53L0X LCD1602 wiring 3
VL53L0X LCD1602 wiring 3
641-Lesson 78: Using a VL53L0X Laser Distance Sensor with an LCD1602 or LCD2004 Display and Arduino
زبان: C++
/*
* Lesson 76-1: Using One single VL6180 Laser Distance Sensor with Arduino 
 * Adafruit code modified for this tutorial
 * by Ahmad Shamshiri at 22:22 on 
 * March 10-11, 2021 in Ajax, ON, Canada
 Please watch video instruction of this code: https://youtu.be/_H9D0czQpSI
 
View code for using two or more VL6180X sensors: https://robojax.com/course1/lecture76

  This video is part of Arduino Step by Step Course which starts here: https://youtu.be/-6qSrDUA5a8

 

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64
  
 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact. * 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>. 
 */
#include <Wire.h>
#include "Adafruit_VL6180X.h"

Adafruit_VL6180X vl = Adafruit_VL6180X();

void setup() {
  Serial.begin(115200);

  // wait for serial port to open on native usb devices
  while (!Serial) {
    delay(1);
  }
  
  Serial.println("Adafruit VL6180x test!");
  if (! vl.begin()) {
    Serial.println("Failed to find sensor");
    while (1);
  }
  Serial.println("Sensor found!");
}

void loop() {

  uint8_t range = vl.readRange();
  uint8_t status = vl.readRangeStatus();

  if (status == VL6180X_ERROR_NONE) {
    Serial.print("Range: "); Serial.print(range);
    Serial.println("mm");
  }
//  if(range <=76)
//  {
//    //do something
//  }

  // Some error occurred, print it out!
  
  if  ((status >= VL6180X_ERROR_SYSERR_1) && (status <= VL6180X_ERROR_SYSERR_5)) {
    Serial.println("System error");
  }
  else if (status == VL6180X_ERROR_ECEFAIL) {
    Serial.println("ECE failure");
  }
  else if (status == VL6180X_ERROR_NOCONVERGE) {
    Serial.println("No convergence");
  }
  else if (status == VL6180X_ERROR_RANGEIGNORE) {
    Serial.println("Ignoring range");
  }
  else if (status == VL6180X_ERROR_SNR) {
    Serial.println("Signal/Noise error");
  }
  else if (status == VL6180X_ERROR_RAWUFLOW) {
    Serial.println("Raw reading underflow");
  }
  else if (status == VL6180X_ERROR_RAWOFLOW) {
    Serial.println("Raw reading overflow");
  }
  else if (status == VL6180X_ERROR_RANGEUFLOW) {
    Serial.println("Range reading underflow");
  }
  else if (status == VL6180X_ERROR_RANGEOFLOW) {
    Serial.println("Range reading overflow");
  }
  delay(50);
}

آپ کو جن چیزوں کی ضرورت ہو سکتی ہے

وسائل اور حوالہ جات

فائلیں📁

فریٹزنگ فائل

  • Adafruit VL6180X Time of Flight Distance Sensor
    Fritzing part for the Adafruit VL6180X Time of Flight distance sensor. This sensor measures absolute distance up to 100mm and ambient light, communicating via I2C. Includes the sensor breakout board and pin connections for use in Fritzing projects.
    Adafruit VL6180X Time of Flight Distance Sensor-1.fzpz 0.02 MB