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.


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ı
| Üretici | STMicroelectronics |
|---|---|
| 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 |
| Paket | 6 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ı

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.
/* 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)
-
TM1637 Veri Sayfası
/download/datasheet/robojax_TM1637_datasheet.pdf0.67 MB
Fritzing Dosyası
-
TM1637 Seven Segment module
TM1637.fzpz0.01 MB -
TM1637 4 digit seven segment display
TM1637-1.fzpz0.01 MB -
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
Kullanım Kılavuzu
-
TM1637 Ekran Kılavuzu
robojax-TM1637_display_manual.pdf0.31 MB
Diğer dosyalar
-
Polou VL53L0X kütüphanesi
robojax-VL53L0X-polou-arduino-master.zip0.02 MB -
VL53L0X_Distance_sensor_purple
VL53L0X_Distance_sensor_purple.fzpz0.01 MB