ค้นหาโค้ด

การวัดระยะทางด้วยโมดูลเลเซอร์ VL53L0X 6 ขา และ LCD1602-I2C สำหรับ Arduino

การวัดระยะทางด้วยโมดูลเลเซอร์ VL53L0X 6 ขา และ LCD1602-I2C สำหรับ Arduino

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

VL53L0X 200cm range sensor

เพื่อให้บรรลุเป้าหมายนี้ เราจะใช้เซนเซอร์วัดระยะทางด้วยเลเซอร์ VL53L0X ซึ่งสื่อสารกับ Arduino ผ่าน I2C จอแสดงผล LCD1602 จะให้การแสดงผลระยะทางที่วัดได้อย่างชัดเจน สำหรับความชัดเจนในขั้นตอนการเขียนโค้ด โปรดดูวิดีโอที่ (ในวิดีโอที่ 00:00)

อธิบายฮาร์ดแวร์

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

จอแสดงผล LCD1602 เป็นจอแสดงผลอักขระที่รองรับ I2C ซึ่งสามารถแสดงได้สูงสุด 16 ตัวอักษรบนสองบรรทัด มันช่วยลดความซับซ้อนในการแสดงข้อมูล เนื่องจากใช้พินน้อยกว่าจอ LCD ทั่วไป เมื่อรวมกันแล้ว ส่วนประกอบเหล่านี้จะสร้างระบบวัดระยะทางที่ทรงพลังและใช้งานง่าย

รายละเอียดจาก Datasheet

ผู้ผลิตSTMicroelectronics
หมายเลขชิ้นส่วนVL53L0X
แรงดันไฟฟ้าลอจิก/IO1.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)
  • พิจารณาการระบายความร้อนหากใช้งานในสภาพแวดล้อมที่มีอุณหภูมิสูง

คำแนะนำการเดินสายไฟ

Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)

ในการเดินสายไฟเซนเซอร์ 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)

ภาพ

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
Arduino wiring for VL53L0X and LCD1602 I2C (4 wires LCD)
113-Measure distance with a laser VL53L0X 6-pin module and an LCD1602-I2C for Arduino
ภาษา: C++
/* 

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);
}

สิ่งที่คุณอาจต้องการ

แหล่งข้อมูลและเอกสารอ้างอิง

ไฟล์📁

ไฟล์ Fritzing

ไฟล์อื่น ๆ