Ардуино көмегімен VL53L0X лазерлік ұшу уақыты сенсорымен қашықтықты өлшеу
Бұл оқулықта біз Arduino-мен VL53L0X лазерлік ұшу уақыты сенсорын қолданып қашықтықты қалай өлшеуге болатынын қарастырамыз. Бұл сенсор дәл қашықтық өлшеуге мүмкіндік береді және оны робототехника немесе автоматтандыру жүйелері сияқты әртүрлі жобаларға біріктіруге болады. Осы оқулықтың соңында сіз сенсорды орнатуды, оны дұрыс қосу және қашықтық көрсеткіштерін алу үшін қажетті кодты жаза аласыз.
Біз қажетті аппараттық құрамдастарды, қосу нұсқауларын және VL53L0X сенсорын басқаратын кодтың егжей-тегжейлі түсіндірмесін қамтимыз. Процестің көрнекі бейнесі үшін байланысты бейнені міндетті түрде қараңыз (бейнеде 00:15).
Аппараттық құрал түсіндірмесі
Бұл жобаның негізгі құрамдасы - VL53L0X сенсоры. Бұл лазер сәулесін шығару және шағылысқан жарықтың сенсорға оралу уақытын өлшеу арқылы жұмыс істейтін ұшу уақыты қашықтық сенсоры. Ол қашықтық өлшемдерін миллиметрмен қамтамасыз етеді және әртүрлі қашықтықтарда жұмыс істей алады, бұл оны әртүрлі қолданбаларға жарамды етеді.
VL53L0X-тен басқа, сенсор деректерін өңдеу үшін Arduino тақтасы қажет болады. Arduino сенсормен I2C протоколы арқылы байланысады, бұл оңай интеграция мен басқаруға мүмкіндік береді. Сондай-ақ сенсор мен Arduino арасындағы байланыстарды орнату үшін түйістіру сымдары қажет болады.
Деректер парағының мәліметтері
| Өндіруші | STMicroelectronics |
|---|---|
| Бөлшек нөмірі | VL53L0X |
| Логика/IO кернеуі | 1.8 В - 3.6 В |
| Қоректендіру кернеуі | 2.6 В - 3.6 В |
| Шығыс тогы (арнаға) | … |
| Ең жоғары ток (арнаға) | … |
| 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();
}
Ресурстар мен сілтемелер
Әлі ресурстар жоқ.
Файлдар📁
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 кітапханасы
robojax-VL53L0X-polou-arduino-master.zip0.02 MB