【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