การวัดระยะทางด้วยโมดูลเลเซอร์ VL53L0X 6 ขา และ LCD1602-I2C สำหรับ Arduino
ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีการวัดระยะทางโดยใช้เซนเซอร์เลเซอร์ VL53L0X และแสดงผลบนจอ LCD1602 ที่มีอินเทอร์เฟซ I2C โปรเจกต์นี้ช่วยให้คุณสามารถวัดระยะทางได้อย่างแม่นยำทั้งในหน่วยมิลลิเมตรหรือเซนติเมตร ทำให้เป็นส่วนเสริมที่หลากหลายสำหรับโปรเจกต์ที่ใช้ Arduino ใดๆ เมื่อจบบทช่วยสอนนี้ คุณจะมีระบบวัดระยะทางที่ทำงานได้อย่างสมบูรณ์ ซึ่งง่ายต่อการติดตั้งและใช้งาน

เพื่อให้บรรลุเป้าหมายนี้ เราจะใช้เซนเซอร์วัดระยะทางด้วยเลเซอร์ VL53L0X ซึ่งสื่อสารกับ Arduino ผ่าน I2C จอแสดงผล LCD1602 จะให้การแสดงผลระยะทางที่วัดได้อย่างชัดเจน สำหรับความชัดเจนในขั้นตอนการเขียนโค้ด โปรดดูวิดีโอที่ (ในวิดีโอที่ 00:00)
อธิบายฮาร์ดแวร์
ส่วนประกอบหลักในการประกอบนี้คือเซนเซอร์วัดระยะทางด้วยเลเซอร์ VL53L0X และจอแสดงผล LCD1602 เซนเซอร์ VL53L0X ใช้เลเซอร์ในการวัดระยะทางอย่างแม่นยำ ทำให้เหมาะสำหรับการใช้งานต่างๆ รวมถึงหุ่นยนต์และระบบอัตโนมัติ มันทำงานโดยใช้การสื่อสารแบบ I2C ซึ่งช่วยให้สามารถเชื่อมต่อกับ Arduino ได้ง่าย
จอแสดงผล LCD1602 เป็นจอแสดงผลอักขระที่รองรับ I2C ซึ่งสามารถแสดงได้สูงสุด 16 ตัวอักษรบนสองบรรทัด มันช่วยลดความซับซ้อนในการแสดงข้อมูล เนื่องจากใช้พินน้อยกว่าจอ LCD ทั่วไป เมื่อรวมกันแล้ว ส่วนประกอบเหล่านี้จะสร้างระบบวัดระยะทางที่ทรงพลังและใช้งานง่าย
รายละเอียดจาก Datasheet
| ผู้ผลิต | STMicroelectronics |
|---|---|
| หมายเลขชิ้นส่วน | VL53L0X |
| แรงดันไฟฟ้าลอจิก/IO | 1.8 V ถึง 2.8 V |
| แรงดันไฟฟ้าจ่าย | 2.6 V ถึง 3.5 V |
| กระแสเอาต์พุต (ต่อช่อง) | … |
| กระแสสูงสุด (ต่อช่อง) | … |
| คำแนะนำความถี่ PWM | … |
| เกณฑ์ลอจิกอินพุต | … |
| แรงดันตก / RDS(on) / อิ่มตัว | … |
| ขีดจำกัดความร้อน | … |
| แพ็คเกจ | … |
| หมายเหตุ / รุ่นต่างๆ | … |
- ตรวจสอบให้แน่ใจว่าแรงดันไฟฟ้าจ่ายถูกต้อง (2.6 V ถึง 3.5 V)
- ใช้ตัวต้านทาน pull-up บนสาย SDA และ SCL หากจำเป็น
- เก็บเซนเซอร์ให้ห่างจากพื้นผิวสะท้อนแสงเพื่อหลีกเลี่ยงการอ่านค่าที่ผิดพลาด
- ตรวจสอบที่อยู่ I2C (ค่าเริ่มต้นคือ 0x29 สำหรับ VL53L0X)
- พิจารณาการระบายความร้อนหากใช้งานในสภาพแวดล้อมที่มีอุณหภูมิสูง
คำแนะนำการเดินสายไฟ

