Kod Ara

Lazerle Mesafe Ölçümü VL53L0X 6-Pin Modülü ve Arduino için TM1637 Ekranı

Lazerle Mesafe Ölçümü VL53L0X 6-Pin Modülü ve Arduino için TM1637 Ekranı


Bu eğitimde, VL53L0X lazer mesafe sensörünü kullanarak mesafe ölçmeyi ve ölçümleri bir TM1637 7 segmentli ekranda görüntülemeyi öğreneceğiz. Bu proje, basit ama etkili bir mesafe ölçüm aracı oluşturmak için her iki bileşeni birleştirir. VL53L0X, doğru mesafe ölçümleri sağlamak için lazer teknolojisini kullanırken, TM1637 ekran bu ölçümleri kullanıcı dostu bir biçimde gösterir.

VL53L0X 200cm range sensor
TM1637 4 digit display module

Gerekli donanım, bağlantı talimatları ve her şeyi çalıştırmak için gereken kodu inceleyeceğiz. Bu eğitimin sonunda, çeşitli uygulamalarda kullanılabilecek çalışan bir mesafe ölçüm cihazına sahip olacaksınız. Görsel bir rehber için videoyu (videoda 00:00'da) kontrol ettiğinizden emin olun.

Donanım Açıklaması

Bu projenin ana bileşenleri VL53L0X lazer mesafe sensörü ve TM1637 ekran modülüdür. VL53L0X, bir lazer ışını yayarak ve yansımanın geri dönmesi için geçen süreyi hesaplayarak bir nesneye olan mesafeyi ölçen bir uçuş süresi sensörüdür. 2.6V ile 3.5V arasında bir voltaj aralığında çalışır, ancak entegre voltaj regülatörü sayesinde 5V ile de çalışabilir.

TM1637, 7 segmentli bir LED ekranı kontrol eden bir ekran sürücüsüdür. Basit bir 2 telli arayüz (CLK ve DIO) üzerinden iletişim kurar ve bu da Arduino'ya bağlamayı kolaylaştırır. Ekran sayısal değerleri gösterebilir ve VL53L0X sensöründen gelen mesafe ölçümlerini görselleştirmek için mükemmeldir.

Veri Sayfası Detayları

ÜreticiSTMicroelectronics
Parça numarasıVL53L0X
Mantık/G/Ç voltajı2.6 V - 3.5 V
Besleme voltajı2.6 V - 5 V
Çalışma sıcaklığı-20 °C ila 70 °C
Ölçüm aralığı30 mm ila 2000 mm
I2C frekansı400 kHz
Zaman aşımı ayarı500 ms
Paket6 pinli modül

  • Doğru güç kaynağını sağlayın (5V kabul edilebilir).
  • Kaçak akımı önlemek için XSHUT pinini bir pull-up direnciyle bağlayın.
  • İletişim için I2C kullanın; SDA ve SCL'yi uygun şekilde bağlayın.
  • Beklenmeyen davranışları önlemek için kodda zaman aşımlarını ele alın.
  • Doğruluk için çalışma sıcaklığı aralığına dikkat edin.

Bağlantı Talimatları

Arduino wiring for VL53L0X with TM1637 4 digit dispaly
Arduino wiring for VL53L0X with TM1637 4 digit dispaly

VL53L0X ve TM1637 ekranını bağlamak için, VL53L0X'in VCC pinini Arduino'daki 5V pinine ve GND pinini Arduino'daki bir toprak pinine bağlayarak başlayın. Ardından, VL53L0X'in SDA pinini Arduino'daki A4 pinine bağlayın; bu pin genellikle I2C veri iletişimi için kullanılır. SCL pini, saat sinyali için kullanılan Arduino'daki A5 pinine bağlanmalıdır.

TM1637 ekranı için, CLK pinini Arduino'daki dijital pin 2'ye ve DIO pinini dijital pin 3'e bağlayın. Son olarak, VL53L0X'in XSHUT pinini Arduino'daki dijital pin 12'ye bağlayın. VL53L0X üzerindeki GPIO1 gibi kullanılmayan pinlerin bağlı bırakıldığından emin olun. Bu kurulum, Arduino'nun hem sensörle hem de ekranla etkili bir şekilde iletişim kurmasını sağlayacaktır.

Kod Örnekleri ve Açıklaması

Kod, sensörü ve ekranı başlatır, I2C iletişimini kurar ve sürekli olarak mesafe ölçümlerini okur. Aşağıda, pinlerin yapılandırıldığı ve sensörün başlatıldığı kurulum fonksiyonunu gösteren bir parça bulunmaktadır:

void setup() {
  pinMode(12, INPUT_PULLUP); // pin 12'yi giriş olarak ayarla
  digitalWrite(12, HIGH); // pin 12'yi yüksek yap (5V)
  Serial.begin(9600);
  Wire.begin(); // I2C iletişimi başlatıldı
  sensor.init(); // mesafe sensörü başlatıldı
  sensor.setTimeout(500); // zaman aşımı ayarlandı
  sensor.startContinuous(); // ölçüm türü ayarlandı
}

Bu kurulum fonksiyonunda, XSHUT pini pull-up dirençli bir giriş olarak yapılandırılır ve sensör sürekli aralık ölçümü için başlatılır. Seri monitör de mesafe ölçümlerini görüntülemek için ayarlanır.

Ardından, ana döngü mesafeyi okur ve ekranı günceller. İşte döngü fonksiyonundan odaklanmış bir alıntı:

void loop() {
  int distance = sensor.readRangeContinuousMillimeters(); // mesafeyi mm cinsinden oku
  display.setSegments(clearLED); // LED ekrandan önceki değeri kaldır
  display.showNumberDec(distance, false, 4, 0); // mesafeyi görüntüle
  Serial.print("Distance: ");
  Serial.print(distance); // mesafeyi seri monitörde yazdır
}

Bu döngü, sensörden sürekli olarak mesafeyi okur ve TM1637 ekranını en son ölçümle günceller. Ayrıca hata ayıklama amacıyla mesafeyi seri monitöre yazdırır. Tam kodu görmek isterseniz, makalenin altında yüklenecektir.

Gösterim / Beklentiler

Kurulumu tamamlayıp kodu yükledikten sonra, VL53L0X tarafından ölçülen mesafenin TM1637 üzerinde görüntülendiğini görmelisiniz. Bir nesneyi sensöre yaklaştırdıkça veya uzaklaştırdıkça, görüntülenen değer buna göre değişecektir. Beklenmeyen ölçümlerle karşılaşırsanız, sensörün engelsiz olduğundan ve nesnenin yüzeyinin lazer yansıması için uygun olduğundan emin olun (videoda 09:30'da).

Yaygın hatalar arasında ters bağlantı veya sensörün düzgün başlatılmaması yer alır; bu da zaman aşımı hatalarına yol açabilir. Doğru pinlerin bağlı olduğundan ve sensörün doğru mesafe ölçümleri için yeterince güç aldığından emin olun.

Görseller

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
TM1637 4 digit display module
TM1637 4 digit display module
Arduino wiring for VL53L0X with TM1637 4 digit dispaly
Arduino wiring for VL53L0X with TM1637 4 digit dispaly
104-Measure distance with a Laser VL53L0X 6-pin module and a TM1637 LED display for Arduino
Dil: C++
/* This example shows how to use continuous mode to take readings.

This is Arduino code to measure distance with VL53L0X and display it on a TM1637 LED 7-segment display.

Original Laser Sensor source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: May 31, 2018 at 19:25 in Ajax, Ontario, Canada
You have to watch 1 video before using this code:
1- Watch VL53L0X video and get code https://youtu.be/1n9eJ9HaYpE
2- Watch TM1637 video and get code https://robojax.com?vid=robojax-TM1637
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)
*/


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

VL53L0X sensor;

/////// start of TM1637 Display
#include <Arduino.h>
#include <TM1637Display.h> 
#define CLK 2
#define DIO 3
#define TEST_DELAY   500
TM1637Display display(CLK, DIO);
uint8_t clearLED[] = { 0x0, 0x0, 0x0, 0x0 }; // value for clearing the LEDs
////// End of TM1637 Display 


void setup()
{
  pinMode(12,INPUT_PULLUP);// set pin 12 for input
  digitalWrite(12,HIGH);// set pin 12 high (5V)
  Serial.begin(9600);
  Wire.begin();// I2C communication initialized

  sensor.init();// distance sensor is initialized
  sensor.setTimeout(500); // time out is set

  // 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();// type of measurement is set
    Serial.println("VL53L0X with MAX6675 test");
    delay(500);
    display.setBrightness(0x0f);// set brightness for display
}

void loop()
{
  int distance =sensor.readRangeContinuousMillimeters();// read the distance in mm
  display.setSegments(clearLED);// remove previous value from LED display
  display.showNumberDec(distance, false, 4, 0);// display the distance

  
 //distance = distance;
  Serial.print("Distance: ");
  Serial.print(distance);// print distance on serial monitor
  Serial.print("mm");
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

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

Kaynaklar ve referanslar

Henüz kaynak yok.

Dosyalar📁

Veri Sayfası (pdf)

Fritzing Dosyası

Kullanım Kılavuzu

Diğer dosyalar