كود البحث

استخدام مستشعر المسافة بالليزر VL53L1X لقياس المسافات حتى 4 أمتار

استخدام مستشعر المسافة بالليزر VL53L1X لقياس المسافات حتى 4 أمتار

يعد مستشعر المسافة بالليزر VL53L1X من نوع قابل للقياس عن طريق الزمن، حيث يمكنه قياس المسافات تصل إلى 4 أمتار بدقة عالية. يتواصل هذا المستشعر عبر I2C وهو متعدد الاستخدامات لمجموعة متنوعة من التطبيقات، مثل الروبوتات والأتمتة. في هذا الدليل، سوف نستكشف كيفية إعداد مستشعر VL53L1X مع أردوينو وقراءة قيم المسافة بفعالية.

وحدة VL53L1X

يتم تشغيل المستشعر إما بجهد 3.3 فولت أو 5 فولت، ويحتوي على عدة دبابيس للتواصل عبر I2C، بما في ذلك SDA و SCL. يمكن للمستشعر قياس المسافات بتردد 50 هرتز، مما يسمح بقراءات مسافات سريعة. ستوجهك هذه الدورة التعليمية خلال عملية التوصيل والكود الضروري لتشغيل المستشعر بسلاسة. للمزيد من التوضيح، يمكنك متابعة الفيديو (في الفيديو في 00:00).

تم تفسير الأجهزة

المكون الرئيسي في هذا المشروع هو حساس المسافة بالليزر VL53L1X، والذي يستخدم تقنية تعرف باسم "توقيت الرحلة" (ToF) لقياس المسافات. وهذا يعني أنه يحسب المسافة إلى جسم عن طريق توقيت المدة التي تستغرقها نبضة الليزر للعودة بعد أن تصطدم بجسم. يتميز الحساس بتواصل I2C، مما يسمح بتكامل سهل مع المتحكمات الدقيقة مثل Arduino. بالإضافة إلى الحساس، ستحتاج إلى لوحة Arduino للمعالجة. ستقوم Arduino بإدارة التواصل مع VL53L1X وعرض المسافات المقاسة. الإعداد بسيط، حيث يمكن تزويد الحساس بالطاقة مباشرة من دبابيس الخروج الخاصة بـ Arduino.

تفاصيل ورقة البيانات

الصانع STMicroelectronics
رقم الجزء VL53L1X
جهد المنطق/إدخال/إخراج 3.3 - 5 فولت
جهد الإمداد ٢.٦ - ٥.٥ ف
التيار الناتج (لكل قناة) غير قابل للتطبيق
التيار الذروي (لكل قناة) غير قابل للتطبيق
توجيه تردد PWM غير قابل للتطبيق
عتبات المنطق المدخل 0.3 × VCC (منخفض)، 0.7 × VCC (مرتفع)
انخفاض الجهد / Rغير قابل للترجمة/ التشبع غير قابل للتطبيق
الحدود الحرارية 0 إلى 85 درجة مئوية
طرد ٤.٩ × ٢.٥ × ١.٦ مم
ملاحظات / متغيرات مستشعر زمن السفر لمسافات طويلة

  • قم بتزويد المستشعر بالطاقة بجهد 3.3 فولت أو 5 فولت حسب الحاجة.
  • استخدم دبابيس I2C، SDA و SCL، للتواصل.
  • ضبط وضع المسافة وفقًا لاحتياجاتك (قصير، متوسط، طويل).
  • تأكد من أن المستشعر مضبوط لقراءات المسافة الدقيقة.
  • تعامل مع ظروف الضوء المحيط بحذر لأنها يمكن أن تؤثر على القياسات.

تعليمات التوصيل

VL53L1X_wiring

لتوصيل مستشعر VL53L1X بلوحة اردوينو، قم بتوصيل دبوس VCC من المستشعر بدبوس 5V على لوحة اردوينو باستخدام سلك أحمر. قم بتوصيل دبوس الأرضي (GND) من المستشعر بدبوس GND الخاص باللوحة باستخدام سلك بني. بالنسبة للتواصل عبر I2C، قم بتوصيل دبوس SDA من المستشعر بالدبوس A4 على لوحة اردوينو باستخدام سلك أصفر، ودبوس SCL بالدبوس A5 باستخدام سلك أخضر. إذا كنت ترغب في استخدام الدبابيس الاختيارية للتوقف والتحكم، قم بتوصيل دبوس الإيقاف بالدبوس الرقمي 2 ودبوس المقاطعة بالدبوس الرقمي 3، ولكن هذه الخيارات ليست ضرورية للتشغيل الأساسي.

أمثلة الشفرة وشرحها

في الكود، نقوم أولاً بإضافة المكتبات الضرورية وتعريف الأرجل للحساس. نقوم بإنشاء نسخة من الحساس من خلال السطر:

SFEVL53L1X distanceSensor;

يقوم هذا السطر بتهيئة المستشعر، مما يسمح لنا باستدعاء طرقه لاحقًا في البرنامج. بعد ذلك، نقوم بإعداد اتصال I2C وتهيئة المستشعر:

void setup(void)
{
  Wire.begin();
  Serial.begin(9600);
  Serial.println("VL53L1X Qwiic Test");

  if (distanceSensor.begin() == 0) //Begin returns 0 on a good init
  {
    Serial.println("Sensor online!");
  }
}

