edit

案例02 超声波避障

目的


使用Robit主板控制mBot迷你小车实现避障功能。

使用材料


知识提要


上一节:超声波测距中我们实现了使用超声波模块实时检测距离,在本节教程中,我们使用超声波模块实现mBot迷你小车的避障功能。

硬件连接


将左轮电机接入M1端口,右轮电机接入M2端口,超声波模块如上节教程一样接入J1端口。

软件


微软makecode

编程


步骤 1

在MakeCode的代码抽屉中点击Advanced,查看更多代码选项。

为了给超声波模块编程,我们需要添加一个代码库。在代码抽屉底部找到“Add Package”,并点击它。这时会弹出一个对话框。搜索“Robit",然后点击下载这个代码库。

注意:如果你得到一个提示说一些代码库因为不兼容的原因将被删除,你可以根据提示继续操作,或者在项目菜单栏里面新建一个项目。

步骤 2

程序初始化时,定义了一个away变量,用来表示检测到障碍物的距离,并将它置为0。

设置左轮电机M1、右轮电机M2速度均为20。

步骤3

创建一个forever循环,实时的从J1口读取超声波模块返回的数据,并且赋值给away。

防撞停车

当检测距离(away)距离小于8cm时,停车,暂停300ms后,设置M1,M2为负数实现倒车,延时600ms。

转向避障

当检测距离(away)距离小于15cm时,生成一个0到100的随机数。

当随机数小于50的时候M1电机赋负值,左轮倒转完成左转。

当随机数大于50的时候M2电机赋负值,右轮倒转完成左转。

如果检测距离(away)大于10cm而且不等于0,设置M1和M2速度20前进。

参考程序

参考程序连接:https://makecode.microbit.org/_X2g8PfeebXqv

你也可以通过下方网页直接下载程序。

注意: 设置速度过低时会造成电机运转不正常。

现象

mBot小车在检测到障碍物距离还有20cm时自动转向,转向后如距离障碍物太近自动倒车。

思考


为什么在防撞停车中要判断距离是否为0?

常见问题


问:为什么开启5X5点阵屏后,会导致无法避障?

答:LED点阵显示会严重拖慢程序运行速度,导致小车检测障碍物不及时,要使程序流畅运行,建议禁用5x5显示屏。

相关阅读


Robit简介

Robit教程01_超声波测距

Robit教程02_超声波避障