Les 78: Vertoon afstand vanaf VL53L0X op LCD | Arduino Stap-vir-stap Kursus
Hierdie gids demonstreer hoe om 'n presiese laserafstandmeter te bou met behulp van die VL53L0X-tyd-van-vlug-sensor en 'n 16x2-LCD-skerm met 'n I2C-module. Hierdie projek is perfek vir makers wat akkurate, kontaklose afstandmeting by hul skeppings wil voeg. Die VL53L0X gebruik 'n laser om afstand te meet, wat dit ideaal maak vir toepassings waar ultrasoniese sensors dalk sukkel, soos om die vulvlak van 'n tenk te meet of die presiese posisie van 'n voorwerp op 'n vervoerband op te spoor.Hier is 'n paar praktiese maniere waarop jy hierdie projek kan gebruik:
- Outomatiese Troeteldiervoerder: Meet die kosvlak in 'n houer om 'n hervulling te aktiveer of 'n kennisgewing te stuur.
- Slim Vullisdrom: Bespeur hoe vol die drom is en waarsku jou wanneer dit leeggemaak moet word.
- Selfdoen-Hoogtemeter: Skep 'n presiese meetinstrument vir klein voorwerpe of om 'n kind se groei te volg.
- Parkeerassistent: Bou 'n sensorstelsel om te help met presiese parkering in 'n motorhuis of nou ruimte.
- Robotika: Gebruik dit in 'n robot om hindernisse te bespeur of die afstand na 'n muur te meet vir navigasie.
Hardeware Benodig
- Arduino-bord (bv. Uno)
- VL53L0X-laserafstandsensor
- LCD 1602-skerm met I2C-module
- Springdrade
Bedradingsgids
Die bedrading vir hierdie projek is eenvoudig, danksy die I2C-protokol, wat beide die LCD en die sensor in staat stel om oor dieselfde twee drade te kommunikeer. Die VL53L0X-sensor benodig 'n 5V-kragtoevoer, wat direk vanaf die Arduino se 5V-pen getrek word. Om te verseker dat die sensor 'n stabiele kragbron het, word 'n bykomende pen as 'n sekondêre VCC gebruik. (in video by 00:27)
Hier is die verbindingsdiagram:

Die verbindings is soos volg:
- VL53L0X VCC -> Arduino 5V en Pen 13 (Pen 13 word as 'n digitale uitset gestel om ekstra kragstabiliteit te verskaf).
- 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).
As jy 'n ander Arduino-model gebruik, kan die I2C-penne elders geleë wees. Die SDA- en SCL-penne word dikwels direk op die bord gemerk. (in video by 02:42)
Kodeverduideliking
Die kode is ontwerp om maklik te konfigureer. Die hoof gebruikerskonfigureerbare dele is heel bo aan die skets. (in video by 04:18)
Eerstens definieer ons 'n konstante vir die ekstra kragpen. Dit word gebruik om 'n skoon 5V-toevoer aan die sensor te verskaf.
const int vcc2 = 13; // Ekstra VCC-pen vir die VL53L0X-sensor
Vervolgens skep ons 'n instansie van die LCD-biblioteek en definieer sy I2C-adres. Jy kan hierdie adres vind deur 'n I2C-skandeerder-skets te laat loop, soos in die video gewys word. (in video by 03:26)
LiquidCrystal_I2C lcd(0x3F, 16, 2); // Stel die LCD-adres na 0x3F vir 'n 16-karakter en 2-lyn-skerm
Laastens is daar 'n veranderlike wat die meeteenheid beheer. Jy kan hierdie waarde verander om die afstand in óf millimeter óf sentimeter te vertoon.
const int type = 1; // Stel na 1 vir millimeter, 2 vir sentimeter
In die setup()-funksie word die ekstra VCC-pen as 'n uitset gekonfigureer en op HOOG gestel om krag aan die sensor te verskaf. Die LCD word dan geïnisialiseer.
Die hoof logika in die loop()-funksie lees die afstand van die sensor, maak die LCD skoon, en druk die waarde saam met die eenheid. Wanneer type op 2 gestel is, word die afstand van millimeter na 'n dryfwaardewaarde in sentimeter omgeskakel vir 'n meer presiese lesing. (in video by 06:47)
Lewende Projekdemonstrasie
In die demonstrasie word die sensor teen 'n liniaal getoets om sy akkuraatheid te verifieer. Die video wys dat die sensor baie presiese lesings verskaf, met slegs 'n paar millimeter se afwyking. (in video by 08:32)
Dit is belangrik om daarop te let dat die sensor 'n maksimum reikafstand van ongeveer 1.2 meter in deurlopende meetmodus het. Wanneer die teiken buite reikafstand is, sal die skerm 'n waarde van 8190 wys. (in video by 09:53)
Nog 'n belangrike waarneming is dat die sensor onakkurate lesings kan gee op hoogs reflektiewe oppervlaktes. Om dit na 'n glansende voorwerp te rig kan aansienlike foute veroorsaak, terwyl dit na 'n mat oppervlak gerig akkurate resultate lewer. (in video by 10:42)
Die kode is ook versoenbaar met verskillende VL53L0X-modulevariasies en groter LCD's, soos die 2004-model, sonder enige veranderinge aan die bedrading. (in video by 11:30)
Video-hoofstukke
- [00:05] Inleiding tot die VL53L0X- en LCD-projek
- [00:27] Bedradingsdiagram vir die VL53L0X en LCD
- [02:51] Gedetailleerde bedrading op 'n werklike Arduino-bord
- [03:26] Skandering vir die I2C-adresse
- [04:18] Kodeverduideliking en -konfigurasie
- [08:32] Lewendige demonstrasie van afstandsmeting
- [09:53] Toets van die sensor se reikwydte en beperkings
- [10:42] Akkuraatheid op verskillende oppervlaktes
- [11:30] Toets met 'n ander sensormodule en groter LCD
Beelde
/*
* 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);
}
Goedere wat jy dalk nodig het
-
AmazonPurchase VL53L0X from Amazonamzn.to
-
eBayPurchase VL53l0x from eBayebay.us
Hulpbronne en verwysings
-
BuitenburgArduino Library (GitHub)github.com
-
BuitenburgPurchase VL53l0x from eBayebay.us
-
BuitenburgVL53L0X datasheet (PDF)st.com
Lêers📁
Fritzing-lêer
-
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