في هذا المقتطف، نبدأ الاتصال I2C معWire.begin()وتحقق مما إذا كان المستشعر قد تم تهيئته بنجاح. وأخيراً، لقراءة المسافة، نستخدم الكود التالي في الحلقة:

void loop(void)
{
  int distance = distanceSensor.getDistance(); // Get distance
  Serial.print("Distance: ");
  Serial.println(distance);
}

يقوم هذا الكود باسترجاع قياس المسافة ويطبعها على الشاشة التسلسلية. الحلقة تقرأ المسافة باستمرار، مما يسمح بالتحديثات في الوقت الفعلي. للحصول على مثال كامل على الكود، يرجى الرجوع إلى الكود الكامل المحمّل أدناه المقال.

عرض / ما يمكن توقعه

عندما يتم إعداد المستشعر بشكل صحيح، يمكنك أن تتوقع أن يوفر قياسات دقيقة للمسافات تصل إلى 4 أمتار. قد تلاحظ تقلبات طفيفة في القراءات، خاصة في ظروف الإضاءة المتغيرة (في الفيديو عند 10:30). من الضروري التأكد من أن المستشعر نظيف وغير محجوب للحصول على نتائج دقيقة. إذا واجهت أي قراءات غير عادية، تحقق من أن المستشعر موصول بشكل صحيح وأن اتصالات I2C securely. قد تتأثر أداء المستشعر بالبيئة، خاصة في الضوء الساطع أو الأسطح العاكسة.

طوابق الفيديو

  • 00:00 بدء
  • 00:40 المقدمة
  • 03:42 تم زيارة ورقة البيانات
  • 06:48 تثبيت دبابيس الجنود
  • 08:22 شرح الأسلاك
  • 09:06 شرح الكود
  • 11:53 عرض
  • 16:03 عرض في الظلام التام

الصور

VL53L1X Distance Sensor
VL53L1X Distance Sensor
VL53L1X_module
VL53L1X_module
VL53L1X_wiring
VL53L1X_wiring
259-code example using the VL53L1X Laser Range Sensor
اللغة: C++
/*

 * This is a code example using the VL53L1X Laser Range Sensor from STMicroelectronics
 * Using a library from SparkFun (see below)
 * 
 * Watch a video instruction for this code: https://youtu.be/Sc_iVfeocvg
 * A wiring diagram is available at https://robojax.com/RJT232


 * Updated by Ahmad Shamshiri on November 4, 2019
 * in Ajax, Ontario, Canada. www.robojax.com
 * 

 * Get this code and other Arduino codes from Robojax.com.
Learn Arduino step by step in a structured course with all materials, wiring diagrams and libraries
all in one place. 

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

 * 
 * https://www.st.com/content/ccc/resource/technical/document/user_manual/group0/98/0d/38/38/5d/84/49/1f/DM00474730/files/DM00474730.pdf/jcr:content/translations/en.DM00474730.pdf
 * https://www.st.com/resource/en/datasheet/vl53l1x.pdf
 * 
  Reading distance from the laser-based VL53L1X
  By: Nathan Seidle
  Revised by: Andy England
  SparkFun Electronics
  Date: April 4th, 2018
  License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).

  SparkFun labored with love to create this code. Feel like supporting open-source hardware? 
  Buy a board from SparkFun! https://www.sparkfun.com/products/14667

  This example prints the distance to an object.

  Are you getting weird readings? Be sure the vacuum tape has been removed from the sensor.

 *  * 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/>.

    
   Copyright (c) 2015, Majenko Technologies
   All rights reserved.

   Redistribution and use in source and binary forms, with or without modification,
   are permitted provided that the following conditions are met:

 * * Redistributions of source code must retain the above copyright notice, this
     list of conditions and the following disclaimer.

 * * Redistributions in binary form must reproduce the above copyright notice, this
     list of conditions and the following disclaimer in the documentation and/or
     other materials provided with the distribution.

 * * Neither the name of Majenko Technologies nor the names of its
     contributors may be used to endorse or promote products derived from
     this software without specific prior written permission.

   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
   ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
   ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include <Wire.h>
#include "SparkFun_VL53L1X.h"

//Optional interrupt and shutdown pins.
#define SHUTDOWN_PIN 2
#define INTERRUPT_PIN 3

SFEVL53L1X distanceSensor;
//Uncomment the following line to use the optional shutdown and interrupt pins.
//SFEVL53L1X distanceSensor(Wire, SHUTDOWN_PIN, INTERRUPT_PIN);

void setup(void)
{
  Wire.begin();

  Serial.begin(9600);
  Serial.println("VL53L1X Qwiic Test");

  if (distanceSensor.begin() == 0) //Begin returns 0 on a good init
  {
    Serial.println("Sensor online Robojax Says!");
  }
  Serial.print("I2C Address of VL53L1X:");
  Serial.println(distanceSensor.getI2CAddress()); 

// set distance mode to Short or long
  distanceSensor.setDistanceModeShort();
  //distanceSensor.setDistanceModeLong();

}

الموارد والمراجع

ملفات📁

لا توجد ملفات متاحة.