【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协议返回的数据表:
QQ%E6%88%AA%E5%9B%BE20210406205212.jpg

实际距离数据存在了第四和第五个字节,所以将串口中的信息接收后读取个字符串即可解出距离信息
由于存在于两个字节中,我们还需要把字节拼起来

这里有两个方法

  • 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

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kamimiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值