Nano智能小车之自动避障版
本帖最后由 ngxxczlwh 于 2020-3-12 22:36 编辑先上一个小视频,Nano自动避障智能小车跑起来是这样的:lol
B站小视频
0.功能简介:
<0>自动行驶
<1>自动避障
1.硬件组成:
<0>小车底盘
<1>Nano主板
<2>L298N电机驱动板
<3>超声波传感器
<4>舵机
<5>锂电池及电池盒
<6>面包板
<7>线材
传感器模块选用了HC-SR04超声波传感器。相对于红外传感器,超声波传感器的精度要高,受环境光线的影响也小。因此选择了超声波传感器作为小车的“眼睛”。
调试程序时,为了能读取超声波传感器的测量值,我另外还加了一块OLED显示屏(屏小了,但只有它了,将就用了:P),及时显示出距离值。
2.程序设计
有了上次制作遥控小车的经验,这次制作自动避障小车就驾轻就熟了。先编写基础的功能模块,需要被其他模块调用的函数先写,被调用的模块放在上方。
<0>基础模块
基础模块主要实现小车的基本控制,比如:前进、后退、停止、左转、右转。这里使用了PWM来控制车速,并定义了一个变量speed用于控制小车速度。
【前进】
【后退】
【停止】
【左转】
【右转】
<1>主程序
(0)初始化模块
初始化模块里定义了一些变量用于存放各种数值。
speed:车速;turn_delaytime:小车转向时的马达工作时间;front_distance:超声波探测到的前方障碍物距离;
left_distance:超声波探测到的左边障碍物距离;right_distance:超声波探测到的左边障碍物距离;
collide_distance:设定的碰撞安全距离。小车与前方障碍物的距离小于这个距离时,小车要停下来。
status_car:小车的状态。用于记录小车是不是在前进,布尔型,1表示为小车在前进。
最后,初始化一下舵机。
(1)主循环
主循环很简单。
首先判断小车是不是在前进,如果不是则让小车前进并改变状态变量status_car的值(取反);
读取超声波探测的障碍物距离,并赋值给front_distance;
如果front_distance的值小于给定的安全距离(collide_distance)则改变状态变量status_car的值(取反),并调用avoidance模块,执行避障指令。
<2>避障模块(avoidance模块)
进入避障模块,首先把小车停下;
然后左、右、前三个方向探测障碍物的距离,分别赋值给left_distance、right_distance、front_distance三个变量,并调用display_distance函数将距离的数值在OLED屏上显示出来,便于调试;
然后是个判断,如果左边障碍物的距离大于前面和右边的,则让小车左转;如果右边的障碍物的距离大于前面和左边的,则让小车右转;如果前方障碍物的距离大于左边和右边的,而且小于安全距离(小车可能进入了死胡同),则让小车倒车后再左转。
最后,附上OLED屏显示距离的模块
至此,完毕。
待改进的地方:
1.有时前面没有障碍物,小车会无缘无故的停下。可能原因:超声波精度不足,或是受到什么干扰。
开头插入了一个B站视频,怎么不行,不能播放。
等会直接插入一个链接吧。 下一步,想整一个声控的小车。
不知道有什么声控的模块好用的,还请大家不吝赐教哈
页:
[1]