Search Code

Menggunakan Pengukur Jarak Laser VL53L0X dengan Arduino

Menggunakan Pengukur Jarak Laser VL53L0X dengan Arduino

Dalam tutorial ini, kita akan mengeksplorasi cara menggunakan pengukur jarak laser VL53L0X dengan Arduino. Perangkat ini memungkinkan Anda mengukur jarak secara akurat menggunakan laser, menjadikannya ideal untuk berbagai aplikasi seperti robotika dan otomatisasi. Pada akhir tutorial ini, Anda akan memiliki pengaturan fungsional yang dapat mengukur jarak dan menampilkannya di monitor serial.

VL53L0X 200cm range sensor-blue

Untuk proyek kami, kami akan menggunakan perpustakaan VL53L0X Adafruit, yang menyederhanakan proses interaksi dengan sensor. Pustaka ini menyediakan fungsi yang diperlukan untuk menginisialisasi sensor, membaca pengukuran, dan menangani kesalahan apa pun yang mungkin timbul. Anda dapat merujuk ke video untuk panduan visual tentang pengaturan (dalam video pada 02:15).

Perangkat Keras Dijelaskan

Komponen utama dari proyek ini termasuk pengukur jarak laser VL53L0X dan papan Arduino. VL53L0X adalah sensor time-of-flight yang menggunakan laser untuk mengukur jarak hingga 2 meter dengan akurasi tinggi. Ini beroperasi melalui protokol I2C, memungkinkan komunikasi yang mudah dengan Arduino.

Papan Arduino berfungsi sebagai mikrokontroler yang memproses data dari VL53L0X. Ini mengirimkan perintah ke sensor dan menerima pengukuran jarak, yang kemudian dapat ditampilkan atau digunakan dalam aplikasi lain. Pengkabelan yang tepat sangat penting untuk memastikan pembacaan yang akurat dari sensor.

Detail Lembar Data

ProdusenSTMicroelektronika
Nomor bagianVL53L0X
Tegangan operasi2.6 V hingga 3.5 V
Lingkup30 mm hingga 2000 mm
Ketepatan±3% khas
AntarmukaI2C
Kisaran suhu-40 °C hingga +85 °C
Konsumsi saat ini<1 mA (siaga), 20 mA (aktif)
PaketVFLGA-8

  • Pastikan sensor diberi daya dengan benar (2.6 V hingga 3.5 V).
  • Pertahankan pengaturan alamat I2C yang benar untuk menghindari konflik.
  • Jaga kebersihan sensor untuk pengukuran jarak yang akurat.
  • Gunakan resistor pull-up yang sesuai pada saluran I2C jika diperlukan.
  • Hindari sinar matahari langsung pada sensor untuk pembacaan yang andal.

Instruksi Pengkabelan

Arduino Wiring for VL53L0X
Arduino Wiring for VL53L0X

Untuk menghubungkan sensor VL53L0X ke Arduino, sambungkan pin VCC sensor ke pin 5V pada Arduino. Pin GND harus dihubungkan ke ground (GND) Arduino. Untuk komunikasi I2C, sambungkan pin SDA VL53L0X ke pin A4 pada Arduino, dan sambungkan pin SCL ke pin A5. Jika Anda menggunakan model Arduino yang berbeda, lihat penetapan pin SDA dan SCL khusus untuk papan tersebut.

Misalnya, pada Arduino Mega, Anda akan menghubungkan SDA ke pin 20 dan SCL ke pin 21. Pastikan semua koneksi aman untuk menghindari masalah komunikasi. Jika sensor tidak merespons, periksa kembali kabel dan pastikan Arduino diberi daya dengan benar.

Contoh Kode & Panduan

Di bawah ini adalah cuplikan dari fungsi penyiapan yang menginisialisasi sensor VL53L0X:

void setup() {
  Serial.begin(9600);
  while (! Serial) {
    delay(1);
  }
  Serial.println("Robojax Test");
  if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X"));
    while(1);
  }
}

Kode ini menginisialisasi komunikasi serial dan mencoba memulai sensor VL53L0X. Jika sensor gagal boot, sensor akan mencetak pesan kesalahan dan menghentikan program.

Selanjutnya, berikut adalah cuplikan dari fungsi loop yang membaca pengukuran jarak:

void loop() {
  VL53L0X_RangingMeasurementData_t measure;
  lox.rangingTest(&measure, false);
  if (measure.RangeStatus != 4) {
    Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
  } else {
    Serial.println(" out of range ");
  }
  delay(100);
}

Blok ini terus membaca pengukuran jarak dari sensor dan mencetaknya ke monitor serial. Jika pengukuran berada di luar jangkauan, itu menunjukkan hal yang sesuai.

Demonstrasi / Apa yang Diharapkan

Saat Anda menjalankan program, Anda akan melihat pengukuran jarak yang ditampilkan di monitor serial. Pembacaan harus diperbarui setiap 100 milidetik. Jika sensor menunjuk ke suatu objek, itu akan menampilkan jarak dalam milimeter. Jika objek berada di luar jangkauan, itu akan menunjukkan itu juga. Pastikan untuk menguji sensor dalam kisaran yang ditentukan untuk hasil yang optimal (dalam video pada pukul 10:00).

Stempel Waktu Video

  • 00:00-Perkenalan
  • 02:15- Pengaturan kabel
  • 05:30- Penjelasan kode
  • 10:00-Demonstrasi

Gambar

VL53L0X 200cm range sensor-blue
VL53L0X 200cm range sensor-blue
Arduino Wiring for VL53L0X
Arduino Wiring for VL53L0X
15-Using a VL53L0X laser distance meter in Arduino
Bahasa: C++
/* This example shows how to use continuous mode to take
range measurements with the VL53L0X.
// Original source from Adafruit https://github.com/adafruit/Adafruit_VL53L0X
// Modified by Ahmad Shamshiri for RoboJax.com
// Date modified: Sep 26, 2017
// Nejrabi

* Get this code and other Arduino codes from Robojax.com
Learn Arduino step by step in a structured course with all material, wiring diagrams, and libraries
all in one place. 

If you found this tutorial helpful, please support me so I can continue creating 
content like this. 

or make a donation using PayPal http://robojax.com/L/?id=64

 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

   Copyright (c) 2015, Majenko Technologies
   All rights reserved.

   Redistribution and use in source and binary forms, with or without modification,
   are permitted provided that the following conditions are met:

 * * Redistributions of source code must retain the above copyright notice, this
     list of conditions and the following disclaimer.

 * * Redistributions in binary form must reproduce the above copyright notice, this
     list of conditions and the following disclaimer in the documentation and/or
     other materials provided with the distribution.

 * * Neither the name of Majenko Technologies nor the names of its
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include "Adafruit_VL53L0X.h"

Adafruit_VL53L0X lox = Adafruit_VL53L0X();

void setup() {
  Serial.begin(9600);

  // wait until serial port opens for native USB devices
  while (! Serial) {
    delay(1);
  }
  
  Serial.println("Robojax Test");
  if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X"));
    while(1);
  }
  // power 
  Serial.println(F("VL53L0X API Simple Ranging example\n\n")); 
}


void loop() {
  VL53L0X_RangingMeasurementData_t measure;
    
  Serial.print("Reading a measurement... ");
  lox.rangingTest(&measure, false); // pass in 'true' to get debug data printout!

  if (measure.RangeStatus != 4) {  // phase failures have incorrect data
    Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
  } else {
    Serial.println(" out of range ");
  }
    
  delay(100);
}

Sumber daya & referensi

Berkas📁

File Fritzing

  • 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

File lainnya