Kod Ara

Lazerle Mesafe Ölçümü VL53L0X 6-Pin Modülü ve LCD1602-I2C ile Arduino için

Lazerle Mesafe Ölçümü VL53L0X 6-Pin Modülü ve LCD1602-I2C ile Arduino için

Bu eğitimde, VL53L0X lazer sensörünü kullanarak mesafe ölçmeyi ve sonuçları I2C arayüzlü LCD1602 üzerinde görüntülemeyi öğreneceğiz. Bu proje, milimetre veya santimetre cinsinden hassas mesafe ölçümleri elde etmenizi sağlar ve Arduino tabanlı herhangi bir projeye çok yönlü bir katkı sunar. Bu eğitimin sonunda, kurulumu ve kullanımı kolay, tamamen işlevsel bir mesafe ölçüm sistemine sahip olacaksınız.

VL53L0X 200cm range sensor

Bunu başarmak için Arduino ile I2C üzerinden iletişim kuran VL53L0X lazer mesafe sensörünü kullanacağız. LCD1602 ekran, ölçülen mesafenin net bir görsel temsilini sağlayacaktır. Kodlama süreci hakkında netlik için lütfen videoya bakın (videoda 00:00'da).

Donanım Açıklaması

Bu yapıdaki ana bileşenler VL53L0X lazer mesafe sensörü ve LCD1602 ekrandır. VL53L0X, mesafeyi doğru bir şekilde ölçmek için lazer kullanır ve bu da onu robotik ve otomasyon dahil çeşitli uygulamalar için uygun hale getirir. Arduino ile kolay entegrasyon sağlayan I2C iletişimini kullanır.

LCD1602 ekran, iki satırda 16 karaktere kadar gösterebilen I2C destekli bir karakter ekranıdır. Geleneksel LCD'lere göre daha az pin gerektirdiğinden veri görüntüleme sürecini basitleştirir. Bu bileşenler birlikte güçlü ve kullanıcı dostu bir mesafe ölçüm sistemi oluşturur.

Veri Sayfası Detayları

ÜreticiSTMicroelectronics
Parça numarasıVL53L0X
Mantık/G/Ç voltajı1.8 V - 2.8 V
Besleme voltajı2.6 V - 3.5 V
Çıkış akımı (kanal başına)
Tepe akımı (kanal başına)
PWM frekans rehberi
Giriş mantık eşikleri
Voltaj düşümü / RDS(on) / doyum
Termal limitler
Paket
Notlar / varyantlar

  • Doğru besleme voltajını (2.6 V - 3.5 V) sağlayın.
  • Gerekirse SDA ve SCL hatlarına çekme dirençleri kullanın.
  • Hatalı okumaları önlemek için sensörü yansıtıcı yüzeylerden uzak tutun.
  • I2C adresini doğrulayın (VL53L0X için varsayılan 0x29'dur).
  • Yüksek sıcaklık ortamlarında kullanıyorsanız ısı dağılımını göz önünde bulundurun.

Bağlantı Talimatları

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

VL53L0X sensörünü ve LCD1602 ekranını bağlamak için güç ve toprak bağlantılarıyla başlayın. VL53L0X'in VCC pinini Arduino'daki 5V pinine ve GND pinini Arduino'nun toprağına bağlayın. LCD1602 için, VCC'sini aynı 5V'a ve GND'sini de toprağa bağlayın.

Ardından, I2C iletişim hatlarını bağlayın. VL53L0X'in SDA pini Arduino'daki A4 pinine, SCL pini ise A5'e bağlanmalıdır. XSHUT pini Arduino'daki D12'ye bağlanabilir, ancak bağlı bırakılabilir. LCD1602 için, SDA ve SCL'nin de VL53L0X sensörüyle aynı pinlere bağlı olduğundan emin olun.

Kod Örnekleri ve Açıklama

VL53L0X sensor;

#include 
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(9600);
  Wire.begin();
  sensor.init();
  sensor.setTimeout(500);
  sensor.startContinuous();
  lcd.begin();
  lcd.backlight(); 
}

Kurulum fonksiyonunda, seri iletişimi ve I2C veriyolunu başlatıyoruz. sensor.init() VL53L0X sensörünü başlatırken, lcd.begin() LCD ekranı başlatır. Ekranın arka ışığı açılır ve kolay görünürlük sağlar.

void loop() {
  int distance = sensor.readRangeContinuousMillimeters();
  Serial.print("Distance: ");
  lcd.clear();
  lcd.print("Robojax VL53L0X");
  lcd.setCursor(0,1); 
  lcd.print("Dist.: ");
  lcd.setCursor(7,1); 
  lcd.print(distance); 
  Serial.println();
  delay(100);
}

Döngü içinde, sensor.readRangeContinuousMillimeters() kullanarak sürekli olarak mesafeyi okuyor ve seri monitöre yazdırıyoruz. LCD, mesafe ölçümüyle güncellenir ve gerçek zamanlı geri bildirim sağlar. 100 milisaniyelik gecikme, okumaların çok sık güncellenmemesini sağlayarak kolay okuma imkanı sunar.

Gösterim / Beklentiler

Güç açıldığında, sistem sürekli olarak mesafeyi ölçecek ve sonuçları LCD üzerinde gösterecektir. Nesneleri sensöre yaklaştırdıkça veya uzaklaştırdıkça mesafe değerlerinin değiştiğini göreceksiniz. Sensörle ilgili zaman aşımı hataları gibi herhangi bir sorun olursa, seri monitöre uygun mesajlar yazdırılacaktır (videoda 03:15'te).

Görseller

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
113-Measure distance with a laser VL53L0X 6-pin module and an LCD1602-I2C for Arduino
Dil: C++
/* 

This is Arduino code to measure distance with VL53L0X and display it on LCD1602 with I2C module.
Distance is displayed in mm (millimeter) or cm (centimeter).

Original Laser Sensor source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: Jun 28, 2018 at 19:06 in Ajax, Ontario, Canada

Watch the video instruction for this code: https://youtu.be/t14ly7Y09oI
You can get this code from RoboJax.com.
Pin connection

VL53L0X Pin  Arduino Pin
VCC         5V
GND         GND
SDA         A4 or SDA if available
SCL         A5 or SCL if available
GPIO1       leave it unconnected
XSHUT       D12 (digital 12 or pin 12)

LCD1602 Pin

*/


#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor;


#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

const int type = 1;// 1=mm , 2= cm
String unit;// variable for unit, mm or cm
void setup()
{

  Serial.begin(9600);
  Wire.begin();

  sensor.init();
  sensor.setTimeout(500);

  // Start continuous back-to-back mode (take readings as
  // fast as possible).  To use continuous timed mode
  // instead, provide a desired inter-measurement period in
  // ms (e.g. sensor.startContinuous(100)).
  sensor.startContinuous();
  
  // initialize the LCD, 
  lcd.begin();
  // Turn on the blacklight and print a message.
  lcd.backlight(); 
}

void loop()
{
  int distance =sensor.readRangeContinuousMillimeters();
  //int distance =sensor.startContinuous(100);

 //distance = distance;
  Serial.print("Distance: ");

  //start of loop Robojax code for LCD with I2C
  lcd.clear();
  lcd.print("Robojax VL53L0X");
  lcd.setCursor (0,1); // go to start of 2nd line
  lcd.print("Dist.: ");
  lcd.setCursor (7,1); // go to start of 2nd line
  if(type ==2){
    float distanceCM = (float) (distance/10.0);
      unit ="cm";
      lcd.print(distanceCM);
      Serial.print(distanceCM);
      Serial.print(unit);      
    }else{
    unit ="mm";
      lcd.print(distance);
      Serial.print(distance);
      Serial.print(unit);       
    }  

  lcd.print(unit);    
  
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

  Serial.println();
  delay(100);
}

İhtiyacın olabileceğini düşünüyor

Kaynaklar ve referanslar

Dosyalar📁

Fritzing Dosyası

Diğer dosyalar