Ders 78: VL53L0X'ten mesafeyi LCD'de göster | Arduino Adım Adım Kurs
Bu kılavuz, VL53L0X uçuş süresi sensörü ve I2C modüllü 16x2 LCD ekran kullanarak hassas bir lazer mesafe ölçer nasıl yapılacağını gösterir. Bu proje, yaratımlarına doğru ve temassız mesafe ölçümü eklemek isteyen maker'lar için idealdir. VL53L0X, mesafeyi ölçmek için lazer kullanır; bu da ultrasonik sensörlerin zorlanabileceği uygulamalar için idealdir; örneğin bir tankın doluluk seviyesini ölçmek veya bir konveyör bant üzerindeki bir nesnenin tam konumunu tespit etmek gibi.
Bu projeyi kullanabileceğiniz birkaç pratik yol şunlardır:
- Otomatik Evcil Hayvan Besleyici: Bir kaptaki mama seviyesini ölçerek yeniden doldurmayı tetikleyin veya bir bildirim gönderin.
- Akıllı Çöp Kutusu: Çöp kutusunun ne kadar dolu olduğunu tespit edin ve boşaltılması gerektiğinde sizi uyarın.
- Kendin Yap Boy Ölçer: Küçük nesneler için hassas bir ölçüm aleti oluşturun veya bir çocuğun büyümesini takip edin.
- Park Yardımcısı: Garajda veya dar bir alanda hassas park etmeye yardımcı olacak bir sensör sistemi kurun.
- Robotik: Bir robotta engelleri tespit etmek veya navigasyon için duvara olan mesafeyi ölçmek amacıyla kullanın.
Gerekli Donanım
- Arduino Kartı (örn. Uno)
- VL53L0X Lazer Mesafe Sensörü
- I2C Modüllü LCD 1602 Ekran
- Jumper Kablolar
Bağlantı Kılavuzu
Bu projenin bağlantısı, hem LCD'nin hem de sensörün aynı iki kablo üzerinden iletişim kurmasını sağlayan I2C protokolü sayesinde basittir. VL53L0X sensörü, doğrudan Arduino'nun 5V pininden çekilen 5V güç kaynağı gerektirir. Sensörün sabit bir güç kaynağına sahip olmasını sağlamak için ek bir pin ikincil VCC olarak kullanılır. (videoda 00:27'de)
İşte bağlantı şeması:

Bağlantılar şu şekildedir:
- VL53L0X VCC -> Arduino 5V ve Pin 13 (Pin 13, ek güç stabilitesi sağlamak için dijital çıkış olarak ayarlanır).
- 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).
Farklı bir Arduino modeli kullanıyorsanız, I2C pinleri başka bir yerde olabilir. SDA ve SCL pinleri genellikle kart üzerinde doğrudan etiketlenir. (videoda 02:42'de)
Kod Açıklaması
Kod, yapılandırması kolay olacak şekilde tasarlanmıştır. Kullanıcı tarafından yapılandırılabilir ana bölümler, taslağın en üstündedir. (videoda 04:18'de)
İlk olarak, ek güç pini için bir sabit tanımlarız. Bu, sensöre temiz bir 5V besleme sağlamak için kullanılır.
const int vcc2 = 13; // VL53L0X sensörü için ek VCC pini
Ardından, LCD kütüphanesinin bir örneğini oluşturur ve I2C adresini tanımlarız. Bu adresi, videoda gösterildiği gibi bir I2C tarayıcı taslağı çalıştırarak bulabilirsiniz. (videoda 03:26'da)
LiquidCrystal_I2C lcd(0x3F, 16, 2); // 16 karakter ve 2 satırlık ekran için LCD adresini 0x3F olarak ayarlayın
Son olarak, ölçüm birimini kontrol eden bir değişken vardır. Mesafeyi milimetre veya santimetre cinsinden görüntülemek için bu değeri değiştirebilirsiniz.
const int type = 1; // Milimetre için 1, santimetre için 2 olarak ayarlayın
setup() fonksiyonunda, ek VCC pini çıkış olarak yapılandırılır ve sensöre güç sağlamak için HIGH olarak ayarlanır. LCD daha sonra başlatılır.
loop() fonksiyonundaki ana mantık, sensörden mesafeyi okur, LCD'yi temizler ve değeri birimle birlikte yazdırır. type 2 olarak ayarlandığında, mesafe daha hassas bir okuma için milimetreden santimetre cinsinden bir ondalık değere dönüştürülür. (videoda 06:47'de)
Canlı Proje Gösterimi
Gösterimde, sensör doğruluğunu doğrulamak için bir cetvele karşı test edilir. Video, sensörün yalnızca birkaç milimetrelik sapma ile çok hassas okumalar sağladığını gösterir. (videoda 08:32'de)
Sensörün sürekli ölçüm modunda yaklaşık 1,2 metrelik maksimum bir menzile sahip olduğunu belirtmek önemlidir. Hedef menzil dışında olduğunda, ekran 8190 değerini gösterecektir. (videoda 09:53'te)
Bir diğer önemli gözlem, sensörün yüksek yansıtıcı yüzeylerde hatalı ölçümler verebilmesidir. Onu parlak bir nesneye doğrultmak önemli hatalara neden olabilirken, mat bir yüzeye doğrultmak doğru sonuçlar sağlar. (videoda 10:42'de)
Kod ayrıca farklı VL53L0X modül çeşitleri ve 2004 modeli gibi daha büyük LCD'lerle de kablolamada herhangi bir değişiklik yapılmadan uyumludur. (videoda 11:30'da)
Video Bölümleri
- [00:05] VL53L0X ve LCD projesine giriş
- [00:27] VL53L0X ve LCD için bağlantı şeması
- [02:51] Gerçek bir Arduino kartı üzerinde ayrıntılı bağlantı
- [03:26] I2C adreslerini tarama
- [04:18] Kod açıklaması ve yapılandırma
- [08:32] Mesafe ölçümünün canlı gösterimi
- [09:53] Sensörün menzilini ve sınırlamalarını test etme
- [10:42] Farklı yüzeylerde doğruluk
- [11:30] Farklı bir sensör modülü ve daha büyük LCD ile test etme
Görseller
/*
* 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);
}
İhtiyacın olabileceğini düşünüyor
-
AmazonPurchase VL53L0X from Amazonamzn.to
-
eBayPurchase VL53L0X from eBayebay.us
Kaynaklar ve referanslar
-
DışArduino Library (GitHub)github.com
-
DışPurchase VL53L0X from eBayebay.us
-
DışVL53L0X Datasheet (PDF)st.com
Dosyalar📁
Fritzing Dosyası
-
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