ในการเดินสายไฟเซนเซอร์ VL53L0X และจอแสดงผล LCD1602 ให้เริ่มต้นด้วยการเชื่อมต่อไฟและกราวด์ เชื่อมต่อพิน VCC ของ VL53L0X เข้ากับพิน 5V บน Arduino และพิน GND เข้ากับกราวด์ของ Arduino สำหรับ LCD1602 ให้เชื่อมต่อ VCC เข้ากับ 5V เดียวกันและ GND เข้ากับกราวด์เช่นกัน
ถัดไป เชื่อมต่อสายสื่อสาร I2C พิน SDA ของ VL53L0X ควรเชื่อมต่อกับพิน A4 บน Arduino และพิน SCL ควรไปที่ A5 พิน XSHUT สามารถเชื่อมต่อกับ D12 บน Arduino ได้ แต่ก็สามารถปล่อยไว้โดยไม่เชื่อมต่อได้เช่นกัน สำหรับ LCD1602 ตรวจสอบให้แน่ใจว่า SDA และ SCL เชื่อมต่อกับพินเดียวกันกับเซนเซอร์ VL53L0X
ตัวอย่างโค้ดและคำอธิบาย
VL53L0X sensor;
#include
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
Wire.begin();
sensor.init();
sensor.setTimeout(500);
sensor.startContinuous();
lcd.begin();
lcd.backlight();
}
ในฟังก์ชัน setup เราจะเริ่มต้นการสื่อสารแบบอนุกรมและบัส I2C sensor.init() เริ่มต้นเซนเซอร์ VL53L0X ในขณะที่ lcd.begin() เริ่มต้นจอแสดงผล LCD ไฟแบ็คไลท์ของจอแสดงผลจะถูกเปิดเพื่อให้มองเห็นได้ง่าย
void loop() {
int distance = sensor.readRangeContinuousMillimeters();
Serial.print("Distance: ");
lcd.clear();
lcd.print("Robojax VL53L0X");
lcd.setCursor(0,1);
lcd.print("Dist.: ");
lcd.setCursor(7,1);
lcd.print(distance);
Serial.println();
delay(100);
}
ภายในลูป เราจะอ่านระยะทางอย่างต่อเนื่องโดยใช้ sensor.readRangeContinuousMillimeters() และพิมพ์ลงใน serial monitor จอ LCD จะถูกอัปเดตด้วยการวัดระยะทาง เพื่อให้ข้อมูลแบบเรียลไทม์ การหน่วงเวลา 100 มิลลิวินาทีช่วยให้แน่ใจว่าการอ่านค่าไม่ได้ถูกอัปเดตบ่อยเกินไป ทำให้อ่านได้ง่าย
การสาธิต / สิ่งที่คาดหวัง
เมื่อเปิดเครื่อง ระบบจะวัดระยะทางอย่างต่อเนื่องและแสดงผลบนจอ LCD คุณสามารถคาดหวังที่จะเห็นค่าของระยะทางเปลี่ยนแปลงเมื่อคุณขยับวัตถุเข้าใกล้หรือออกห่างจากเซนเซอร์ หากมีปัญหาใดๆ กับเซนเซอร์ เช่น ข้อผิดพลาดหมดเวลา ข้อความที่เหมาะสมจะถูกพิมพ์ลงใน serial monitor (ในวิดีโอที่ 03:15)
/*
This is Arduino code to measure distance with VL53L0X and display it on LCD1602 with I2C module.
Distance is displayed in mm (millimeter) or cm (centimeter).
Original Laser Sensor source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com
Date modified: Jun 28, 2018 at 19:06 in Ajax, Ontario, Canada
Watch the video instruction for this code: https://youtu.be/t14ly7Y09oI
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)
LCD1602 Pin
*/
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int type = 1;// 1=mm , 2= cm
String unit;// variable for unit, mm or cm
void setup()
{
Serial.begin(9600);
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();
// initialize the LCD,
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
}
void loop()
{
int distance =sensor.readRangeContinuousMillimeters();
//int distance =sensor.startContinuous(100);
//distance = distance;
Serial.print("Distance: ");
//start of loop Robojax code for LCD with I2C
lcd.clear();
lcd.print("Robojax VL53L0X");
lcd.setCursor (0,1); // go to start of 2nd line
lcd.print("Dist.: ");
lcd.setCursor (7,1); // go to start of 2nd line
if(type ==2){
float distanceCM = (float) (distance/10.0);
unit ="cm";
lcd.print(distanceCM);
Serial.print(distanceCM);
Serial.print(unit);
}else{
unit ="mm";
lcd.print(distance);
Serial.print(distance);
Serial.print(unit);
}
lcd.print(unit);
if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
Serial.println();
delay(100);
}
สิ่งที่คุณอาจต้องการ
-
อเมซอนPurchase VL53L0X from Amazonamzn.to
-
อีเบย์Purchase VL53L0X from eBayebay.us
-
อาลีเอ็กซ์เพรสPurchase 1 to 10 pcs of VL53L0X from AliExpresss.click.aliexpress.com
-
แบงกูดPurchase 1 to 10 pcs of VL53L0X from Banggoodbanggood.com
แหล่งข้อมูลและเอกสารอ้างอิง
-
ภายนอกAdafruit download pagelearn.adafruit.com
-
ภายนอกPurchase 1 to 10 pcs of VL53L0X from AliExpresss.click.aliexpress.com
-
ภายนอกPurchase 1 to 10 pcs of VL53L0X from Banggoodbanggood.com
-
ภายนอกPurchase VL53L0X from eBayebay.us
-
ภายนอกVL53L0X datasheet (PDF)st.com
ไฟล์📁
ไฟล์ Fritzing
-
VL53L0X_Distance_sensor_Squares
VL53L0X_Distance_sensor_Squares.fzpz0.02 MB
ไฟล์อื่น ๆ
-
ห้องสมุด Adafruit VL53L0X จาก Robojax
robojax-VL52L0X_Adafruit_VL53L0X-master.zip0.08 MB -
VL53L0X_Distance_sensor_purple
VL53L0X_Distance_sensor_purple.fzpz0.01 MB