TOF 또는 Time of Flight는 초음파 센서와 같은 다양한 거리 측정 센서로 먼 물체의 거리를 측정하는 데 일반적으로 사용되는 방법입니다. 입자, 파동 또는 물체가 매체를 통해 거리를 이동하는 데 걸리는 시간을 TOF (Time-of-Flight)라고합니다. 이 측정은 속도 또는 경로 길이를 계산하는 데 사용할 수 있습니다. 또한 조성 또는 유속과 같은 매체의 입자 또는 특성에 대해 학습하는 데 사용할 수 있습니다. 이동 물체는 직접 또는 간접적으로 감지 할 수 있습니다.
초음파 거리 측정 장치는 비행 시간 원리를 사용하는 최초의 장치 중 하나입니다. 이 장치는 초음파 펄스를 방출하고 파동이 방출기로 되돌아가는 데 걸리는 시간을 기준으로 고체 물질까지의 거리를 측정합니다. 우리 는 거리 를 측정하기 위해 많은 응용 분야에서 초음파 센서를 사용했습니다.
- Arduino 및 초음파 센서 기반 거리 측정
- Raspberry Pi 및 HCSR04 초음파 센서를 사용하여 거리 측정
- 두 개의 초음파 센서 사이의 거리를 측정하는 방법
비행 시간 방법을 사용하여 전자 이동도를 추정 할 수도 있습니다. 실제로는 저 전도성 박막 측정 용으로 설계되었으며 나중에 일반 반도체 용으로 조정되었습니다. 이 기술은 유기 전계 효과 트랜지스터 및 금속-유전체-금속 구조에 사용됩니다. 레이저 또는 전압 펄스를 적용하면 초과 전하가 생성됩니다.
TOF 원리는 센서와 물체 사이의 거리를 측정하는데 사용된다. 물체에서 반사 된 후 신호가 센서에 다시 도달하는 데 걸리는 시간을 측정하여 거리를 계산하는 데 사용합니다. 소리, 빛과 같은 다양한 유형의 신호 (반송파)를 TOF 원리와 함께 사용할 수 있습니다. TOF를 거리 찾기에 사용하면 소리보다는 빛을 발산 할 때 매우 강력합니다. 초음파에 비해 더 빠른 판독, 더 높은 정확도 및 더 넓은 범위를 제공하면서 여전히 낮은 무게, 작은 크기 및 낮은 전력 소비 특성을 유지합니다.
이 튜토리얼 에서는 Arduino와 함께 VL6180X TOF 거리 측정기 센서를 사용하여 센서와 물체 사이의 거리를 계산합니다. 이 센서는 또한 LUX의 광도 값을 알려줍니다.
VL6180X ToF (Time-of-Flight) 거리 측정기 센서
VL6180은 정확한 시계를 사용하여 빛이 표면에서 반사되는 데 걸리는 시간을 측정한다는 점에서 다른 거리 센서와 다릅니다. 이는 VL6180이 더 정확하고 노이즈에 영향을받지 않기 때문에 다른 센서에 비해 이점을 제공합니다.
VL6180은 IR 이미 터, 주변 광 센서 및 범위 센서 가 포함 된 3-in-1 패키지입니다. I 2 C 인터페이스 를 통해 통신 합니다. 온보드 2.8V 레귤레이터가 있습니다. 따라서 2.8V보다 큰 전압을 연결하더라도 보드를 손상시키지 않고 자동으로 아래로 이동합니다. 그것은 25cm까지의 범위를 측정합니다. 두 개의 프로그래밍 가능한 GPIO가 제공됩니다.
회로도
여기서 노키아 5110 LCD 는 조명 수준과 거리를 표시하는 데 사용됩니다. Nokia 5110 LCD는 3.3V에서 작동하므로 Arduino Nano 디지털 핀과 직접 연결할 수 없습니다. 따라서 데이터 신호와 직렬로 10k 저항을 추가하여 5V 디지털 핀에서 3.3V 라인을 보호하십시오. Arduino와 함께 Nokia 5110 LCD를 사용하는 방법에 대해 자세히 알아보십시오 .
VL6180 센서는 직접 아두 이노에 연결할 수 있습니다. VL6180과 Arduino 간의 통신은 I2C입니다. 실제로 I2C 통신 프로토콜은 SPI와 UART의 최고의 기능을 결합합니다. 여기에서 여러 슬레이브를 단일 마스터에 연결할 수 있고 여러 마스터가 단일 또는 여러 슬레이브를 제어 할 수 있습니다. UART 통신과 마찬가지로 I2C는 통신 SDA (Serial Data)와 SCL (Serial Clock), 데이터 라인과 클록 라인을 위해 두 개의 와이어를 사용합니다.
VL6180 ToF 거리 측정기 센서를 Arduino와 연결 하기위한 회로도 는 다음과 같습니다.
- LCD의 RST 핀을 10K 저항을 통해 Arduino의 핀 6에 연결합니다.
- LCD의 CE 핀을 10K 저항을 통해 Arduino의 핀 7에 연결합니다.
- LCD의 DC 핀을 10K 저항을 통해 Arduino의 핀 5에 연결합니다.
- LCD의 DIN 핀을 10K 저항을 통해 Arduino의 핀 4에 연결합니다.
- LCD의 CLK 핀을 10K 저항을 통해 Arduino의 핀 3에 연결합니다.
- LCD의 VCC 핀을 Arduino의 3.3V 핀에 연결합니다.
- LCD의 GND 핀을 Arduino의 GND에 연결합니다.
- VL6180의 SCL 핀을 Arduino의 A5 핀에 연결합니다.
- VL6180의 SDA 핀을 Arduino의 A4 핀에 연결합니다.
- VL6180의 VCC 핀을 Arduino의 5V 핀에 연결합니다.
- VL6180의 GND 핀을 Arduino의 GND 핀에 연결하십시오.
VL6180 ToF 센서에 필요한 라이브러리 추가
VL6180 센서와 Arduino를 연결하는 데 세 개의 라이브러리가 사용됩니다.
1. Adafruit_PCD8544
Adafruit_PCD8544는 Monochrome Nokia 5110 LCD 디스플레이 용 라이브러리입니다. 이러한 디스플레이는 통신을 위해 SPI를 사용합니다. 이 LCD를 인터페이싱하려면 4 개 또는 5 개의 핀이 필요합니다. 이 라이브러리를 다운로드 할 수있는 링크는 다음과 같습니다.
github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library/archive/master.zip
2. Adafruit_GFX
Arduino 용 Adafruit_GFX 라이브러리는 LCD 디스플레이를위한 핵심 그래픽 라이브러리로, 공통 구문과 그래픽 프리미티브 세트 (점, 선, 원 등)를 제공합니다. 우리가 사용하는 각 디스플레이 장치에 대한 하드웨어 특정 라이브러리와 쌍을 이루어야합니다 (낮은 수준의 기능을 처리하기 위해). 이 라이브러리를 다운로드 할 수있는 링크는 다음과 같습니다.
github.com/adafruit/Adafruit-GFX-Library
3. SparkFun VL6180
SparkFun_VL6180은 VL6180 센서의 기본 기능이있는 Arduino 라이브러리입니다. VL6180은 IR 이미 터, 범위 센서 및 I2C 인터페이스를 통해 통신하는 주변 광 센서로 구성됩니다. 이 라이브러리를 사용하면 센서의 거리 및 광 출력을 읽고 직렬 연결을 통해 데이터를 출력 할 수 있습니다. 이 라이브러리를 다운로드 할 수있는 링크는 다음과 같습니다.
downloads.arduino.cc/libraries/github.com/sparkfun/SparkFun_VL6180_Sensor-1.1.0.zip
Sketch >> Include library >> Add.ZIP library in Arduino IDE 로 이동하여 모든 라이브러리를 하나씩 추가합니다. 그런 다음 위 링크에서 다운로드 한 라이브러리를 업로드하십시오.
때로는 와이어 및 SPI 라이브러리를 추가 할 필요가 없지만 오류가 발생하면 다운로드하여 Arduino IDE에 추가하십시오.
github.com/PaulStoffregen/SPI
github.com/PaulStoffregen/Wire
프로그래밍 및 작업 설명
이 튜토리얼의 끝에는 작동하는 비디오 가 포함 된 완전한 코드 가 제공됩니다. 여기서는 프로젝트 작동을 이해하기위한 완전한 프로그램을 설명합니다.
이 프로그램에서 대부분의 부품은 우리가 추가 한 라이브러리에 의해 처리되므로 걱정할 필요가 없습니다.
에서 설정 부분 들 115200로 전송 속도를 설정하고 I2C에 대한 와이어 라이브러리를 초기화합니다. 그런 다음 VL6180 센서가 제대로 작동하는지 확인하고 작동하지 않으면 오류 메시지를 표시합니다.
다음 부분에서는 디스플레이를 설정합니다. 여기서 원하는 값으로 대비를 변경할 수 있습니다. 여기서는 50으로 설정합니다.
void setup () { Serial.begin (115200); // 115200bps에서 직렬 시작 Wire.begin (); // I2C 라이브러리 시작 delay (100); // 지연. if (sensor.VL6180xInit ()! = 0) { Serial.println ("FAILED TO INITALIZE"); // 장치 초기화 및 오류 확인 }; sensor.VL6180xDefautSettings (); // 시작하려면 기본 설정을로드합니다. 지연 (1000); // 1 초 지연 display.begin (); // 초기화 완료 // 최상의보기를 위해 디스플레이를 조정하기 위해 주변의 대비를 변경할 수 있습니다 . display.setContrast (50); display.display (); // 스플래시 화면 표시 display.clearDisplay (); }
에서 보이드 루프 부분 설정 명령들은 LCD 스크린의 값을 표시한다. 여기에 두 개의 값이 표시됩니다. 하나는 "럭스 단위의 주변 광 수준"(1 럭스는 실제로 평방 미터 면적당 1 루멘)이고 두 번째 값은 "mm 단위로 측정 된 거리"입니다. LCD 화면에 다른 값을 표시하려면 "display.setCursor (0,0);"을 사용하여 LCD 화면에 표시해야하는 각 텍스트의 위치를 정의합니다.
void loop () { display.clearDisplay (); // 주변 광 수준을 가져오고 LUX에서보고 Serial.print ("Ambient Light Level (Lux) ="); Serial.println (sensor.getAmbientLight (GAIN_1)); display.setTextSize (1); display.setTextColor (BLACK); display.setCursor (0,0); display.println ("조명 수준"); display.setCursor (0,12); display.println (sensor.getAmbientLight (GAIN_1)); // 거리를 가져오고 mm 단위로보고 Serial.print ("측정 된 거리 (mm) ="); Serial.println (sensor.getDistance ()); display.setTextSize (1); display.setTextColor (BLACK); display.setCursor (0, 24); display.println ("거리 (mm) ="); display.setCursor (0, 36); b = sensor.getDistance (); display.println (b); display.display (); 지연 (500); }
프로그램을 업로드 한 후 시리얼 모니터를 열면 아래와 같이 출력됩니다.
VL6180 TOF 거리 측정기는 스마트 폰, 휴대용 터치 스크린 장치, 태블릿, 랩톱, 게임 장치 및 가정용 기기 / 산업용 장치에 사용됩니다.
여기에서는 주변 광 수준을 Lux 단위로, 거리는 mm 단위로 표시합니다.
아래 에서 전체 프로그램 및 데모 비디오를 찾으 십시오. 또한 초음파 센서를 이용한 거리 측정 방법과 BH1750 주변 광 센서를 이용한 조도 측정 방법도 확인하십시오.