Cari Kode

Pelajaran 78: Menampilkan jarak dari VL53L0X pada LCD | Kursus Arduino Langkah demi Langkah

Pelajaran 78: Menampilkan jarak dari VL53L0X pada LCD | Kursus Arduino Langkah demi Langkah

VL53L0X 200cm range sensor-blue

Panduan ini menunjukkan cara membuat pengukur jarak laser presisi menggunakan sensor waktu-terbang VL53L0X dan layar LCD 16x2 dengan modul I2C. Proyek ini sangat cocok bagi para pembuat yang ingin menambahkan pengukuran jarak non-kontak yang akurat ke kreasi mereka. VL53L0X menggunakan laser untuk mengukur jarak, menjadikannya ideal untuk aplikasi di mana sensor ultrasonik mungkin kesulitan, seperti mengukur tingkat pengisian tangki atau mendeteksi posisi tepat suatu objek di sabuk konveyor.

Berikut adalah beberapa cara praktis untuk menggunakan proyek ini:

  • Pengumpan Hewan Peliharaan Otomatis: Ukur tingkat makanan dalam wadah untuk memicu pengisian ulang atau mengirim notifikasi.
  • Tempat Sampah Pintar: Deteksi seberapa penuh tempat sampah dan beri peringatan saat perlu dikosongkan.
  • Alat Ukur Tinggi DIY: Buat alat pengukur presisi untuk objek kecil atau untuk melacak pertumbuhan anak.
  • Asisten Parkir: Bangun sistem sensor untuk membantu parkir presisi di garasi atau ruang sempit.
  • Robotika: Gunakan dalam robot untuk mendeteksi rintangan atau mengukur jarak ke dinding untuk navigasi.
Modul pin bulat VL53L0x

Perangkat Keras yang Dibutuhkan

  • Papan Arduino (mis., Uno)
  • Sensor Jarak Laser VL53L0X
  • Layar LCD 1602 dengan Modul I2C
  • Kabel Jumper

Panduan Pengkabelan

Pengkabelan untuk proyek ini cukup sederhana, berkat protokol I2C, yang memungkinkan LCD dan sensor berkomunikasi melalui dua kabel yang sama. Sensor VL53L0X memerlukan catu daya 5V, yang diambil langsung dari pin 5V Arduino. Untuk memastikan sensor memiliki sumber daya yang stabil, pin tambahan digunakan sebagai VCC sekunder. (di video pada 00:27)

Pengkabelan VL53L0X_LCD1602-3
Pengkabelan VL53L0X_LCD1602-2
Pengkabelan VL53L0X_LCD1602-1
Pengkabelan VL53L0X_LCD1602-4

Berikut adalah diagram koneksi:

Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)

Koneksinya adalah sebagai berikut:

  • VL53L0X VCC -> Arduino 5V dan Pin 13 (Pin 13 diatur sebagai output digital untuk memberikan stabilitas daya ekstra).
  • VL53L0X GND -> Arduino GND.
  • VL53L0X SCL -> Arduino SCL (A5).
  • VL53L0X SDA -> Arduino SDA (A4).
  • LCD I2C VCC -> Arduino 5V.
  • LCD I2C GND -> Arduino GND.
  • LCD I2C SCL -> Arduino SCL (A5).
  • LCD I2C SDA -> Arduino SDA (A4).

Jika Anda menggunakan model Arduino yang berbeda, pin I2C mungkin berada di tempat lain. Pin SDA dan SCL sering kali diberi label langsung di papan. (di video pada 02:42)

Penjelasan Kode

Kode dirancang agar mudah dikonfigurasi. Bagian utama yang dapat dikonfigurasi pengguna berada di bagian paling atas sketsa. (di video pada 04:18)

Pertama, kita mendefinisikan konstanta untuk pin daya ekstra. Ini digunakan untuk menyediakan suplai 5V yang bersih ke sensor.

const int vcc2 = 13; // Pin VCC ekstra untuk sensor VL53L0X

Selanjutnya, kita membuat instance dari pustaka LCD dan mendefinisikan alamat I2C-nya. Anda dapat menemukan alamat ini dengan menjalankan sketsa pemindai I2C, seperti yang ditunjukkan di video. (di video pada 03:26)

LiquidCrystal_I2C lcd(0x3F, 16, 2); // Atur alamat LCD ke 0x3F untuk tampilan 16 karakter dan 2 baris

Terakhir, ada variabel yang mengontrol unit pengukuran. Anda dapat mengubah nilai ini untuk menampilkan jarak dalam milimeter atau sentimeter.

const int type = 1; // Atur ke 1 untuk milimeter, 2 untuk sentimeter

Dalam fungsi setup(), pin VCC ekstra dikonfigurasi sebagai output dan diatur ke HIGH untuk memberikan daya ke sensor. LCD kemudian diinisialisasi.

Logika utama dalam fungsi loop() membaca jarak dari sensor, membersihkan LCD, dan mencetak nilai beserta satuannya. Ketika type diatur ke 2, jarak dikonversi dari milimeter menjadi nilai float dalam sentimeter untuk pembacaan yang lebih presisi. (di video pada 06:47)

Demonstrasi Proyek Langsung

Dalam demonstrasi, sensor diuji terhadap penggaris untuk memverifikasi akurasinya. Video menunjukkan bahwa sensor memberikan pembacaan yang sangat presisi, dengan hanya beberapa milimeter deviasi. (di video pada 08:32)

