লেজার VL53L0X ৬-পিন মডিউল এবং TM1637 ডিসপ্লে দিয়ে আরডুইনোর জন্য দূরত্ব পরিমাপ
এই টিউটোরিয়ালে, আমরা VL53L0X লেজার দূরত্ব সেন্সর ব্যবহার করে কীভাবে দূরত্ব মাপতে হয় এবং TM1637 7-সেগমেন্ট ডিসপ্লেতে রিডিং প্রদর্শন করতে হয় তা শিখব। এই প্রকল্পটি উভয় উপাদানকে একত্রিত করে একটি সহজ অথচ কার্যকর দূরত্ব মাপার টুল তৈরি করে। VL53L0X লেজার প্রযুক্তি ব্যবহার করে সঠিক দূরত্ব রিডিং প্রদান করে, যখন TM1637 ডিসপ্লে এই রিডিংগুলো ব্যবহারকারী-বান্ধব ফরম্যাটে দেখায়।


আমরা প্রয়োজনীয় হার্ডওয়্যার, ওয়্যারিং নির্দেশনা এবং সবকিছু চালু করার জন্য প্রয়োজনীয় কোড নিয়ে আলোচনা করব। এই টিউটোরিয়ালের শেষে, আপনার কাছে একটি কার্যকর দূরত্ব মাপার ডিভাইস থাকবে যা বিভিন্ন অ্যাপ্লিকেশনে ব্যবহার করা যেতে পারে। একটি ভিজ্যুয়াল গাইডের জন্য, ভিডিওটি দেখতে ভুলবেন না (ভিডিওতে 00:00 এ)।
হার্ডওয়্যার ব্যাখ্যা
এই প্রকল্পের প্রধান উপাদান হলো VL53L0X লেজার দূরত্ব সেন্সর এবং TM1637 ডিসপ্লে মডিউল। VL53L0X একটি টাইম-অফ-ফ্লাইট সেন্সর যা একটি লেজার রশ্মি নির্গত করে এবং প্রতিফলন ফিরে আসতে যে সময় লাগে তা গণনা করে একটি বস্তুর দূরত্ব মাপে। এটি 2.6V থেকে 3.5V ভোল্টেজ রেঞ্জে কাজ করে তবে একটি সমন্বিত ভোল্টেজ রেগুলেটরের কারণে 5V-তেও কাজ করতে পারে।
TM1637 একটি ডিসপ্লে ড্রাইভার যা একটি 7-সেগমেন্ট LED ডিসপ্লে নিয়ন্ত্রণ করে। এটি একটি সহজ 2-ওয়্যার ইন্টারফেস (CLK এবং DIO) এর মাধ্যমে যোগাযোগ করে, যা Arduino-এর সাথে সংযোগ করা সহজ করে। ডিসপ্লেটি সংখ্যাসূচক মান দেখাতে পারে এবং VL53L0X সেন্সর থেকে দূরত্ব পরিমাপ可视化 করার জন্য উপযুক্ত।
ডেটাশিট বিবরণ
| প্রস্তুতকারক | STMicroelectronics |
|---|---|
| পার্ট নম্বর | VL53L0X |
| লজিক/IO ভোল্টেজ | 2.6 V - 3.5 V |
| সাপ্লাই ভোল্টেজ | 2.6 V - 5 V |
| অপারেটিং তাপমাত্রা | -20 °C থেকে 70 °C |
| মাপার রেঞ্জ | 30 mm থেকে 2000 mm |
| I2C ফ্রিকোয়েন্সি | 400 kHz |
| টাইমআউট সেটিং | 500 ms |
| প্যাকেজ | 6-পিন মডিউল |
- সঠিক পাওয়ার সাপ্লাই নিশ্চিত করুন (5V গ্রহণযোগ্য)।
- লিকেজ এড়াতে একটি পুল-আপ রেজিস্টর সহ XSHUT পিন সংযোগ করুন।
- যোগাযোগের জন্য I2C ব্যবহার করুন; SDA এবং SCL যথাযথভাবে সংযোগ করুন।
- অপ্রত্যাশিত আচরণ এড়াতে কোডে টাইমআউট পরিচালনা করুন।
- নির্ভুলতার জন্য অপারেটিং তাপমাত্রা রেঞ্জ সম্পর্কে সচেতন থাকুন।
ওয়্যারিং নির্দেশনা

