Mengukur Jarak dengan Sensor Laser Time-of-Flight VL53L0X Menggunakan Arduino
Dalam tutorial ini, kita akan mengeksplorasi cara mengukur jarak menggunakan sensor laser time-of-flight VL53L0X dengan Arduino. Sensor ini memungkinkan pengukuran jarak yang presisi dan dapat diintegrasikan ke dalam berbagai proyek, seperti robotika atau sistem otomasi. Di akhir tutorial ini, Anda akan dapat menyiapkan sensor, menghubungkannya dengan benar, dan menulis kode yang diperlukan untuk mendapatkan pembacaan jarak.
Kita akan membahas komponen perangkat keras yang diperlukan, instruksi pengkabelan, dan penjelasan rinci tentang kode yang mengoperasikan sensor VL53L0X. Untuk representasi proses yang lebih visual, pastikan untuk menonton video terkait (di video pada 00:15).
Penjelasan Perangkat Keras
Komponen utama dari proyek ini adalah sensor VL53L0X. Ini adalah sensor jarak time-of-flight yang bekerja dengan memancarkan sinar laser dan mengukur waktu yang dibutuhkan cahaya yang dipantulkan untuk kembali ke sensor. Sensor ini memberikan pengukuran jarak dalam milimeter dan mampu beroperasi pada berbagai rentang jarak, sehingga cocok untuk berbagai aplikasi.
Selain VL53L0X, Anda akan memerlukan papan Arduino untuk memproses data sensor. Arduino akan berkomunikasi dengan sensor melalui protokol I2C, yang memungkinkan integrasi dan kontrol yang mudah. Anda juga akan memerlukan kabel jumper untuk membuat koneksi antara sensor dan Arduino.
Detail Datasheet
| Produsen | STMicroelectronics |
|---|---|
| Nomor bagian | VL53L0X |
| Tegangan logika/IO | 1,8 V hingga 3,6 V |
| Tegangan suplai | 2,6 V hingga 3,6 V |
| Arus keluaran (per saluran) | … |
| Arus puncak (per saluran) | … |
| Panduan frekuensi PWM | … |
| Ambang logika masukan | … |
| Penurunan tegangan / RDS(on) / saturasi | … |
| Batas termal | -40 °C hingga 85 °C |
| Kemasan | QFN-16 |
| Catatan / varian | Sensor time-of-flight, antarmuka I2C |
- Pastikan tingkat tegangan yang tepat untuk menghindari kerusakan pada sensor.
- Gunakan resistor pull-up pada jalur I2C jika diperlukan.
- Jaga sensor tetap bersih dan tidak terhalang untuk pembacaan yang akurat.
- Kalibrasi sensor untuk lingkungan tertentu untuk meningkatkan akurasi.
- Periksa kesalahan timeout dalam kode untuk menangani masalah pengukuran.
Instruksi Pengkabelan
Untuk menghubungkan sensor VL53L0X ke Arduino, mulailah dengan menghubungkan pin VCC pada sensor ke pin 5V pada Arduino. Ini aman karena sensor memiliki regulator internal yang memungkinkannya beroperasi dengan suplai 5V sambil tetap berfungsi pada level 3,3V. Selanjutnya, hubungkan pin GND pada sensor ke pin ground pada Arduino.
Sekarang, hubungkan pin SDA pada sensor ke pin A4 pada Arduino, yang merupakan jalur data I2C default. Kemudian, hubungkan pin SCL pada sensor ke pin A5 pada Arduino, yang merupakan jalur clock I2C default. Untuk model Arduino lainnya, pin SDA dan SCL mungkin berbeda; misalnya, pada Arduino Mega, gunakan pin 20 dan 21 masing-masing. Pastikan semua koneksi aman sebelum menyalakan sistem.
Contoh Kode & Penjelasan
Dalam kode Arduino, kita mulai dengan menyertakan library yang diperlukan dan menginisialisasi sensor VL53L0X. Dalam fungsi setup(), kita mengatur komunikasi serial dan menginisialisasi sensor:
void setup() {
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
sensor.startContinuous();
}
Potongan kode ini menginisialisasi sensor dan memulai mode pengukuran kontinu. Fungsi setTimeout(500) memastikan bahwa sensor tidak akan menggantung tanpa batas jika gagal membaca jarak.
Dalam fungsi loop(), kita membaca jarak dan mencetaknya ke monitor serial:
void loop() {
int distance = sensor.readRangeContinuousMillimeters();
distance = distance - 55; // Kompensasi kesalahan
Serial.print("Jarak: ");
Serial.print(distance);
Serial.print("mm");
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
}
Bagian kode ini mengambil pengukuran jarak dan mengkompensasi kesalahan sistematis dengan mengurangi nilai konstan. Ini juga memeriksa timeout jika sensor gagal mendapatkan pembacaan.
Demonstrasi / Apa yang Diharapkan
Saat Anda menjalankan program, Anda akan melihat pembaruan terus-menerus dari jarak yang diukur oleh sensor VL53L0X di monitor serial. Pembacaan akan ditampilkan dalam milimeter. Jika Anda memindahkan objek lebih dekat atau lebih jauh dari sensor, nilai jarak akan berubah sesuai. Jika terjadi timeout, Anda akan melihat pesan "TIMEOUT" yang menunjukkan bahwa sensor gagal membaca jarak (di video pada 05:30).
Stempel Waktu Video
- 00:00 - Pendahuluan
- 00:15 - Ikhtisar komponen
- 01:00 - Instruksi pengkabelan
- 02:30 - Penjelasan kode
- 05:30 - Demonstrasi
/* 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();
}
Sumber daya & referensi
Belum ada sumber daya.
Berkas📁
File 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
File lainnya
-
Perpustakaan Polou VL53L0X
robojax-VL53L0X-polou-arduino-master.zip0.02 MB