قياس المسافة باستخدام وحدة ليزر VL53L0X ذات 6 دبابيس وشاشة TM1637 للأردوينو
في هذا الدرس سنتعلم كيفية قياس المسافة باستخدام حساس المسافة بالليزر VL53L0X وعرض القراءات على شاشة TM1637 ذات 7 مقاطع. يجمع هذا المشروع بين المكونين لإنشاء أداة بسيطة وفعّالة لقياس المسافة. يستخدم VL53L0X تقنية الليزر لتقديم قراءات مسافة دقيقة، بينما تعرض شاشة TM1637 هذه القراءات بطريقة سهلة الاستخدام.


سنستعرض الأجهزة المطلوبة، وتعليمات التوصيل، والكود اللازم لتشغيل كل شيء. بنهاية هذا الدرس التعليمي، سيكون لديك جهاز قياس مسافة يعمل ويمكن استخدامه في تطبيقات متنوعة. للدليل المرئي، تأكد من مشاهدة الفيديو عند (في الفيديو عند 00:00).
شرح الأجهزة
المكونات الأساسية لهذا المشروع هي مستشعر المسافة بالليزر VL53L0X ووحدة العرض TM1637. يعد VL53L0X مستشعرًا من نوع وقت الرحلة يقيس المسافة إلى جسم عن طريق إصدار شعاع ليزر وحساب الوقت الذي يستغرقه ارتداد الشعاع للعودة. يعمل ضمن نطاق جهد من 2.6V إلى 3.5V ولكنه يمكنه أيضًا العمل بجهد 5V بفضل منظم جهد مدمج.
TM1637 هو متحكم عرض يتحكم في شاشة LED ذات 7 مقاطع. يتواصل عبر واجهة بسيطة بسلكين (CLK و DIO)، مما يجعل من السهل توصيله بأردوينو. يمكن للشاشة عرض قيم رقمية وهي مثالية لعرض قياسات المسافة من مستشعر VL53L0X.
تفاصيل ورقة البيانات
| المصنِّع | إس تي مايكروإلكترونيكس |
|---|---|
| رقم القطعة | VL53L0X |
| جهد المنطق/الإدخال والإخراج | 2.6 فولت - 3.5 فولت |
| جهد التغذية | 2.6 فولت - 5 فولت |
| درجة حرارة التشغيل | -20 °C إلى 70 °C |
| نطاق القياس | 30 مم إلى 2000 مم |
| تردد I2C | 400 كيلوهرتز |
| إعداد المهلة | 500 مللي ثانية |
| حزمة | وحدة ذات 6 دبابيس |
- تأكد من توفّر مصدر طاقة مناسب (5 فولت مقبول).
- قم بتوصيل دبوس XSHUT بمقاوم سحب للأعلى لتجنب تسرب التيار
- استخدم I2C للاتصال؛ قم بتوصيل SDA وSCL بشكل مناسب.
- تعامل مع حالات انتهاء المهلة في الكود لتجنب السلوك غير المتوقع
- كن حريصًا على نطاق درجات حرارة التشغيل لضمان الدقة.
تعليمات الأسلاك

لتوصيل VL53L0X وشاشة TM1637، ابدأ بتوصيل دبوس VCC في VL53L0X بدبوس 5V في الأردوينو وتوصيل دبوس GND بدبوس الأرضي في الأردوينو. بعد ذلك، وصل دبوس SDA في VL53L0X بدبوس A4 في الأردوينو، والذي يُستخدم عادةً لبيانات بروتوكول I2C. ويجب توصيل دبوس SCL بدبوس A5 في الأردوينو المستخدم لإشارة الساعة.
بالنسبة لشاشة TM1637، قم بتوصيل دبوس CLK بالدبوس الرقمي 2 على لوحة الأردوينو ودبوس DIO بالدبوس الرقمي 3. أخيراً، قم بتوصيل دبوس XSHUT في مستشعر VL53L0X بالدبوس الرقمي 12 على لوحة الأردوينو. تأكد من ترك أي دبابيس غير مستخدمة، مثل GPIO1 على VL53L0X، غير متصلة. ستمكنك هذه الإعدادات من جعل الأردوينو يتواصل بفعالية مع كل من المستشعر والشاشة.
أمثلة على الكود وشرح خطوة بخطوة
يقوم الكود بتهيئة المستشعر والشاشة، ويعد اتصال I2C، ويقرأ قياسات المسافة باستمرار. فيما يلي مقتطف يوضح دالة الإعداد حيث تُكوَّن الأطراف وتُهيَّأ المستشعر:
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
sensor.startContinuous(); // type of measurement is set
}في دالة الإعداد هذه، يُضبط دبوس XSHUT كمدخل مع مقاومة سحب لأعلى، ويتم تهيئة المستشعر لقياس المدى بشكل مستمر. كما يتم إعداد المراقب التسلسلي لعرض قراءات المسافة.
بعد ذلك، تقوم الحلقة الرئيسية بقراءة المسافة وتحديث الشاشة. فيما يلي مقتطف مُركَّز من دالة الحلقة:
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
Serial.print("Distance: ");
Serial.print(distance); // print distance on serial monitor
}تقوم هذه الحلقة بقراءة المسافة من المستشعر بشكل مستمر وتحديث شاشة TM1637 بأحدث قياس. كما تطبع المسافة على المراقب التسلسلي لأغراض تصحيح الأخطاء. إذا كنت تريد رؤية الكود الكامل، فسيُحمّل أسفل المقال.
عرض توضيحي / ما الذي تتوقعه
عند إكمال الإعداد ورفع الكود، يجب أن ترى المسافة المقاسة بواسطة VL53L0X معروضة على TM1637. عند تحريك جسم أقرب أو أبعد من المستشعر، ستتغير القيمة المعروضة وفقًا لذلك. إذا واجهت قراءات غير متوقعة، فتأكد من أن المستشعر غير محجوب وأن سطح الجسم مناسب لانعكاس الليزر (في الفيديو عند 09:30).
تشمل الأخطاء الشائعة توصيل الأسلاك بشكل معكوس أو عدم تهيئة المستشعر بشكل صحيح، مما قد يؤدي إلى أخطاء نفاد المهلة. تأكد من توصيل الدبابيس الصحيحة وأن المستشعر مزود بالطاقة بشكل كافٍ لضمان دقة قياسات المسافة.
/* 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);
}
الموارد والمراجع
لا توجد موارد حتى الآن.
ملفات📁
ورقة البيانات (pdf)
-
نشرة البيانات لعرض 4 أرقام سبعة segmentos TM1637
/download/datasheet/robojax_TM1637_datasheet.pdf0.67 MB
Fritzing File
-
نموذج سبعةSegments TM1637
TM1637.fzpz0.01 MB -
شاشة سبعة أجزاء رباعية الأرقام TM1637
TM1637-1.fzpz0.01 MB
دليل المستخدم
-
دليل عرض TM1637
robojax-TM1637_display_manual.pdf0.31 MB
ملفات أخرى
-
مستشعر المسافة VL53L0X_بنفسجي
VL53L0X_Distance_sensor_purple.fzpz0.01 MB