制作一个避障机器人

网友投稿 236 2024-02-20


  这个项目是针对我的计划的,一种自动驾驶机器人汽车,可以检测学校并避免人工智能自动将它撞到或挡住的障碍物。

制作一个避障机器人

  该项目的材料

  阿杜尼 UNO

  电机驱动器屏蔽

  2轮汽车场景

  电机伺服器

  明明传感器

  软件:

  Arduino IDE

  电机屏蔽库

  新建平库

  第1步

  制造第一个 Arduino机器人轮毂。该套件的底座、两个电池座、一个前座、一些和电线。

  第2步

  在电机上焊接黑粗线和红线。

  第3步

  装上前轮。

  第4步

  路开关后,有一个连接处的另一端连接到电池座。剪断电池的侧线位置然后到电池座。我们的房子准备到电池座。 。

  第5步

  话下一步将电机连接到监视的 M1。

  第 6 步

  继续前进到电机。该为电机和伺服电机提供电源,使我们的项目更容易。电机需要电流,而这个屏蔽可以为每个电机提供高达 600mA 的电流,这就是它的原因将4根电线焊接到电机上。然后电线传感器连接处将焊接一个V,一个焊接接地线,一个焊接到与模型连接的5个。 5,最后一个焊接到外壳上。到模拟地图4。

  第 7 步

  下一个,将电机罩连接到电机上。一面,将 Arduino 安装到机箱上。使用连接座上,将我们的天线座和天线连接到电机上,并连接到电机,并将它们都送到机器人上。我将伺服电机用连接到连接胶上。

  超音速传感器

  按照以下步骤来配置超音速传感器:

  第一个接地点通过连接线的超速连接线到达 5 步

  ECHO 传感器到接地线连接到接地端 1 步前 5,TRIG 接地线连接到我们连接 4 个。

  第2个连接器的下步

  连接,将我们开关的线连接到电机罩,将它连接到这个外部电源连接器。 2 黑开关的红线连接器将我们打开开关,我们可以打开开关。看到 LED 亮起,Arduino 正在接收电池供电。

  第3步

  最后我们将伺服电机连接到servo_2插槽。右边较深的颜色中间为红色,左边为橙色。

  软件

  项目代码使用三个库。必须下载这里的两个能力编译程序。第一个是 Adafruit 的电机屏蔽驱动器。第二个库找到超音速传感器的 NewPing 库。你可以在此处使用这两个库的链接:

  Arduino IDE代码:

  #include  

#include    

#include

#define TRIG_PIN A4 

#define ECHO_PIN A5

#define MAX_DISTANCE_POSSIBLE 1000 

#define MAX_SPEED 150 // 

#define MOTORS_CALIBRATION_OFFSET 3

#define COLL_DIST 20 

#define TURN_DIST COLL_DIST+10 

NewPing声纳(TRIG_PIN,ECHO_PIN,MAX_DISTANCE_POSSIBLE);

AF_DCMotor leftMotor(4, MOTOR12_8KHZ); 

AF_DCMotor rightMotor(3, MOTOR12_8KHZ); 

伺服颈部控制器ServoMotor;

整数位置 = 0; 

int maxDist = 0;

int maxAngle = 0;

int maxRight = 0;

int maxLeft = 0;

int maxFront = 0;

国际课程= 0;

int curDist = 0;

字符串电机组 = "";

int speedSet = 0;

无效设置() {

  颈部控制器伺服电机。附加(10);  

  颈部控制器伺服电机.write(90); 

  延迟(2000);

  检查路径(); 

  motorSet = "前进"; 

  颈部控制器伺服电机.write(90);

  向前移动();

}

无效循环() {

  checkForward();  

  检查路径();

}

无效 checkPath() {

  int curLeft = 0;

  int curFront = 0;

  int curRight = 0;

  int curDist = 0;

  颈部控制器伺服电机.write(144);

  延迟(120); 

  for(pos = 144; pos >= 36; pos-=18)

  {

    eckControllerServoMotor.write(pos);

    延迟(90);

    checkForward(); 

    curDist = readPing();

    if (curDist < COLL_DIST) {

      checkCourse();

      休息;

    }

    if (curDist < TURN_DIST) {

      changePath();

    }

    if (curDist > curDist) {maxAngle = pos;}

    if (pos > 90 && curDist > curLeft) { curLeft = curDist;}

    if (pos == 90 && curDist > curFront) {curFront = curDist;}

    if (pos < 90 && curDist > curRight) {curRight = curDist;}

  }

  maxLeft = curLeft;

  maxRight = curRight;

  最大前沿 = 当前前沿;

}

void setCourse() {

    if (maxAngle < 90) {turnRight();}

    if (maxAngle > 90) {turnLeft();}

    maxLeft = 0;

    最大权利 = 0;

    最大前沿 = 0;

}

无效 checkCourse() {

  moveBackward();

  延迟(500);

  移动停止();

  设置课程();

}

void changePath() {

  if (pos < 90) {lookLeft();} 

  if (pos > 90) {lookRight();}

}

int readPing() {

  延迟(70);

  unsigned int uS = sonar.ping();

  int cm = uS/US_ROUNDTRIP_CM;

  返回厘米;

}

void checkForward() { if (motorSet=="FORWARD") {leftMotor.run(FORWARD); rightMotor.run(FORWARD); } }

void checkBackward() { if (motorSet=="BACKWARD") {leftMotor.run(BACKWARD); rightMotor.run(BACKWARD); } }

无效 moveStop() {leftMotor.run(RELEASE); rightMotor.run(RELEASE);}

无效 moveForward() {

    motorSet = "FORWARD";

    leftMotor.run(FORWARD);

    rightMotor.run(FORWARD);

  for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2)

  {

    leftMotor.setSpeed(speedSet+MOTORS_CALIBRATION_OFFSET);

    rightMotor.setSpeed(speedSet);

    延迟(5);

  }

}

无效 moveBackward() {

    motorSet = "BACKWARD";

    leftMotor.run(BACKWARD);

    rightMotor.run(BACKWARD);

  for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2)

  {

    leftMotor.setSpeed(speedSet+MOTORS_CALIBRATION_OFFSET);

    rightMotor.setSpeed(speedSet);

    延迟(5);

  }

}  

无效 turnRight() {

  motorSet = "RIGHT";

  leftMotor.run(FORWARD);

  rightMotor.run(BACKWARD);

  延迟(400);

  motorSet = "前进";

  leftMotor.run(FORWARD);

  rightMotor.run(FORWARD);      

}  

无效 turnLeft() {

  motorSet = "LEFT";

  leftMotor.run(BACKWARD);

  rightMotor.run(FORWARD);

  延迟(400);

  motorSet = "前进";

  leftMotor.run(FORWARD);

  rightMotor.run(FORWARD);

}  

无效lookRight() {rightMotor.run(BACKWARD); 延迟(400);rightMotor.run(FORWARD);}

void lookLeft() {leftMotor.run(BACKWARD); 延迟(400);leftMotor.run(FORWARD);}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于爬壁机器人运动方式的简单介绍
下一篇:蛋白质快速检测仪的功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~