问题
只能测静态目标。动态目标会出现随机数字。所以,不能测动态目标的距离。所以,应该寻找TOF原理的激光测距模块,而不是使用机器元素这款相位法的模块。
接线
- 红色:VCC(5V-12V)
- 黑:GND
- 黄:A
- 白:B
程序如下:
import serial
import time
import serial.tools.list_ports
import pandas as pd
def serial_list():
port_list = list(serial.tools.list_ports.comports())
print(port_list)
if len(port_list) == 0:
print('无可用串口')
else:
for i in range(0,len(port_list)):
print(port_list[i])
def read_once(portx):
# portx="COM5"
bps=9600
timex=1
laser_open = b'\x80\x06\x02\x78'
try:
ser = serial.Serial(portx,bps,timeout=timex)
# time.sleep(1)
# hex_cmd = bytes([128,6,2,120]) # 读一次距离 bytes([0x80,0x06, 0x02, 0x78]) #
# print(hex_cmd)
result=ser.write(laser_open)
result2=ser.readline()#ser.inWaiting())
# print(result2)
result2 = list(result2)
if result2[0] == 128 and result2[1] == 6 and result2[2] == 130:
distance = (result2[3]-48)*100 + (result2[4]-48)*10 + (result2[5]-48) + (result2[7]-48)/10 + (result2[8]-48)/100 + (result2[9]-48)/1000
distance = round(distance,4)
# print("result2",result2)
print("distance:",distance,"米")
ser.close()#关闭串口
except:
print("串口没打开")
def read_many(portx):
# portx="COM5"
bps=9600
timex=1
laser_close = b'\x80\x06\x05\x00\x75' # 关闭激光
laser_open = b'\x80\x06\x03\x77'
try:
ser = serial.Serial(portx,bps,timeout=timex)
# time.sleep(1)
# hex_cmd = bytes([128,6,3,119]) # 连续读距离
result=ser.write(laser_open)
while True:
result2=ser.read(11)#ser.inWaiting())
if result2:
result2 = list(result2)
if result2[0] == 128 and result2[1] == 6 and result2[2] == 131:
distance = (result2[3]-48)*100 + (result2[4]-48)*10 + (result2[5]-48) + (result2[7]-48)/10 + (result2[8]-48)/100 + (result2[9]-48)/1000
distance = round(distance,4)
save_data = [(time.time(),distance)]
labels = ['time','data']
df = pd.DataFrame.from_records(save_data, columns=labels)
df.to_csv('D:/testdata.csv',mode='a',header=False,index = False)
print("distance:",distance,"米")
if distance <0.1: # 设置区间
ser.write(laser_close)
ser.close()
break
pass
else:
print("something wrong")
ser.close()#关闭串口
except:
print("串口没打开")
if __name__ == "__main__":
portx = "COM5"
read_once(portx)
# serial_list()
read_many(portx)
- 机器元素-激光测距模块通讯协议
波特率9600bps, 8位数据位,1位起始位,一位停止位,无奇偶校验.
功能描述 | 命令代码 | 返回代码 | 备注 |
---|---|---|---|
读取参数 | FA 06 01 FF | FA 06 81 ADDR xx xx xx..... CS | 读取常数,地址,回光量,温度 |
读取机器号 | FA 06 04 FC | FA 06 84 “DAT1 DAT2……DAT16”CS | DATn为ASCII格式 |
设置地址 | FA 04 01 ADDR CS | FA 04 81 81 | 操作成功 |
FA 84 81 02 FF | 写入地址错误返回 | ||
距离修改 | FA 04 06 符号(正或者负,负为0x2d,正为0x2b),0xXX(修正值,一个字节),CS | FA 04 8B 77 | 操作成功 |
FA 84 8B 01 F6 | 操作失败 | ||
连续测量时设置数据返回时间间隔 | FA 04 05 MeaInterver CS | FA 04 85 7D | 操作成功 |
FA 84 85 01 FC | 写入时间间隔错误 | ||
FA 84 85 01 FA | 操作失败 | ||
设置距离起止点 | FA 04 08 Position CS | FA 04 88 7A | 操作成功 |
FA 84 88 01 F9 | 操作失败 | ||
设定量程 | FA 04 09 Range CS Range : 05,10,30,50,80m | FA 04 89 79 | 操作成功 |
FA 84 89 01 F8 | 操作失败 | ||
设定频率 | FA 04 0A Freq CS Freq : 05 10 20 | FA 04 8A 78 | 操作成功 |
FA 84 8A 01 F7 | 操作失败 | ||
设定分辨率 | FA 04 0C Resolution CS Resolution :1(1mm),2(0.1mm) | FA 04 8C 76 | 操作成功 |
FA 84 8C 01 F5 | 操作失败 | ||
设定上电即测 | FA 04 0D Start CS Start : 0(关闭),1(开启) | FA 04 8D 75 | 操作成功 |
FA 84 8D 01 F4 | 操作失败 | ||
单次测量(广播命令,返回结果存入模块缓存) | FA 06 06 FA | 无返回返回代码,模块测量后将结果存入缓存 | |
读取缓存 | ADDR 06 07 CS | 同 单次测量 返回代码 | |
单次测量(1mm) | ADDR 06 02 CS | ADDR 06 82”3X 3X 3X 2E 3X 3X 3X”CS | 正确返回 |
ADDR 06 82”’E’ ’R’ ’R’ ’-’ ’-’ ’3X’ ’3X’ ”CS | 错误返回 | ||
单次测量(0.1mm) | ADDR 06 02 CS | ADDR 06 82”3X 3X 3X 2E 3X 3X 3X 3X”CS | 正确返回 |
ADDR 06 82”’E’ ’R’ ’R’ ’-’ ’-’ ‘-‘’3X’ ’3X’ ”CS | 错误返回 | ||
连续测量(1mm) | ADDR 06 03 CS | ADDR 06 83” 3X 3X 3X 2E 3X 3X 3X”CS | 正确返回 |
ADDR 06 83” ’E’ ’R’ ’R’ ’-’ ’-’ ’3X’ ’3X’”CS | 错误返回 | ||
连续测量(0.1mm) | ADDR 06 03 CS | ADDR 06 83” 3X 3X 3X 2E 3X 3X 3X 3X”CS | 正确返回 |
ADDR 06 83” ’E’ ’R’ ’R’ ’-’ ’-’ ‘-‘’3X’ ’3X’”CS | 错误返回 | ||
控制激光打开或关闭 | ADDR 06 05 LASER CS (LASER : 00 关闭,01 开启) | ADDR 06 85 01 CS | 正确返回 |
ADDR 06 85 00 CS | 错误返回 | ||
关机 | ADDR 04 02 CS | ADDR 04 82 CS |
注:以上命令及返回数据均为16进制格式
- ADDR 为机器地址
- Postion为1时由顶端算起,为0时由尾端算起,默认设置为尾端(程序中有测距仪长度,由距离修正到顶端后,再加此长度即可设置到尾端)
- CS 为校验字节,其为前面所有字节求和,返回取反加1
- 在单次测量和连续测量返回数据中,引号中为数据部分,其格式为ASCII格式 如:123.456米 显示为31 32 33 2E 34 35 36
- ADDR 默认值为80(128)
参数为出厂设置时,读取数据的命令:
单次测量:80 06 02 78
连续测量:80 06 03 77
关机:80 04 02 7A
设置地址 : FA 04 01 80 81
距离修改 : FA 04 06 2D 01 CE -1
FA 04 06 2B 01 D0 +1
时间间隔(1S) : FA 04 05 01 FC
时间间隔(取消):FA 04 05 00 FD
设置起始点 : FA 04 08 01 F9 顶端
FA 04 08 00 FA 尾端
设置量程 : FA 04 09 05 F4 5m
FA 04 09 0A EF 10m
FA 04 09 1E DB 30m
FA 04 09 32 C7 50m
FA 04 09 50 A9 80m
设置频率 : FA 04 0A 00 F8
FA 04 0A 05 F3 5
FA 04 0A 0A EE 10
FA 04 0A 14 E4 20
设定分辨率 : FA 04 0C 01 F5 1mm
FA 04 0C 02 F4 0.1mm
设定上电就测 : FA 04 0D 00 F5 关闭
FA 04 0D 01 F4 开启
单次测量(广播)FA 06 06 FA
读取缓存 : 80 06 07 73
控制激光 : 80 06 05 01 74 开启
80 06 05 00 75 关闭
网友评论