Кодты іздеу

Ардуино үшін VL53L0X 6-індік лазерлік модульмен қашықтықты өлшеу

Ардуино үшін VL53L0X 6-індік лазерлік модульмен қашықтықты өлшеу

Бұл оқулықта біз VL53L0X лазерлік қашықтық сенсорын 6 істікшелі модульмен пайдаланып қашықтықты қалай өлшеу керектігін үйренеміз. Бұл кішкентай, бірақ қуатты сенсор ұшу уақыты технологиясын қолданып, 200 см-ге дейінгі дәл қашықтық өлшемдерін қамтамасыз етеді. Осы нұсқаулықты орындау арқылы сіз сенсорды Arduino-мен қосып, қашықтық мәндерін тікелей сериялық монитордан оқи аласыз.

VL53L0X 200cm range sensor

Бұл жоба үшін біз әртүрлі қолданбаларға оңай интеграцияланатын ықшам VL53L0X сенсорын қолданамыз. Сенсор I2C арқылы байланысады, бұл оны Arduino тақтасына қосуды жеңілдетеді. Бейнеде сіз орнату процесінің қосымша түсіндірмелері мен демонстрацияларын таба аласыз (бейнеде 04:00).

Аппараттық құрал түсіндірмесі

VL53L0X - бұл лазер сәулесін шығаратын және жарықтың нысанға тигеннен кейін қайту уақытын өлшейтін ұшу уақыты қашықтық сенсоры. Бұл оған нысанға дейінгі қашықтықты дәл есептеуге мүмкіндік береді. Сенсор 2,6 В-тан 3,5 В-қа дейінгі кернеуде жұмыс істейді, бірақ ішкі кернеу реттегішінің арқасында 5 В-пен қоректендіруге болады.

Модульде алты істікше бар: VCC, GND, SDA (деректер желісі), SCL (сағат желісі), GPIO1 (жалпы мақсаттағы I/O) және XSHUT (өшіру істікшесі). GPIO1 істікшесі бұл конфигурацияда қолданылмайды, бірақ оны қосылмаған күйде қалдыруға болады. XSHUT істікшесі пайдаланылмаған кезде қуатты үнемдеу үшін сенсорды өшіруге мүмкіндік береді.

Деректер парағының мәліметтері

ӨндірушіSTMicroelectronics
Бөлшек нөміріVL53L0X
Логика/IO кернеуі2,6 В - 3,5 В (реттегішпен 5 В)
Жұмыс температурасы-20 °C - 70 °C
Өлшеу диапазоны30 мм - 2000 мм
I2C байланыс жиілігі400 кГц
Өлшемі4,4 мм x 2,4 мм x 1 мм

  • Тиісті қорек көзін қамтамасыз етіңіз (5 В ұсынылады).
  • SDA және SCL істікшелерін Arduino-дағы тиісті I2C істікшелеріне қосыңыз.
  • Қажет болса, I2C желілерінде жоғары тарту резисторларын қолданыңыз.
  • GPIO1 істікшесін қосылмаған күйде қалдыруға болады; оны еркін қалдыруға болады.
  • Жұмыс кезінде XSHUT істікшесін жоғары деңгейде ұстаңыз.
  • Жақсырақ дәлдік үшін қашықтықты жақсы жарықтандырылған ортада өлшеңіз.
  • Дәл өлшеулер үшін сенсорды калибрлеңіз.
  • Нысандарды әртүрлі қашықтықтарға қою арқылы сенсор диапазонын тексеріңіз.
  • Қашықтық көрсеткіштері мен уақыт аяқталу хабарламалары үшін сериялық шығысты бақылаңыз.

Сым қосу нұсқаулары

Arduino wiring VL53L0X laser distance sensor
Arduino wiring VL53L0X laser distance sensor

