د لېزر د وخت-الوتنې VL53L0X سینسر په کارولو سره د فاصلې اندازه کول د آردوینو سره
په دې ټیوټوریل کې، موږ به وپلټو چې څنګه د VL53L0X لیزر د الوتنې وخت سینسر د Arduino سره په کارولو سره واټن اندازه کړو. دا سینسر دقیق واټن اندازه کولو ته اجازه ورکوي او په بیلابیلو پروژو کې مدغم کیدی شي، لکه روبوټیک یا اتومات سیسټمونه. د دې ټیوټوریل په پای کې، تاسو به وکولی شئ سینسر تنظیم کړئ، په سمه توګه یې تارونه وتړئ، او د واټن لوستلو ترلاسه کولو لپاره اړین کوډ ولیکئ.
موږ به د هارډویر اجزاوې، د تارونو د تړلو لارښوونې، او د VL53L0X سینسر چلونکي کوډ تفصیلي توضیح پوښو. د پروسې د لا ډیر بصري استازیتوب لپاره، ډاډ ترلاسه کړئ چې اړونده ویډیو وګورئ (په ویډیو کې په 00:15 کې).
هارډویر تشریح شوی
د دې پروژې لومړنی جز د VL53L0X سینسر دی. دا د الوتنې وخت واټن سینسر دی چې د لیزر شعاع په خپرولو او د انعکاس شوي رڼا بیرته سینسر ته د راستنیدو وخت اندازه کولو سره کار کوي. دا په ملی مترو کې د واټن اندازه کول چمتو کوي او د واټن په پراخه لړۍ کې د کار وړ دی، چې دا د مختلفو غوښتنلیکونو لپاره مناسب کوي.
د VL53L0X سربیره، تاسو به د سینسر ډیټا پروسس کولو لپاره د Arduino بورډ ته اړتیا ولرئ. Arduino به د I2C پروتوکول له لارې له سینسر سره اړیکه ونیسي، کوم چې اسانه ادغام او کنټرول ته اجازه ورکوي. تاسو به د سینسر او Arduino ترمنځ د اړیکو رامینځته کولو لپاره جمپر تارونو ته هم اړتیا ولرئ.
ډیټاشیټ تفصیلات
| جوړونکی | STMicroelectronics |
|---|---|
| د پرزې شمېره | VL53L0X |
| منطق/IO ولټاژ | 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("mm");
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();
}
سرچینې او حوالې
تر اوسه هیڅ سرچینې نشته.
فایلونه📁
Fritzing فایل
-
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
نور فایلونه
-
Polou VL53L0X library
robojax-VL53L0X-polou-arduino-master.zip0.02 MB