آرڈوینو کا استعمال کرتے ہوئے لیزر ٹائم-آف-فلائٹ VL53L0X سینسر سے فاصلہ ناپنا
اس ٹیوٹوریل میں، ہم Arduino کے ساتھ VL53L0X لیزر ٹائم آف فلائٹ سینسر کا استعمال کرتے ہوئے فاصلے کی پیمائش کرنے کا طریقہ دریافت کریں گے۔ یہ سینسر درست فاصلے کی پیمائش کی اجازت دیتا ہے اور اسے مختلف پروجیکٹس، جیسے روبوٹکس یا آٹومیشن سسٹمز میں ضم کیا جا سکتا ہے۔ اس ٹیوٹوریل کے اختتام تک، آپ سینسر کو ترتیب دینے، اسے صحیح طریقے سے وائر کرنے، اور فاصلے کی ریڈنگ حاصل کرنے کے لیے ضروری کوڈ لکھنے کے قابل ہو جائیں گے۔
ہم مطلوبہ ہارڈویئر اجزاء، وائرنگ کی ہدایات، اور VL53L0X سینسر کو چلانے والے کوڈ کی تفصیلی وضاحت کا احاطہ کریں گے۔ اس عمل کی زیادہ بصری نمائندگی کے لیے، متعلقہ ویڈیو (ویڈیو میں 00:15 پر) ضرور دیکھیں۔
ہارڈویئر کی وضاحت
اس پروجیکٹ کا بنیادی جزو VL53L0X سینسر ہے۔ یہ ایک ٹائم آف فلائٹ فاصلہ سینسر ہے جو لیزر بیم خارج کرکے اور منعکس روشنی کو سینسر تک واپس آنے میں لگنے والے وقت کی پیمائش کرکے کام کرتا ہے۔ یہ ملی میٹر میں فاصلے کی پیمائش فراہم کرتا ہے اور مختلف فاصلوں کی حد پر کام کرنے کی صلاحیت رکھتا ہے، جو اسے مختلف ایپلیکیشنز کے لیے موزوں بناتا ہے۔
VL53L0X کے علاوہ، آپ کو سینسر ڈیٹا پر کارروائی کرنے کے لیے ایک Arduino بورڈ کی ضرورت ہوگی۔ Arduino I2C پروٹوکول کے ذریعے سینسر کے ساتھ بات چیت کرے گا، جو آسان انضمام اور کنٹرول کی اجازت دیتا ہے۔ آپ کو سینسر اور Arduino کے درمیان کنکشن قائم کرنے کے لیے جمپر تاروں کی بھی ضرورت ہوگی۔
ڈیٹاشیٹ کی تفصیلات
| مینوفیکچرر | STMicroelectronics |
|---|---|
| پارٹ نمبر | VL53L0X |
| لاجک/آئی او وولٹیج | 1.8 V سے 3.6 V |
| سپلائی وولٹیج | 2.6 V سے 3.6 V |
| آؤٹ پٹ کرنٹ (فی چینل) | … |
| پیک کرنٹ (فی چینل) | … |
| PWM فریکوئنسی رہنمائی | … |
| ان پٹ لاجک تھریشولڈز | … |
| وولٹیج ڈراپ / RDS(on) / سیچوریشن | … |
| تھرمل حدود | -40 °C سے 85 °C |
| پیکیج | QFN-16 |
| نوٹس / ویریئنٹس | ٹائم آف فلائٹ سینسر، I2C انٹرفیس |
- سینسر کو نقصان پہنچانے سے بچنے کے لیے مناسب وولٹیج کی سطح کو یقینی بنائیں۔
- ضرورت پڑنے پر I2C لائنوں پر پل اپ ریزسٹر استعمال کریں۔
- درست ریڈنگ کے لیے سینسر کو صاف اور بلا روک رکھیں۔
- درستگی بہتر بنانے کے لیے مخصوص ماحول کے لیے سینسر کیلیبریٹ کریں۔
- پیمائش کے مسائل سے نمٹنے کے لیے کوڈ میں ٹائم آؤٹ ایررز چیک کریں۔
وائرنگ کی ہدایات
VL53L0X سینسر کو Arduino سے وائر کرنے کے لیے، سینسر پر موجود VCC پن کو Arduino کے 5V پن سے جوڑ کر شروع کریں۔ یہ محفوظ ہے کیونکہ سینسر میں ایک اندرونی ریگولیٹر ہے جو اسے 5V سپلائی کے ساتھ کام کرنے کی اجازت دیتا ہے جبکہ یہ 3.3V سطحوں پر بھی کام کرتا ہے۔ اگلا، سینسر پر موجود GND پن کو Arduino کے گراؤنڈ پن سے جوڑیں۔
اب، سینسر پر موجود SDA پن کو Arduino کے A4 پن سے جوڑیں، جو ڈیفالٹ I2C ڈیٹا لائن ہے۔ پھر، سینسر پر موجود SCL پن کو Arduino کے A5 پن سے جوڑیں، جو ڈیفالٹ I2C کلاک لائن ہے۔ دوسرے Arduino ماڈلز کے لیے، SDA اور SCL پن مختلف ہو سکتے ہیں؛ مثال کے طور پر، Arduino Mega پر، بالترتیب پن 20 اور 21 استعمال کریں۔ سسٹم کو آن کرنے سے پہلے تمام کنکشن محفوظ ہیں اس بات کو یقینی بنائیں۔
کوڈ مثالیں اور واک تھرو
Arduino کوڈ میں، ہم ضروری لائبریریاں شامل کرکے اور VL53L0X سینسر کو انیشیالائز کرکے شروع کرتے ہیں۔ setup() فنکشن میں، ہم سیریل کمیونیکیشن سیٹ اپ کرتے ہیں اور سینسر کو انیشیالائز کرتے ہیں:
void setup() {
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
sensor.startContinuous();
}
یہ سنیپٹ سینسر کو انیشیالائز کرتا ہے اور مسلسل پیمائش موڈ شروع کرتا ہے۔ setTimeout(500) فنکشن اس بات کو یقینی بناتا ہے کہ اگر سینسر فاصلہ پڑھنے میں ناکام ہو جائے تو یہ غیر معینہ مدت تک نہ لٹکے۔
loop() فنکشن میں، ہم فاصلہ پڑھتے ہیں اور اسے سیریل مانیٹر پر پرنٹ کرتے ہیں:
void loop() {
int distance = sensor.readRangeContinuousMillimeters();
distance = distance - 55; // خرابی کی تلافی کریں
Serial.print("فاصلہ: ");
Serial.print(distance);
Serial.print("ملی میٹر");
if (sensor.timeoutOccurred()) { Serial.print(" ٹائم آؤٹ"); }
Serial.println();
}
کوڈ کا یہ حصہ فاصلے کی پیمائش حاصل کرتا ہے اور ایک مستقل قدر گھٹا کر کسی بھی منظم خرابی کی تلافی کرتا ہے۔ یہ ٹائم آؤٹ کی بھی جانچ کرتا ہے اگر سینسر ریڈنگ حاصل کرنے میں ناکام ہو جائے۔
ڈیمونسٹریشن / کیا توقع کریں
جب آپ پروگرام چلاتے ہیں، تو آپ کو سیریل مانیٹر میں VL53L0X سینسر کے ذریعے ماپے گئے فاصلے کی مسلسل اپڈیٹس نظر آئیں گی۔ ریڈنگز ملی میٹر میں ظاہر ہوں گی۔ اگر آپ کسی چیز کو سینسر کے قریب یا دور لے جاتے ہیں، تو فاصلے کی قدریں اس کے مطابق تبدیل ہوں گی۔ اگر ٹائم آؤٹ ہوتا ہے، تو آپ کو "ٹائم آؤٹ" پیغام نظر آئے گا جو اس بات کی نشاندہی کرتا ہے کہ سینسر فاصلہ پڑھنے میں ناکام رہا (ویڈیو میں 05:30 پر)۔
ویڈیو ٹائم اسٹیمپس
- 00:00 - تعارف
- 00:15 - اجزاء کا جائزہ
- 01:00 - وائرنگ کی ہدایات
- 02:30 - کوڈ واک تھرو
- 05:30 - ڈیمونسٹریشن
/* This example shows how to use continuous mode to take
range measurements with the VL53L0X. It is based on
vl53l0x_ContinuousRanging_Example.c from the VL53L0X API.
The range readings are in units of mm.
Original source: https://github.com/pololu/vl53l0x-arduino
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: Sep 26, 2017
*/
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
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();
}
void loop()
{
int distance =sensor.readRangeContinuousMillimeters();
distance = distance -55;// -55 is to compensate for error. Change or set it to zero to make it work for your sensor
Serial.print("Distance: ");
Serial.print(distance);
Serial.print("mm");
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
}
++
/* This example shows how to use continuous mode to take
range measurements with two VL53L0X sensors. It is based on
vl53l0x_ContinuousRanging_Example.c from the VL53L0X API.
The range readings are in units of mm.
Original source: https://github.com/pololu/vl53l0x-arduino
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: June 06, 2018
Dennis from YouTube requested this code on June 06, 2018
*/
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor1;// define object for sensor 1
VL53L0X sensor2;// define object for sensor 2
void setup()
{
Serial.begin(9600);
Wire.begin();
sensor1.init();// initialize sensor 1
sensor1.setTimeout(500);// set time out for sensor 1
sensor2.init();// initialize sensor 2
sensor2.setTimeout(500);// set time out for sensor 2
// 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)).
sensor1.startContinuous();// measure continuously for sensor 1
sensor2.startContinuous();// measure continuously for sensor 2
}
void loop()
{
int distance1 =sensor1.readRangeContinuousMillimeters();// get distance for sensor 1
int distance2 =sensor2.readRangeContinuousMillimeters();// get distance for sensor 2
distance1 = distance1 -55;// -55 is to compensate for error. Change or set it to zero to make it work for your sensor
distance2 = distance2 -34;// -35 is to compensate for error. Change or set it to zero to make it work for your sensor
Serial.print("Distance 1: ");
Serial.print(distance1);// print distance from sensor 1
Serial.print("mm Distance 2: ");
Serial.print(distance2);// print distance from sensor 2
Serial.print("mm");
if (sensor1.timeoutOccurred()) { Serial.print(" TIMEOUT 1"); }
if (sensor2.timeoutOccurred()) { Serial.print(" TIMEOUT 2"); }
Serial.println();
}
وسائل اور حوالہ جات
ابھی تک کوئی وسائل نہیں۔
فائلیں📁
فریٹزنگ فائل
-
Adafruit VL6180X Time of Flight Distance SensorFritzing 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.fzpz0.02 MB -
Adafruit VL6180X Time of Flight Distance SensorFritzing part file for the Adafruit VL6180X Time of Flight distance sensor. This module measures absolute distance up to 100mm and ambient light, communicating over I2C. Includes the sensor breakout board with pins for power, ground, SDA, SCL, and interrupt.
Adafruit VL6180X Time of Flight Distance Sensor.fzpz0.02 MB
دیگر فائلیں
-
پولاؤ VL53L0X لائبریری
robojax-VL53L0X-polou-arduino-master.zip0.02 MB