شِفر (کود) جستجو

اندازه‌گیری فاصله با ماجیول لیزری VL53L0X 6 پایه و نمایشگر TM1637 برای آردوینو

اندازه‌گیری فاصله با ماجیول لیزری VL53L0X 6 پایه و نمایشگر TM1637 برای آردوینو


در این آموزش یاد می‌گیریم چگونه با استفاده از حساس(حس کننده) فاصله‌سنج لیزری VL53L0X فاصله را اندازه‌گیری کرده و مقادیر را روی نمایشگر 7-segment TM1637 نمایش دهیم. این پروژه هر دو مؤلفه را ترکیب می‌کند تا یک ابزار اندازه‌گیری فاصله ساده اما مؤثر ایجاد کند. VL53L0X از فناوری لیزری برای ارائه خوانش‌های دقیق فاصله استفاده می‌کند، در حالی که نمایشگر TM1637 این خوانش‌ها را در قالبی کاربرپسند نشان می‌دهد.

VL53L0X 200cm range sensor
TM1637 4 digit display module

ما سخت‌افزار مورد نیاز، دستورالعمل‌های سیم‌کشی و کدی را که برای راه‌اندازی همه‌چیز لازم است بررسی خواهیم کرد. تا پایان این آموزش، شما یک دستگاه اندازه‌گیری فاصلهٔ عملی خواهید داشت که می‌توان از آن در کاربردهای مختلف استفاده کرد. برای راهنمای تصویری، حتماً ویدیو را در 00:00 تماشا کنید.

توضیح سخت‌افزار

اجزای اصلی این پروژه حساس(حس کننده) فاصله لیزری VL53L0X و ماجیول نمایشگر TM1637 هستند. VL53L0X یک حساس(حس کننده) زمان پرواز است که فاصله تا یک جسم را با انتشار یک پرتو لیزری و محاسبهٔ مدت زمانی که طول می‌کشد تا بازتاب بازگردد اندازه‌گیری می‌کند. این حساس(حس کننده) در محدودهٔ ولتاژ 2.6V تا 3.5V کار می‌کند اما به‌خاطر وجود یک رگولاتور ولتاژ داخلی می‌تواند با 5V نیز کار کند.

TM1637 یک درایور نمایشگر است که نمایشگر LED هفت‌سگمنت را کنترل می‌کند. این درایور از طریق یک رابط سادهٔ دو سیمه (CLK و DIO) ارتباط برقرار می‌کند که اتصال آن به آردوینو را آسان می‌سازد. نمایشگر می‌تواند مقادیر عددی را نشان دهد و برای نمایش بصری اندازه‌گیری‌های فاصله از حساس(حس کننده) VL53L0X ایده‌آل است.

جزئیات مشخصات فنی

تولیدکنندهاس‌تی میکروالکترونیکس
شماره قطعهVL53L0X
ولتاژ منطق/ورودی-خروجی2.6 ولت - 3.5 ولت
ولتاژ تغذیه۲٫۶ ولت - ۵ ولت
دمای عملیاتی-20 °C تا 70 °C
دامنه اندازه‌گیری30 میلی‌متر تا 2000 میلی‌متر
فرکانس I2C400 کیلوهرتز
تنظیم زمان انتظار500 میلی‌ثانیه
بستهماجیول ۶ پایه

  • از تأمین منبع تغذیه مناسب اطمینان حاصل کنید (5V قابل قبول است).
  • پایه XSHUT را با یک مقاومت پول‌آپ برای جلوگیری از نشتی متصل کنید
  • برای ارتباط از I2C استفاده کنید؛ SDA و SCL را به‌طور مناسب متصل کنید.
  • تایم‌اوت‌ها را در شِفر (کود) مدیریت کنید تا از بروز رفتارهای غیرمنتظره جلوگیری شود.
  • برای دقت، به محدوده دمای کاری توجه کنید.

دستورالعمل‌های سیم‌کشی

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

برای سیم‌کشی ماجیول VL53L0X و نمایشگر TM1637، ابتدا پایه VCC ماجیول VL53L0X را به پایه 5V آردوینو و پایه GND را به یک پایه زمین (GND) آردوینو متصل کنید. سپس پایه SDA ماجیول VL53L0X را به پایه A4 آردوینو که معمولاً برای ارتباط داده‌ای I2C استفاده می‌شود، متصل کنید. پایه SCL نیز باید به پایه A5 آردوینو که برای سیگنال کلاک استفاده می‌شود، متصل شود.

برای نمایشگر TM1637، پایه CLK را به پایه دیجیتال 2 آردوینو و پایه DIO را به پایه دیجیتال 3 متصل کنید. در نهایت، پایه XSHUT حساس(حس کننده) VL53L0X را به پایه دیجیتال 12 آردوینو وصل کنید. مطمئن شوید هر پایه بلااستفاده مانند GPIO1 روی VL53L0X بدون اتصال باقی بماند. این تنظیم به آردوینو اجازه می‌دهد تا به‌طور مؤثر هم با حساس(حس کننده) و هم با نمایشگر ارتباط برقرار کند.

مثال‌های شِفر (کود) و راهنمای گام‌به‌گام

شِفر (کود) حساس(حس کننده) و نمایشگر را مقداردهی اولیه می‌کند، ارتباط I2C را راه‌اندازی می‌کند و به‌طور مداوم اندازه‌گیری‌های فاصله را می‌خواند. در ادامه قطعه‌کدی آمده که تابع setup را نشان می‌دهد که در آن پایه‌ها پیکربندی شده و حساس(حس کننده) مقداردهی اولیه می‌شود:

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 به‌عنوان ورودی با مقاومت پول-آپ پیکربندی شده است و حساس(حس کننده) برای اندازه‌گیری پیوستهٔ فاصله مقداردهی اولیه شده است. نمایشگر مسلسل نیز تنظیم شده است تا خوانش‌های فاصله را نمایش دهد.

سپس، حلقهٔ اصلی فاصله را می‌خواند و نمایشگر را به‌روز می‌کند. در اینجا یک گزیدهٔ متمرکز از تابع loop آمده است:

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).

اشتباهات رایج شامل سیم‌کشی معکوس یا راه‌اندازی نادرست حساس(حس کننده) است که می‌تواند منجر به خطاهای تایم‌اوت شود. مطمئن شوید که پایه‌های صحیح متصل شده‌اند و حساس(حس کننده) تغذیهٔ کافی دریافت می‌کند تا اندازه‌گیری‌های فاصله دقیق باشند.

تصاویر

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
زبان: 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);
}

منابع و مراجع

هنوز هیچ منبعی موجود نیست.

فایل‌ها📁

برگه مشخصات (pdf)

فایل فریزینگ

راهنمای کاربر

سایر فایل‌ها