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


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.
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)
Berikut adalah diagram koneksi:

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
/*
* 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
-
AmazonPurchase VL53L0X from Amazonamzn.to
-
eBayPurchase VL53L0X from eBayebay.us
Sumber daya & referensi
-
EksternalArduino Library (GitHub)github.com
-
EksternalPurchase VL53L0X from eBayebay.us
-
EksternalVL53L0X Datasheet (PDF)st.com
Berkas📁
File Fritzing
-
Sensor Jarak Waktu Terbang Adafruit VL6180XBagian 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.fzpz0.02 MB