VL53L0X сенсорын Arduino-ға қосу үшін алдымен сенсордың VCC істікшесін Arduino-дағы 5V істікшесіне қосыңыз. Әрі қарай, GND істікшесін Arduino-дағы GND-ге қосыңыз. Сенсордың SDA істікшесі Arduino-дағы A4 істікшесіне (немесе тақтаңызда арнайы I2C істікшелері болса, SDA істікшесіне) қосылуы керек. Сол сияқты, сенсордың SCL істікшесін A5 істікшесіне (немесе SCL істікшесіне) қосыңыз. GPIO1 істікшесін қосылмаған күйде қалдырыңыз, себебі ол бұл жоба үшін қажет емес.

Соңында, XSHUT істікшесін Arduino-дағы 12 цифрлық істікшеге қосыңыз. Бұл істікше сенсордың өшіру күйін басқару үшін қолданылады. Байланыс ақауларын болдырмау үшін барлық қосылымдардың сенімді екеніне көз жеткізіңіз.

Код мысалдары мен түсіндірме

Кодта біз қажетті кітапханаларды қосудан және VL53L0X сенсорын инициализациялаудан бастаймыз. Орнату функциясы сенсорды конфигурациялайды және үздіксіз қашықтық өлшеулерін бастайды. Орнату функциясынан үзінді:

void setup() {
  pinMode(12, INPUT_PULLUP);
  digitalWrite(12, HIGH);
  Serial.begin(9600);
  Wire.begin();
  sensor.init();
  sensor.setTimeout(500);
  sensor.startContinuous();
}

Бұл үзіндіде біз 12 істікшені жоғары тарту резисторымен кіріс ретінде орнатамыз және сериялық байланысты 9600 бод жылдамдықпен инициализациялаймыз. Сондай-ақ сенсорды инициализациялап, оның үздіксіз жұмыс істеуін қамтамасыз ету үшін көрсеткіштерге уақыт аяқталуын орнатамыз.

Әрі қарай, цикл функциясында қашықтықты оқимыз, онда өлшенген мән сериялық мониторға шығарылады:

void loop() {
  int distance = sensor.readRangeContinuousMillimeters();
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.print("mm");
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
  Serial.println();
  delay(100);
}

Бұл код қашықтықты миллиметрмен оқып, оны сериялық мониторға шығарады. Уақыт аяқталуы орын алса, бұл сенсордың жарамды көрсеткіш алмағанын білдіреді.

Демонстрация / Не күтуге болады

Бағдарламаны іске қосқанда, сериялық мониторда қашықтық өлшемдерін көре бастауыңыз керек. Нысандарды сенсорға жақындатқанда немесе алыстатқанда шығыс өзгеріп тұрады. Сенсор көрсеткіш ала алмаса, кейде уақыт аяқталу хабарламаларын байқауыңыз мүмкін (бейнеде 10:30). Дәлдікті жақсарту үшін бірнеше көрсеткішті орташалауды қарастырыңыз.

Суреттер

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
Arduino wiring VL53L0X laser distance sensor
Arduino wiring VL53L0X laser distance sensor
103-Measureing distance using VL53L0X TOF range sensor
Тіл: C++
/* This example shows how to use continuous mode to take
range measurements with the 6-pin VL53L0X module. 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/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com/RJT83
Date modified: May 31, 2018 at 19:25 in Ajax, Ontario, Canada
Watch the instruction video for this code https://youtu.be/S2jaAQEv3Yo

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)
*/


#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;

void setup()
{
  pinMode(12,INPUT_PULLUP);
  digitalWrite(12,HIGH);
  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();
  //int distance =sensor.startContinuous(100);
  
 //distance = distance;
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.print("mm");
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

  Serial.println();
  delay(100);
}

Сізге қажет болуы мүмкін нәрселер

Ресурстар мен сілтемелер

Файлдар📁

Fritzing файлы

  • VL53L0X_Distance_sensor_Squares
    VL53L0X_Distance_sensor_Squares.fzpz 0.02 MB
  • 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

Басқа файлдар