Cabbidda Kaddista Laser Time-of-Flight VL53L0X Sensor-ka iyadoo la isticmaalayo Arduino
Cashiggan, waxaan ku baran doonaa sida loo cabbiro masaafada iyadoo la adeegsanayo dareemaha VL53L0X ee laser-ka ee waqtiga-duulista ee Arduino. Dareemahan wuxuu u oggolaanayaa cabbiro sax ah oo masaafo ah waxaana lagu dhex dari karaa mashaariic kala duwan, sida robotics ama nidaamyada otomaatiga. Marka aad dhammayso casharradan, waxaad awoodi doontaa inaad dejiso dareemaha, si sax ah ugu xirto, oo aad qorto koodhka lagama maarmaanka u ah si aad u hesho akhrinta masaafada.
Waxaan dabooli doonaa qaybaha qalabka ee loo baahan yahay, tilmaamaha fiilada, iyo sharaxaad faahfaahsan oo ku saabsan koodhka ka shaqeeya dareemaha VL53L0X. Si aad u hesho sawir muuqaal ah oo ku saabsan habka, hubi inaad daawato fiidiyowga la xidhiidha (fiidiyowga 00:15).
Qalabka La Sharaxay
Qaybta koowaad ee mashruucan waa dareemaha VL53L0X. Kani waa dareeme masaafo ah oo waqtiga-duulista ah kaas oo u shaqeeya isagoo sii daaya layn laser ah oo cabbiraya waqtiga ay ku qaadanayso iftiinka la celiyay inuu ku soo laabto dareemaha. Wuxuu bixiyaa cabbirada masaafada oo ku jira millimitir waxaana awood u leh inuu ku shaqeeyo masaafo kala duwan, taasoo ka dhigaysa mid ku habboon codsiyo kala duwan.
Marka laga soo tago VL53L0X, waxaad u baahan doontaa sabuurad Arduino ah si aad u habeyso xogta dareemaha. Arduino wuxuu la xidhiidhi doonaa dareemaha iyada oo loo marayo borotokoolka I2C, kaas oo u oggolaanaya isdhexgal fudud iyo xakameyn. Waxaad sidoo kale u baahan doontaa fiilooyin jumper ah si aad u xidho xiriirka ka dhexeeya dareemaha iyo Arduino.
Faahfaahinta Xaashida Xogta
| Soo saaraha | STMicroelectronics |
|---|---|
| Nambarka qaybta | VL53L0X |
| Danabka Logic/IO | 1.8 V ilaa 3.6 V |
| Danabka sahayda | 2.6 V ilaa 3.6 V |
| Korontada soo baxa (kanaal kasta) | … |
| Korontada ugu sarreysa (kanaal kasta) | … |
| Hagaha soo noqnoqoshada PWM | … |
| Heerarka caqabadda logic-ga | … |
| Hoos u dhaca danabka / RDS(on) / dheregsanaanta | … |
| Xadka kulaylka | -40 °C ilaa 85 °C |
| Baakad | QFN-16 |
| Xusuusin / noocyo kale | Dareeme waqtiga-duulista, isdhexgal I2C |
- Hubi heerarka danabka ee saxda ah si aad uga hortagto dhaawaca dareemaha.
- Isticmaal resistors-ka kor u jiidaya ee khadadka I2C haddii loo baahdo.
- Ka ilaali dareemaha inuu nadiif ahaado oo aan la xannibin si aad u hesho akhrin sax ah.
- Hagaaji dareemaha deegaannada gaarka ah si aad u wanaajiso saxnaanta.
- Hubi khaladaadka waqtiga-dhamaadka ee koodhka si aad u xalliso arrimaha cabbirka.
Tilmaamaha Fiilada
Si aad ugu xidho dareemaha VL53L0X ee Arduino, bilaab adigoo ku xidhaya biinka VCC ee dareemaha biinka 5V ee Arduino. Tani waa mid badbaado leh sababtoo ah dareemuhu wuxuu leeyahay nidaamiye gudaha ah oo u oggolaanaya inuu ku shaqeeyo sahay 5V ah isagoo weli ku shaqeynaya heerarka 3.3V. Marka xigta, ku xidh biinka GND ee dareemaha biinka dhulka ee Arduino.
Hadda, ku xidh biinka SDA ee dareemaha biinka A4 ee Arduino, kaas oo ah khadka xogta ee I2C ee caadiga ah. Kadib, ku xidh biinka SCL ee dareemaha biinka A5 ee Arduino, kaas oo ah khadka saacadda ee I2C ee caadiga ah. Noocyada kale ee Arduino, biinanka SDA iyo SCL way kala duwanaan karaan; tusaale ahaan, Arduino Mega, isticmaal biinanka 20 iyo 21, siday u kala horreeyaan. Hubi in dhammaan xiriirada ay adag yihiin ka hor intaadan shidin nidaamka.
Tusaalooyinka Koodhka & Sharaxaada
Koodhka Arduino, waxaan ku bilaabaynaa inaan ku darro maktabadaha lagama maarmaanka ah oo aan bilowno dareemaha VL53L0X. Shaqada setup(), waxaan dejineynaa isgaarsiinta taxanaha ah oo aan bilowno dareemaha:
void setup() {
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
sensor.startContinuous();
}
Qaybtani waxay bilowdaa dareemaha oo waxay bilaabataa qaabka cabbirka joogtada ah. Shaqada setTimeout(500) waxay hubinaysaa in dareemuhu uusan si aan dhammaad lahayn u laalan doonin haddii uu ku guuldareysto inuu akhriyo masaafo.
Shaqada loop(), waxaan akhrinaynaa masaafada oo aan ku daabacaynaa kormeeraha taxanaha ah:
void loop() {
int distance = sensor.readRangeContinuousMillimeters();
distance = distance - 55; // Ka magdhaw qaladka
Serial.print("Masaafada: ");
Serial.print(distance);
Serial.print("mm");
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
}
Qaybtani waxay soo celisaa cabbirka masaafada oo waxay ka magdhawdaa qalad kasta oo nidaamsan adigoo ka jaraya qiime joogto ah. Waxay sidoo kale hubisaa waqtiyada-dhamaadka haddii dareemuhu ku guuldareysto inuu helo akhrin.
Muuujin / Waxa Laga Filan Karo
Markaad shubto barnaamijka, waxaad arki doontaa cusboonaysiin joogto ah oo ku saabsan masaafada uu cabbiray dareemaha VL53L0X ee kormeeraha taxanaha ah. Akhrintu waxay ku soo bixi doontaa millimitir. Haddii aad u dhaqaaqdid shay u dhow ama ka fog dareemaha, qiimaha masaafada ayaa si waafaqsan isu beddeli doona. Haddii ay jirto waqti-dhamaad, waxaad arki doontaa farriin "TIMEOUT" oo muujinaysa in dareemuhu ku guuldareystay inuu akhriyo masaafada (fiidiyowga 05:30).
Waqtiyada Fiidiyowga
- 00:00 - Hordhac
- 00:15 - Dulmarka qaybaha
- 01:00 - Tilmaamaha fiilada
- 02:30 - Sharaxaada koodhka
- 05:30 - Muujin
/* 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();
}
Kheyraadka & Tixraacyada
Wali wax kaydsan ah oo weli ma jiro.
Faylasha📁
Faylka 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
Faylal kale
-
Maktabada Polou VL53L0X
robojax-VL53L0X-polou-arduino-master.zip0.02 MB