Lekcija 78: Prikaz udaljenosti sa VL53L0X na LCD | Arduino Korak po korak kurs
Ovaj vodič pokazuje kako napraviti precizan laserski mjerač udaljenosti koristeći VL53L0X senzor vremena leta i 16x2 LCD ekran sa I2C modulom. Ovaj projekat je savršen za makere koji žele dodati precizno, beskontaktno mjerenje udaljenosti svojim kreacijama. VL53L0X koristi laser za mjerenje udaljenosti, što ga čini idealnim za aplikacije gdje ultrazvučni senzori mogu imati poteškoća, kao što je mjerenje nivoa napunjenosti rezervoara ili detekcija tačne pozicije objekta na pokretnoj traci.
Evo nekoliko praktičnih načina na koje možete koristiti ovaj projekat:
- Automatizovana hranilica za kućne ljubimce: Izmjerite nivo hrane u posudi da biste pokrenuli dopunjavanje ili poslali obavijest.
- Pametna kanta za smeće: Detektujte koliko je kanta puna i upozorite vas kada je treba isprazniti.
- DIY mjerač visine: Napravite precizan mjerni alat za male predmete ili za praćenje rasta djeteta.
- Asistent za parkiranje: Napravite senzorski sistem koji pomaže pri preciznom parkiranju u garaži ili uskom prostoru.
- Robotika: Koristite ga u robotu za detekciju prepreka ili mjerenje udaljenosti do zida za navigaciju.
Potreban hardver
- Arduino ploča (npr. Uno)
- VL53L0X laserski senzor udaljenosti
- LCD 1602 ekran sa I2C modulom
- Konektorski kablovi
Vodič za povezivanje
Povezivanje za ovaj projekat je jednostavno, zahvaljujući I2C protokolu, koji omogućava i LCD-u i senzoru da komuniciraju preko iste dvije žice. VL53L0X senzor zahtijeva napajanje od 5V, koje se uzima direktno sa Arduino 5V pina. Da bi se osiguralo da senzor ima stabilan izvor napajanja, dodatni pin se koristi kao sekundarni VCC. (u videu na 00:27)
Ovdje je dijagram povezivanja:

Veze su sljedeće:
- VL53L0X VCC -> Arduino 5V i Pin 13 (Pin 13 je postavljen kao digitalni izlaz za dodatnu stabilnost napajanja).
- 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).
Ako koristite drugačiji Arduino model, I2C pinovi mogu biti na drugom mjestu. SDA i SCL pinovi su često označeni direktno na ploči. (u videu na 02:42)
Objašnjenje koda
Kod je dizajniran da bude jednostavan za konfigurisanje. Glavni dijelovi koje korisnik može podešavati su na samom vrhu skice. (u videu na 04:18)
Prvo, definišemo konstantu za dodatni pin napajanja. Ovo se koristi za osiguravanje čistog napajanja od 5V za senzor.
const int vcc2 = 13; // Dodatni VCC pin za VL53L0X senzor
Zatim, kreiramo instancu LCD biblioteke i definišemo njenu I2C adresu. Ovu adresu možete pronaći pokretanjem I2C skener skice, kao što je prikazano u videu. (u videu na 03:26)
LiquidCrystal_I2C lcd(0x3F, 16, 2); // Postavite LCD adresu na 0x3F za ekran od 16 znakova i 2 linije
Konačno, postoji varijabla koja kontroliše jedinicu mjere. Možete promijeniti ovu vrijednost da biste prikazali udaljenost u milimetrima ili centimetrima.
const int type = 1; // Postavite na 1 za milimetre, 2 za centimetre
U setup() funkciji, dodatni VCC pin je konfigurisan kao izlaz i postavljen na HIGH da bi se osiguralo napajanje senzora. LCD se zatim inicijalizuje.
Glavna logika u loop() funkciji čita udaljenost sa senzora, čisti LCD i ispisuje vrijednost zajedno sa jedinicom. Kada je type postavljen na 2, udaljenost se pretvara iz milimetara u float vrijednost u centimetrima radi preciznijeg očitavanja. (u videu na 06:47)
Demonstracija projekta uživo
U demonstraciji, senzor se testira protiv ravnala kako bi se provjerila njegova tačnost. Video prikazuje da senzor pruža vrlo precizna očitavanja, sa samo nekoliko milimetara odstupanja. (u videu na 08:32)
Važno je napomenuti da senzor ima maksimalni domet od oko 1,2 metra u režimu kontinuiranog mjerenja. Kada je cilj van dometa, ekran će prikazati vrijednost 8190. (u videu na 09:53)
Još jedno ključno zapažanje je da senzor može dati netačna očitanja na visoko reflektivnim površinama. Usmjeravanje na sjajni predmet može uzrokovati značajne greške, dok usmjeravanje na mat površinu daje tačne rezultate. (u videu na 10:42)
Kod je također kompatibilan s različitim varijantama VL53L0X modula i većim LCD ekranima, poput modela 2004, bez ikakvih izmjena na ožičenju. (u videu na 11:30)
Poglavlja videa
- [00:05] Uvod u VL53L0X i LCD projekat
- [00:27] Šema ožičenja za VL53L0X i LCD
- [02:51] Detaljno ožičenje na stvarnoj Arduino ploči
- [03:26] Skeniranje I2C adresa
- [04:18] Objašnjenje koda i konfiguracija
- [08:32] Živa demonstracija mjerenja udaljenosti
- [09:53] Testiranje dometa i ograničenja senzora
- [10:42] Tačnost na različitim površinama
- [11:30] Testiranje s drugim senzorskim modulom i većim LCD ekranom
Images
/*
* 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);
}
Things you might need
-
AmazonPurchase VL53L0X from Amazonamzn.to
-
eBayPurchase VL53l0x from eBayebay.us
Resources & references
-
ExternalArduino Library (GitHub)github.com
-
ExternalPurchase VL53l0x from eBayebay.us
-
ExternalVL53L0X datasheet (PDF)st.com
Files📁
Fritzing File
-
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