VL53L0X এবং TM1637 ডিসপ্লে ওয়্যার করতে, প্রথমে VL53L0X-এর VCC পিনটি Arduino-এর 5V পিনে এবং GND পিনটি Arduino-এর একটি গ্রাউন্ড পিনে সংযোগ করুন। এরপর, VL53L0X-এর SDA পিনটি Arduino-এর A4 পিনে সংযোগ করুন, যা সাধারণত I2C ডেটা যোগাযোগের জন্য ব্যবহৃত হয়। SCL পিনটি Arduino-এর A5 পিনে সংযোগ করা উচিত, যা ক্লক সিগন্যালের জন্য ব্যবহৃত হয়।
TM1637 ডিসপ্লের জন্য, CLK পিনটি Arduino-এর ডিজিটাল পিন 2-এ এবং DIO পিনটি ডিজিটাল পিন 3-এ সংযোগ করুন। অবশেষে, VL53L0X-এর XSHUT পিনটি Arduino-এর ডিজিটাল পিন 12-এ সংযোগ করুন। নিশ্চিত করুন যে VL53L0X-এর GPIO1-এর মতো অব্যবহৃত পিনগুলো সংযোগহীন রাখা হয়েছে। এই সেটআপটি Arduino-কে সেন্সর এবং ডিসপ্লে উভয়ের সাথে কার্যকরভাবে যোগাযোগ করতে অনুমতি দেবে।
কোড উদাহরণ ও ব্যাখ্যা
কোডটি সেন্সর এবং ডিসপ্লে আরম্ভ করে, I2C যোগাযোগ সেটআপ করে এবং ক্রমাগত দূরত্ব পরিমাপ পড়ে। নিচে সেটআপ ফাংশনের একটি অংশ দেখানো হলো যেখানে পিনগুলো কনফিগার করা হয় এবং সেন্সর আরম্ভ করা হয়:
void setup() {
pinMode(12, INPUT_PULLUP); // পিন 12 ইনপুটের জন্য সেট করুন
digitalWrite(12, HIGH); // পিন 12 উচ্চ (5V) সেট করুন
Serial.begin(9600);
Wire.begin(); // I2C যোগাযোগ আরম্ভ
sensor.init(); // দূরত্ব সেন্সর আরম্ভ
sensor.setTimeout(500); // টাইমআউট সেট
sensor.startContinuous(); // পরিমাপের ধরন সেট
}
এই সেটআপ ফাংশনে, XSHUT-এর পিনটি একটি পুল-আপ রেজিস্টর সহ ইনপুট হিসেবে কনফিগার করা হয় এবং সেন্সরটি ক্রমাগত রেঞ্জ পরিমাপের জন্য আরম্ভ করা হয়। দূরত্ব রিডিং প্রদর্শনের জন্য সিরিয়াল মনিটরও সেটআপ করা হয়।
এরপর, মূল লুপটি দূরত্ব পড়ে এবং ডিসপ্লে আপডেট করে। এখানে লুপ ফাংশনের একটি অংশ দেওয়া হলো:
void loop() {
int distance = sensor.readRangeContinuousMillimeters(); // মিমিতে দূরত্ব পড়ুন
display.setSegments(clearLED); // LED ডিসপ্লে থেকে পূর্বের মান মুছুন
display.showNumberDec(distance, false, 4, 0); // দূরত্ব প্রদর্শন করুন
Serial.print("Distance: ");
Serial.print(distance); // সিরিয়াল মনিটরে দূরত্ব প্রিন্ট করুন
}
এই লুপটি ক্রমাগত সেন্সর থেকে দূরত্ব পড়ে এবং সর্বশেষ পরিমাপ দিয়ে 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);
}
সম্পদ ও রেফারেন্সসমূহ
এখনো কোনো সম্পদ নেই।
ফাইলসমূহ📁
ডেটাশিট (পিডিএফ)
-
টিএম1637 ডেটাশিট
/download/datasheet/robojax_TM1637_datasheet.pdf0.67 MB
ফ্রিটজিং ফাইল
-
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
ব্যবহারকারীর ম্যানুয়াল
-
টিএম1637 ডিসপ্লে ম্যানুয়াল
robojax-TM1637_display_manual.pdf0.31 MB
অন্যান্য ফাইলগুলি
-
পোলু VL53L0X লাইব্রেরি
robojax-VL53L0X-polou-arduino-master.zip0.02 MB -
VL53L0X_Distance_sensor_purple
VL53L0X_Distance_sensor_purple.fzpz0.01 MB