การใช้โมดูลวัดระยะด้วยเลเซอร์ CJMCU VL53L0X ร่วมกับ Arduino
บทช่วยสอนนี้สาธิตวิธีการใช้เครื่องวัดระยะด้วยเลเซอร์ CJMCU VL53L0X ร่วมกับ Arduino โมดูลนี้ซึ่งมาพร้อมกับเซนเซอร์วัดเวลาการบิน VL53L0X ของ Texas Instruments และตัวแปลงระดับสัญญาณสองทิศทาง TXS0108E (ในวิดีโอที่ 00:06) ให้การวัดระยะทางที่แม่นยำสูงสุดสองเมตร (ในวิดีโอที่ 00:52) ความเข้ากันได้กับระดับแรงดันไฟฟ้าต่างๆ (3.3V, 1.8V, 5V) ช่วยให้การเชื่อมต่อกับไมโครคอนโทรลเลอร์หลายประเภทง่ายขึ้น (ในวิดีโอที่ 00:21) โครงการนี้เปิดโอกาสการใช้งานที่หลากหลาย
แนวคิดโครงการ:
- หุ่นยนต์: ใช้หลบหลีกสิ่งกีดขวางในหุ่นยนต์
- ระบบอัตโนมัติ: ควบคุมเครื่องจักรตามระยะใกล้ไกล
- บ้านอัจฉริยะ: สร้างระบบไฟอัตโนมัติตามระยะทาง
- ความปลอดภัย: พัฒนาระบบสัญญาณเตือนตามระยะใกล้
ฮาร์ดแวร์/อุปกรณ์
ในการสร้างโครงการนี้ คุณจะต้องมีอุปกรณ์ดังต่อไปนี้:
- บอร์ด Arduino (รุ่นใดก็ได้ที่ใช้งานได้)
- โมดูลเครื่องวัดระยะด้วยเลเซอร์ CJMCU VL53L0X
- สายจัมเปอร์
คู่มือการเดินสายไฟ
การเชื่อมต่อโมดูล VL53L0X เข้ากับ Arduino มีดังนี้:
เชื่อมต่อขา VCC ของโมดูลเข้ากับขา 5V บน Arduino ตัวควบคุมภายในของโมดูลจะจัดการแรงดันไฟฟ้า 3.3V ที่เซนเซอร์ต้องการ (ในวิดีโอที่ 01:50)
เชื่อมต่อขา GND ของโมดูลเข้ากับขา GND บน Arduino
เชื่อมต่อขา SDA ของโมดูลเข้ากับขา A4 บน Arduino
เชื่อมต่อขา SCL ของโมดูลเข้ากับขา A5 บน Arduino
ปล่อยขา XSHUT ไว้โดยไม่เชื่อมต่อ เว้นแต่คุณจำเป็นต้องใช้เพื่อควบคุมการปิดเครื่อง (ในวิดีโอที่ 03:50)
คำอธิบายโค้ด
โค้ดที่ให้มาใช้ไลบรารี VL53L0X นี่คือคำอธิบายส่วนสำคัญที่สามารถกำหนดค่าได้:
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
void setup()
{
Serial.begin(9600);
// ... โค้ดตั้งค่าอื่นๆ ...
sensor.setTimeout(500); // ตั้งค่าเวลาหมดเวลาเป็น 500ms (ในวิดีโอที่ 06:40)
sensor.startContinuous(); // เริ่มโหมดการวัดต่อเนื่อง (ในวิดีโอที่ 06:50)
}
void loop()
{
Serial.print(sensor.readRangeContinuousMillimeters()); // อ่านระยะทางเป็นมิลลิเมตร (ในวิดีโอที่ 07:01)
// ... โค้ดลูปอื่นๆ ...
}
บรรทัด sensor.setTimeout(500) ตั้งค่าเวลาหมดเวลาสำหรับการวัดระยะทางเป็น 500 มิลลิวินาที ปรับค่านี้หากจำเป็นสำหรับการใช้งานของคุณ (ในวิดีโอที่ 06:40) ฟังก์ชัน sensor.startContinuous() เริ่มการวัดระยะแบบต่อเนื่อง ให้ค่าการวัดระยะทางเร็วที่สุดเท่าที่เป็นไปได้ (ในวิดีโอที่ 06:50) ฟังก์ชัน sensor.readRangeContinuousMillimeters() คืนค่าระยะทางที่วัดได้เป็นมิลลิเมตร (ในวิดีโอที่ 07:01)
โครงการสาธิตสด
วิดีโอสาธิตการทำงานของเซนเซอร์ แสดงให้เห็นว่าค่าการวัดระยะทางเปลี่ยนแปลงอย่างไรเมื่อระยะห่างระหว่างเซนเซอร์กับเป้าหมายเปลี่ยนไป ค่าที่วัดได้มีความแม่นยำภายในไม่กี่มิลลิเมตร โดยเฉพาะที่ระยะมากกว่า 10 มิลลิเมตร (ในวิดีโอที่ 08:20) ที่ระยะใกล้มาก (น้อยกว่า 10 มิลลิเมตร) ความแม่นยำจะลดลง (ในวิดีโอที่ 09:50) การสาธิตยังแสดงให้เห็นว่าพื้นผิวสะท้อนแสงอาจส่งผลต่อค่าที่วัดได้ โดยเฉพาะหากเลเซอร์ไม่ได้ตั้งฉากกับพื้นผิว (ในวิดีโอที่ 10:32)
บทต่างๆ
- [00:00] บทนำและภาพรวมโครงการ
- [00:48] รายละเอียดเซนเซอร์ VL53L0X
- [01:41] ภาพรวมโมดูลและข้อมูลจำเพาะ
- [02:55] การใช้งานและมาตรฐาน
- [03:35] ขาและการเชื่อมต่อ
- [05:29] คำอธิบายโค้ด
- [07:45] การเดินสายไฟและการเชื่อมต่อ
- [08:18] การสาธิตสด
/* This example shows how to use continuous mode to take
range measurements with the VL53L0X. It is based on
vl53l0x_ContinuousRanging_Example.c from the VL53L0X API.
The range readings are in units of mm.
Updated by Ahmad Shamshiri for Robojax.com on July 23, 2018 in Ajax, Ontario, Canada.
Watch video instructions for this code: https://youtu.be/0PnAyt51IU4
Download the library and get other resources for this code at http://robojax.com
*/
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
void setup()
{
Serial.begin(9600);
Serial.println("Robojax CJMCU VL523L0X laser distance test");
Wire.begin();
sensor.init();
sensor.setTimeout(500);
// 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();
}
void loop()
{
Serial.print(sensor.readRangeContinuousMillimeters());// print distance
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
}
แหล่งข้อมูลและเอกสารอ้างอิง
-
ภายนอกPololu download (GitHub)github.com
-
ภายนอกTXS0108E datasheetti.com
ไฟล์📁
ไฟล์ Fritzing
-
เซนเซอร์วัดระยะเวลาแสง Adafruit VL6180Xชิ้นส่วน Fritzing สำหรับเซนเซอร์วัดระยะเวลาแสง Adafruit VL6180X เซนเซอร์นี้วัดระยะทางสัมบูรณ์สูงสุด 100 มม. และแสงโดยรอบ สื่อสารผ่าน I2C รวมถึงบอร์ดแยกเซนเซอร์และการเชื่อมต่อพินสำหรับใช้ในโปรเจกต์ Fritzing
Adafruit VL6180X Time of Flight Distance Sensor-1.fzpz0.02 MB