Penting untuk dicatat bahwa sensor memiliki jangkauan maksimum sekitar 1,2 meter dalam mode pengukuran kontinu. Ketika target berada di luar jangkauan, tampilan akan menunjukkan nilai 8190. (di video pada 09:53)

Pengamatan penting lainnya adalah sensor dapat memberikan pembacaan yang tidak akurat pada permukaan yang sangat reflektif. Mengarahkannya ke objek mengkilap dapat menyebabkan kesalahan yang signifikan, sementara mengarahkannya ke permukaan matte memberikan hasil yang akurat. (dalam video pada 10:42)

Kode ini juga kompatibel dengan berbagai varian modul VL53L0X dan LCD yang lebih besar, seperti model 2004, tanpa perubahan apa pun pada kabel. (dalam video pada 11:30)

Bab Video

  • [00:05] Pengenalan proyek VL53L0X dan LCD
  • [00:27] Diagram kabel untuk VL53L0X dan LCD
  • [02:51] Perincian kabel pada papan Arduino yang sebenarnya
  • [03:26] Memindai alamat I2C
  • [04:18] Penjelasan kode dan konfigurasi
  • [08:32] Demonstrasi langsung pengukuran jarak
  • [09:53] Menguji jangkauan dan keterbatasan sensor
  • [10:42] Akurasi pada permukaan yang berbeda
  • [11:30] Menguji dengan modul sensor yang berbeda dan LCD yang lebih besar

Gambar

VL53L0X 200cm range sensor-black
VL53L0X 200cm range sensor-black
VL53L0X 200cm range sensor-blue
VL53L0X 200cm range sensor-blue
LCD1602-I2C display module with 4 wires
LCD1602-I2C display module with 4 wires
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
VL53L0x_pin_module
VL53L0x_pin_module
VL53L0x_pin_round_module
VL53L0x_pin_round_module
VL53L0X LCD1602 wiring 4
VL53L0X LCD1602 wiring 4
VL53L0X LCD1602 wiring 1
VL53L0X LCD1602 wiring 1
VL53L0X LCD1602 wiring 2
VL53L0X LCD1602 wiring 2
VL53L0X LCD1602 wiring 3
VL53L0X LCD1602 wiring 3
641-Lesson 78: Using a VL53L0X Laser Distance Sensor with an LCD1602 or LCD2004 Display and Arduino
Bahasa: C++
/*
* Lesson 76-1: Using One single VL6180 Laser Distance Sensor with Arduino 
 * Adafruit code modified for this tutorial
 * by Ahmad Shamshiri at 22:22 on 
 * March 10-11, 2021 in Ajax, ON, Canada
 Please watch video instruction of this code: https://youtu.be/_H9D0czQpSI
 
View code for using two or more VL6180X sensors: https://robojax.com/course1/lecture76

  This video is part of Arduino Step by Step Course which starts here: https://youtu.be/-6qSrDUA5a8

 

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/>. 
 */
#include <Wire.h>
#include "Adafruit_VL6180X.h"

Adafruit_VL6180X vl = Adafruit_VL6180X();

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

  // wait for serial port to open on native usb devices
  while (!Serial) {
    delay(1);
  }
  
  Serial.println("Adafruit VL6180x test!");
  if (! vl.begin()) {
    Serial.println("Failed to find sensor");
    while (1);
  }
  Serial.println("Sensor found!");
}

void loop() {

  uint8_t range = vl.readRange();
  uint8_t status = vl.readRangeStatus();

  if (status == VL6180X_ERROR_NONE) {
    Serial.print("Range: "); Serial.print(range);
    Serial.println("mm");
  }
//  if(range <=76)
//  {
//    //do something
//  }

  // Some error occurred, print it out!
  
  if  ((status >= VL6180X_ERROR_SYSERR_1) && (status <= VL6180X_ERROR_SYSERR_5)) {
    Serial.println("System error");
  }
  else if (status == VL6180X_ERROR_ECEFAIL) {
    Serial.println("ECE failure");
  }
  else if (status == VL6180X_ERROR_NOCONVERGE) {
    Serial.println("No convergence");
  }
  else if (status == VL6180X_ERROR_RANGEIGNORE) {
    Serial.println("Ignoring range");
  }
  else if (status == VL6180X_ERROR_SNR) {
    Serial.println("Signal/Noise error");
  }
  else if (status == VL6180X_ERROR_RAWUFLOW) {
    Serial.println("Raw reading underflow");
  }
  else if (status == VL6180X_ERROR_RAWOFLOW) {
    Serial.println("Raw reading overflow");
  }
  else if (status == VL6180X_ERROR_RANGEUFLOW) {
    Serial.println("Range reading underflow");
  }
  else if (status == VL6180X_ERROR_RANGEOFLOW) {
    Serial.println("Range reading overflow");
  }
  delay(50);
}

Hal-hal yang mungkin Anda butuhkan

Sumber daya & referensi

Berkas📁

File Fritzing

  • Sensor Jarak Waktu Terbang Adafruit VL6180X
    Bagian Fritzing untuk sensor jarak waktu terbang Adafruit VL6180X. Sensor ini mengukur jarak absolut hingga 100mm dan cahaya sekitar, berkomunikasi melalui I2C. Termasuk papan breakout sensor dan koneksi pin untuk digunakan dalam proyek Fritzing.
    Adafruit VL6180X Time of Flight Distance Sensor-1.fzpz 0.02 MB