Search Code

레이저 VL53L0X 6핀 모듈로 Arduino에서 거리 측정하기

레이저 VL53L0X 6핀 모듈로 Arduino에서 거리 측정하기

이 튜토리얼에서는 6핀 모듈의 VL53L0X 레이저 거리 센서를 사용하여 거리를 측정하는 방법을 배웁니다. 이 작지만 강력한 센서는 비행 시간 기술을 활용하여 최대 200cm까지 정확한 거리 측정을 제공합니다. 이 가이드를 따라 하면 Arduino로 센서를 설정하고 시리얼 모니터에서 직접 거리 값을 읽을 수 있습니다.

VL53L0X 200cm range sensor

이 프로젝트에서는 다양한 응용 분야에 통합하기 쉬운 소형 센서인 VL53L0X를 사용합니다. 이 센서는 I2C를 통해 통신하므로 Arduino 보드에 간단히 연결할 수 있습니다. 비디오에서 설정 과정에 대한 추가 설명과 시연을 확인할 수 있습니다(비디오 04:00 지점).

하드웨어 설명

VL53L0X는 레이저 빔을 방출하고 물체에 부딪힌 후 빛이 돌아오는 데 걸리는 시간을 측정하는 비행 시간 거리 센서입니다. 이를 통해 물체까지의 거리를 정확하게 계산할 수 있습니다. 이 센서는 2.6V~3.5V 전압에서 작동하지만 내부 전압 조정기 덕분에 5V로 전원을 공급할 수 있습니다.

이 모듈에는 VCC, GND, SDA(데이터 라인), SCL(클록 라인), GPIO1(범용 입출력), XSHUT(셧다운 핀)의 6개 핀이 있습니다. GPIO1 핀은 이 구성에서 사용되지 않지만 연결하지 않은 채로 둘 수 있습니다. XSHUT 핀을 사용하면 사용하지 않을 때 전원을 절약하기 위해 센서를 종료할 수 있습니다.

데이터시트 세부 정보

제조업체STMicroelectronics
부품 번호VL53L0X
로직/IO 전압2.6V~3.5V(레귤레이터 사용 시 5V)
작동 온도-20°C~70°C
측정 범위30mm~2000mm
I2C 통신 주파수400kHz
크기4.4mm x 2.4mm x 1mm

  • 적절한 전원 공급 확인(5V 권장).
  • SDA와 SCL을 Arduino의 해당 I2C 핀에 연결합니다.
  • 필요한 경우 I2C 라인에 풀업 저항을 사용합니다.
  • GPIO1을 연결하지 않은 채로 두면 플로팅 상태가 될 수 있습니다.
  • 작동 중에는 XSHUT 핀을 HIGH 상태로 유지합니다.
  • 더 나은 정확도를 위해 조명이 밝은 환경에서 거리를 측정합니다.
  • 정확한 측정을 위해 센서를 보정합니다.
  • 다양한 거리에 물체를 배치하여 센서 범위를 테스트합니다.
  • 거리 판독값과 타임아웃 메시지를 위해 시리얼 출력을 모니터링합니다.

배선 지침

Arduino wiring VL53L0X laser distance sensor
Arduino wiring VL53L0X laser distance sensor

VL53L0X 센서를 Arduino에 배선하려면 먼저 센서의 VCC 핀을 Arduino의 5V 핀에 연결합니다. 다음으로 GND 핀을 Arduino의 GND에 연결합니다. 센서의 SDA 핀은 Arduino의 A4 핀(또는 보드에 전용 I2C 핀이 있는 경우 SDA 핀)에 연결해야 합니다. 마찬가지로 센서의 SCL 핀을 A5 핀(또는 SCL 핀)에 연결합니다. 이 프로젝트에는 필요하지 않으므로 GPIO1 핀은 연결하지 않은 채로 둡니다.

마지막으로 XSHUT 핀을 Arduino의 디지털 핀 12에 연결합니다. 이 핀은 센서의 셧다운 상태를 제어하는 데 사용됩니다. 통신 문제를 방지하려면 모든 연결이 안전한지 확인하세요.

코드 예제 및 설명

코드에서는 필요한 라이브러리를 포함하고 VL53L0X 센서를 초기화하는 것으로 시작합니다. setup 함수는 센서를 구성하고 연속 거리 측정을 시작합니다. 다음은 setup 함수의 일부입니다:

void setup() {
  pinMode(12, INPUT_PULLUP);
  digitalWrite(12, HIGH);
  Serial.begin(9600);
  Wire.begin();
  sensor.init();
  sensor.setTimeout(500);
  sensor.startContinuous();
}

이 코드 조각에서는 핀 12를 풀업 저항이 있는 입력으로 설정하고 9600 보드에서 시리얼 통신을 초기화합니다. 또한 센서를 초기화하고 판독값에 대한 타임아웃을 설정하여 연속적으로 작동하도록 합니다.

다음으로 loop 함수에서 거리를 읽고 측정된 값을 시리얼 모니터에 출력합니다:

void loop() {
  int distance = sensor.readRangeContinuousMillimeters();
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.print("mm");
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }
  Serial.println();
  delay(100);
}

이 코드는 거리를 밀리미터 단위로 읽고 시리얼 모니터에 출력합니다. 타임아웃이 발생하면 센서가 유효한 판독값을 받지 못했음을 나타냅니다.

시연 / 예상 결과

프로그램을 실행하면 시리얼 모니터에 거리 측정값이 표시되기 시작합니다. 물체를 센서에 가까이 또는 멀리 이동하면 출력이 변동합니다. 센서가 판독값을 얻지 못하면 가끔 타임아웃 메시지가 표시될 수 있습니다(비디오 10:30 지점). 정확도를 높이려면 여러 판독값을 평균화하는 것을 고려하세요.

이미지

VL53L0X 200cm range sensor
VL53L0X 200cm range sensor
Arduino wiring VL53L0X laser distance sensor
Arduino wiring VL53L0X laser distance sensor
103-Measureing distance using VL53L0X TOF range sensor
언어: C++
/* This example shows how to use continuous mode to take
range measurements with the 6-pin VL53L0X module. It is based on
vl53l0x_ContinuousRanging_Example.c from the VL53L0X API.

The range readings are in units of mm. 

Original source: https://github.com/adafruit/Adafruit_VL53L0X
Modified by Ahmad Shamshiri for RoboJax.com/RJT83
Date modified: May 31, 2018 at 19:25 in Ajax, Ontario, Canada
Watch the instruction video for this code https://youtu.be/S2jaAQEv3Yo

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;

void setup()
{
  pinMode(12,INPUT_PULLUP);
  digitalWrite(12,HIGH);
  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();
}

void loop()
{
  int distance =sensor.readRangeContinuousMillimeters();
  //int distance =sensor.startContinuous(100);
  
 //distance = distance;
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.print("mm");
  if (sensor.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

  Serial.println();
  delay(100);
}

필요할 수 있는 것들

자원 및 참고자료

파일📁

프리징 파일

  • VL53L0X_Distance_sensor_Squares
    VL53L0X_Distance_sensor_Squares.fzpz 0.02 MB
  • Adafruit VL6180X Time of Flight Distance Sensor
    Fritzing 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.fzpz 0.02 MB

다른 파일들