모듈은 써 보고 싶은데 정보가 많지 않아서 글을 한 번 작성해 본다.
먼저, TF-LC02 LiDAR 모듈을 사용한다.
나는 Aliexpress 에서 개인 프로젝트 용으로 모듈을 구매하였다.
6904.0₩ 25% OFF|TF LC02 ToF 레이저 라이더 거리 측정 센서 모듈, 통신 인터페이스, UART TDC VCSEL, Rang Robo
Smarter Shopping, Better Living! Aliexpress.com
ko.aliexpress.com
저렇게 생긴 모듈을 구매하였다. 앞서 말하는데, 나는 TTL to USB 케이블(정품) 을 사용할 수 있는 환경이다.
USB to TTL Serial Cable / 디바이스마트 (devicemart.co.kr)
USB to TTL Serial Cable
PL2303TA(PL2303HX) 칩셋을 이용한 USB to TTl 컨버터
www.devicemart.co.kr
정품이 아닌 버전은 최신 윈도우에서 포트에 자동으로 잡히지 않고 알 수 없는 장치라고 뜨는 이슈가 있다는데, 나는 이거까지는 잘 모르겠다.
기본적인 유저 가이드, 데이터시트는 다음과 같다.
TF-LC02 [BXDPTFLC0201] (youyeetoo.com)
사이트에 들어가게 되면 파일들이 존재한다.
유저 가이드의 경우 굉장히 간단한데 있을 것은 다 있다.
참고 코드는 해당 사이트의 아두이노 코드를 사용했다.
Benewake(北醒) TF-LC02 (TTL) 雷达使用TTL转USB转接板在Arduino Uno上的运用-CSDN博客
Benewake(北醒) TF-LC02 (TTL) 雷达使用TTL转USB转接板在Arduino Uno上的运用-CSDN博客
前言 本例程仅用作参考 Benewake(北醒) TF-LC02产品简要说明 性能参数 产品图片及尺寸 Arduino开发板介绍 参考链接:常用Arduino板介绍 Benewake(北醒) TF-LC02 接口及通讯协议说明 接口定义 串口协议说明
blog.csdn.net
연결은 다음과 같이 한다.
TF-LC02 는 다음 그림과 같은 구조를 가진다. 기본적으로 이 구조를 따르되, 조금 변경을 할 예정이다.
변경한 그림은 다음과 같다.
TTL to USB 로 들어가는 RX 단에 TF-LC02 의 TX 를 물려주는 것만 바꿨다. 직접 TX hex 값을 받아온다.
구조는 알아보기 힘들지만 이렇게 생겼다.
그런데 TF-LC02 는 선이 짧게 오고, 이게 가장 큰 문제가 뭐냐면, 끝이 갈라진다.
갈라지는 케이블이라, 형태가 유지 되게끔 납을 살짝 칠해 주거나, 남는 아두이노 점퍼 케이블 헤더부분을 납땜해 사용해서 붙여야 한다.
python 코드는 다음과 같다. (일반적인 테스트 용이다.)
import serial # pip install pyserial
import binascii # pip install binascii
try:
# Change Serial('COM Port to your environment')
ser = serial.Serial('COM5', 115200)
except serial.SerialException as e:
print(f"Error opening serial port: {e}")
exit(1)
while True:
if ser.readable():
s = ser.read(1) # Reading 1 byte at a time
hex_string = binascii.hexlify(s).decode('utf-8')
print(hex_string, end=" ")
if hex_string == 'fa':
print("\n")
Python 코드의 결과로 위 사진과 같은 hex 배열을 얻게 된다.
0x55 0xAA 는 헤더고, 0xFA 는 end sign 이다. 데이터시트를 보면 예시도 있으므로 참고하면 되겠다.
예시를 한 번 보자.
현재 아두이노 코드는 command 를 measuring distance 하나만 보내고 있다.
0x0155 가 왜 341이 나올까? 이는 hex 값이기 때문이다.
0 * 16^3 + 1 * 16^2 + 5 * 16^1 + 5 = 256 + 80 + 5 = 341 (단위 mm)
detect 되는 거리는 3cm ~ 2m 까지이기 때문에 최대 2000 mm 까지 감지 가능하다.
참고) 2000 은 0x07D0
참고) 앞에 나왔던 55 AA 81 03 에서 03 은 다음과 같음
그럼 길이를 한번 다시 재본다.
코드는 다음과 같다.
import serial # pip install pyserial
import binascii # pip install binascii
idx = 0
distance = 0
try:
# Change Serial('COM Port to your environment')
ser = serial.Serial('COM5', 115200)
except serial.SerialException as e:
print(f"Error opening serial port: {e}")
exit(1)
while True:
if ser.readable():
s = ser.read(1) # Reading 1 byte at a time
hex_string = binascii.hexlify(s).decode('utf-8')
if idx == 4 or idx == 5:
# Append incoming hex values and convert to decimal
if idx == 4:
distance = int(hex_string, 16) << 8 # Shift left by 8 bits for the high byte
elif idx == 5:
distance += int(hex_string, 16) # Add the low byte value
print(f"Distance: {distance} mm") # Print the distance
if idx == 6 and hex_string != '00':
print("WARNING: Out of range!")
# Index increment
idx += 1
if hex_string == 'fa':
# Reset packet on end signal
idx = 0
distance = 0
print("\n")
정상적으로 출력되는 것을 볼 수 있다.
time.sleep() 을 사용해서 딜레이도 줘 봤는데, UART 통신이 뭔가 이상해져서 다시 뺐다.
'취미 & 아무거나' 카테고리의 다른 글
[DL] 취미로 하는 Faster R-CNN - Anchor box (0) | 2024.07.08 |
---|---|
[Compiler] Liveness analysis w. CFG (0) | 2024.06.17 |
[YOLOv8] 이미지 확인을 위한 Image Convert (0) | 2024.06.04 |
[YOLOv8] YOLOv8n 내부 가중치 확인하기 (0) | 2024.06.04 |
[YOLOv8] YOLOv8n 맛보기 + 커스텀 데이터셋 (0) | 2024.06.03 |