Skip to content

将舵机、超声波结合,实现走迷宫功能的Arduino小车程序。

Notifications You must be signed in to change notification settings

wsslsy/arduinoMazeCar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 

Repository files navigation

Arduino 摇头舵机超声波迷宫小车

2020.11.25 更新

最近发现这几个小 Demo 还有人在下载,因此重新看了之前传的代码,发现各种注释和格式的不规范,不禁汗颜…… 想到下载这个项目的应该都是些初学者,为了不引人『误入歧途』,决定抽空把代码都规范一下。 需要注意的是,这几个项目的教学目标受众是只有微弱 C 基础的人。实际项目中,注释不应是代码的翻译。 希望大家学得开心!

概要

通过调用Arduino舵机以及SR04库,控制舵机带动超声波转向,测量不同方向的距离,从而规划走迷宫路径,进行壁障。

需要注意:与之前的单文件工程不同,此工程采用了多个文件的方式开发,这样增强了代码的可读性。 该项目的文件结构如下:

  • ..\servoUltraSonic.ino
  • ..\common.ino
  • ..\setting.h

下载后,打开..\servoUltraSonic.ino文件即可打开工程。

接线表

电机左A 电机左B 电机右A 电机右B ECHO TRIG 舵机信号
D6 D11 D5 D3 D7 D4 D9

程序讲解

将问题简化,是编程中应有的思维方式。

首先应默认小车在赛道中的行驶方式为直线行驶,直角转弯。这样,在宽度一定的赛道上,只测量车体右侧(或左侧)的距离就可以得到车体的位置信息。 因此我们只需获得车体前方距离,以及右侧(或左侧)的距离,就可以对车的运行状态做出规划,实现走迷宫的功能。 针对这两个距离,我们可以设置一个阈值,列出表格。 经过思考,我们可以针对几种简单的情况做出如下决策:

前方小于25cm 右方小于25cm 决策
直走
直走
右转
左转

总结情况,并转换为Arduino程序语言,可以写为:

void loop()
{
  // 声明两个长整形变量,用于存储前方、右方的测距结果。
  long forwardDistance = 0;
  long rightDistance = 0;
  // 调用函数测量前方距离
  forwardDistance = controlServoAndGetDistance(FORWARD);
  if (forwardDistance >= 25)
  {
    // 如果前方距离大于25cm,继续向前走。
    forward();
  }
  else
  {
    // 如果前方距离小于25cm,停车,测量右方距离。
    brake();
    rightDistance = controlServoAndGetDistance(RIGHT);
    if (rightDistance >= 25)
    {
      // 如果右方距离大于25cm,向右转。
      turn(RIGHT);
    }
    else
    {
      // 如果右方距离小于25cm,向左转。
      turn(LEFT);
    }
  }
}

经过验证,该控制逻辑符合要求,能适应一般的赛道。

迷宫小车程序的主要精华在于控制逻辑,这个简单的实例,仅作为抛砖引玉。希望可以激发你的想象,思考出更加完善的控制逻辑。

其他

工程已经上传到项目中,可以打包下载,其中有更详细的注释。

About

将舵机、超声波结合,实现走迷宫功能的Arduino小车程序。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published