K210连接TOF400获得距离信息
修改时间:2021/7/27:
- 最近又用上这个模块发现了之前的一个bug,导致测距实测测不到4米,重新修改了教程
最近刚好需要一个测距模块用于小车对目标进行测距使用,需要高精度的测距模块,可见的TOF400的精度还算不错,误差5%以内,比传统超声波和红外模块效果好了不少(ps:第一次用这么贵的测距模块)。
注:这个使用方法兼顾使用micropython的所有单片机
- 详细参数:
完整文档
先连接TOF与K210,TOF400也支持I2C读写数据(还没研究懂),所以我在这里使用的是UART的方式
from machine import UART
fm.register(10, fm.fpioa.UART1_TX, force=True)
fm.register(11, fm.fpioa.UART1_RX, force=True)
自定义引脚 10为UART_TX 11为UART_RX
连接UART_TX到TOF400上的RXD引脚,UART_RX连接到TXD引脚。
VIN连接K210上的3.3V供电引脚,GND连GND
uart = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)
设置串口号,波特率,数据位,等待时间,最大数据长度
由于TOF400采用了modbus协议模式
modbus协议返回的数据表:
实际距离数据存在了第四和第五个字节,所以将串口中的信息接收后读取个字符串即可解出距离信息
由于存在于两个字节中,我们还需要把字节拼起来
这里有两个方法
- 1:字符拼接法
b=uart3.read()
if b!= None:
a =hex(b[3])+hex(b[4])
a = a.replace('0x','')
a = '0x'+a
print("a:",int(a))
- 2:数学运算法
b=uart3.read()
if b!= None:
print("tof=",b[3]*255+b[4])
显而易见第二个方法更好用,不过只能对于小数据才能这样处理
- 运行效果如下:
- 完整程序:
from fpioa_manager import fm
import time
from machine import UART
fm.register(10, fm.fpioa.UART1_TX, force=True)
fm.register(11, fm.fpioa.UART1_RX, force=True)
# need your connect hardware IO 10/11 to loopback
uart = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)
#uart.write(b'hello world')
while True
time.sleep(1)
b=uart.read()
if b!= None:
a =hex(b[3])+hex(b[4])
print("tof=",b[3]*255+b[4])
a = a.replace('0x','')
a = '0x'+a
print("a:",int(a))
return print(hex(b[3])+hex(b[4]))
uart.deinit()
del uart