반응형

모듈은 써 보고 싶은데 정보가 많지 않아서 글을 한 번 작성해 본다.

 

먼저, TF-LC02 LiDAR 모듈을 사용한다.

 

나는 Aliexpress 에서 개인 프로젝트 용으로 모듈을 구매하였다.

 

TF-LC02 ToF 레이저 라이더 거리 측정 센서 모듈, 통신 인터페이스, UART TDC VCSEL, Rang Robotics 스마트 홈, 940nm - AliExpress 502

 

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 값을 받아온다.

 

구조는 알아보기 힘들지만 이렇게 생겼다.

 

 

빨간색 부터 VCC, 검은색 GND, ...

 

그런데 TF-LC02 는 선이 짧게 오고, 이게 가장 큰 문제가 뭐냐면, 끝이 갈라진다.

 

갈라지는 케이블이라, 형태가 유지 되게끔 납을 살짝 칠해 주거나, 남는 아두이노 점퍼 케이블 헤더부분을 납땜해 사용해서 붙여야 한다.

 

아두이노 점퍼케이블

 

 


 

 

BasicReading.ino
0.00MB

 

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 은 다음과 같음

03은 뒤에 나오는 parameter 길이

 

그럼 길이를 한번 다시 재본다.

코드는 다음과 같다.

 

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 통신이 뭔가 이상해져서 다시 뺐다.

 

반응형

+ Recent posts