Tafuta Msimbo

Kupima Umbali kwa Kihisi cha Laser Time-of-Flight VL53L0X Kwa Kutumia Arduino

Kupima Umbali kwa Kihisi cha Laser Time-of-Flight VL53L0X Kwa Kutumia Arduino

Katika mafunzo haya, tutachunguza jinsi ya kupima umbali kwa kutumia kihisi cha VL53L0X cha laser time-of-flight pamoja na Arduino. Kihisi hiki kinaruhusu vipimo sahihi vya umbali na kinaweza kuunganishwa katika miradi mbalimbali, kama vile robotiki au mifumo ya otomatiki. Kufikia mwisho wa mafunzo haya, utaweza kusanidi kihisi, kukiunganisha kwa usahihi, na kuandika msimbo unaohitajika kupata usomaji wa umbali.

Tutashughulikia vipengele vya vifaa vinavyohitajika, maagizo ya uunganishaji, na maelezo ya kina ya msimbo unaoendesha kihisi cha VL53L0X. Kwa uwakilishi wa kuona zaidi wa mchakato, hakikisha umeangalia video inayohusiana (katika video saa 00:15).

Vifaa Vimeelezwa

Kipengele kikuu cha mradi huu ni kihisi cha VL53L0X. Hiki ni kihisi cha umbali cha time-of-flight kinachofanya kazi kwa kutoa mwanga wa laser na kupima muda unaochukuliwa na mwanga ulioakisiwa kurudi kwenye kihisi. Kinatoa vipimo vya umbali katika milimita na kina uwezo wa kufanya kazi katika anuwai ya umbali, na kuifanya kufaa kwa matumizi mbalimbali.

Mbali na VL53L0X, utahitaji bodi ya Arduino kusindika data ya kihisi. Arduino itawasiliana na kihisi kupitia itifaki ya I2C, ambayo inaruhusu uunganishaji na udhibiti rahisi. Pia utahitaji nyaya za jumper kuanzisha miunganisho kati ya kihisi na Arduino.

Maelezo ya Datasheet

Mtengenezaji STMicroelectronics
Nambari ya sehemu VL53L0X
Voltage ya Logic/IO 1.8 V hadi 3.6 V
Voltage ya usambazaji 2.6 V hadi 3.6 V
Mkondo wa pato (kwa kila chaneli)
Mkondo wa kilele (kwa kila chaneli)
Mwongozo wa mzunguko wa PWM
Viwango vya kizingiti cha mantiki ya kuingiza
Kushuka kwa voltage / RDS(on) / kueneza
Mipaka ya joto -40 °C hadi 85 °C
Kifurushi QFN-16
Vidokezo / lahaja Kihisi cha time-of-flight, kiolesura cha I2C

 

  • Hakikisha viwango sahihi vya voltage ili kuepuka kuharibu kihisi.
  • Tumia resistors za pull-up kwenye mistari ya I2C ikiwa ni lazima.
  • Weka kihisi safi na kisicho na vizuizi kwa usomaji sahihi.
  • Sawazisha kihisi kwa mazingira maalum ili kuboresha usahihi.
  • Angalia makosa ya muda uliomalizika katika msimbo kushughulikia masuala ya kipimo.

Maagizo ya Uunganishaji

Ili kuunganisha kihisi cha VL53L0X kwenye Arduino, anza kwa kuunganisha pini ya VCC kwenye kihisi kwenye pini ya 5V kwenye Arduino. Hii ni salama kwa sababu kihisi kina kidhibiti cha ndani kinachokiruhusu kufanya kazi na usambazaji wa 5V huku kikifanya kazi katika viwango vya 3.3V. Ifuatayo, unganisha pini ya GND kwenye kihisi kwenye pini ya ardhi kwenye Arduino.

Sasa, unganisha pini ya SDA kwenye kihisi kwenye pini ya A4 kwenye Arduino, ambayo ni mstari wa data wa I2C wa kawaida. Kisha, unganisha pini ya SCL kwenye kihisi kwenye pini ya A5 kwenye Arduino, ambayo ni mstari wa saa wa I2C wa kawaida. Kwa mifano mingine ya Arduino, pini za SDA na SCL zinaweza kutofautiana; kwa mfano, kwenye Arduino Mega, tumia pini 20 na 21, mtawalia. Hakikisha miunganisho yote ni salama kabla ya kuwasha mfumo.

Mifano ya Msimbo & Maelezo ya Hatua kwa Hatua

Katika msimbo wa Arduino, tunaanza kwa kujumuisha maktaba muhimu na kuanzisha kihisi cha VL53L0X. Katika kazi ya setup(), tunaweka mawasiliano ya serial na kuanzisha kihisi:

void setup() {
  Serial.begin(9600);
  Wire.begin();
  sensor.init();
  sensor.setTimeout(500);
  sensor.startContinuous();
}

Kipande hiki kinaanzisha kihisi na kuanza hali ya kipimo cha kuendelea. Kazi ya setTimeout(500) inahakikisha kwamba kihisi hakitanyongwa kwa muda usiojulikana ikiwa kitashindwa kusoma umbali.

Katika kazi ya loop(), tunasoma umbali na kuuchapisha kwenye kichunguzi cha serial:

void loop() {
  int distance = sensor.readRangeContinuousMillimeters();
  distance = distance - 55; // Fidia kosa
  Serial.print("Umbali: ");
  Serial.print(distance);
  Serial.print("mm");
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
  Serial.println();
}

Sehemu hii ya msimbo inapata kipimo cha umbali na kufidia kosa lolote la kimfumo kwa kutoa thamani isiyobadilika. Pia inaangalia muda uliomalizika ikiwa kihisi kitashindwa kupata usomaji.

Maonyesho / Nini cha Kutarajia

Unapoendesha programu, unapaswa kuona sasisho za kuendelea za umbali unaopimwa na kihisi cha VL53L0X kwenye kichunguzi cha serial. Usomaji utaonyeshwa katika milimita. Ukisogeza kitu karibu au mbali na kihisi, thamani za umbali zitabadilika ipasavyo. Ikiwa kuna muda uliomalizika, utaona ujumbe wa "TIMEOUT" unaoonyesha kwamba kihisi kilishindwa kusoma umbali (katika video saa 05:30).

Vidokezo vya Muda wa Video

  • 00:00 - Utangulizi
  • 00:15 - Muhtasari wa vipengele
  • 01:00 - Maagizo ya uunganishaji
  • 02:30 - Maelezo ya msimbo
  • 05:30 - Maonyesho
16-Source code for the VL523L0X distance measurement module for Arduino
Språk: C++
/* 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();
}
17-Source code for VL53L0X distance measurement using two sensor modules for Arduino
Språk: C++
++
/* 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();
}

Resurser och referenser

Inga resurser än.

Filer📁

Fritzing-fil

  • 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
  • Adafruit VL6180X Time of Flight Distance Sensor
    Fritzing 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.fzpz 0.02 MB

Andra filer