【Maixduino-K210】TOF400光学测距模块

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(bhello 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
经验分享 程序员 微信小程序 职场和发展