制作一个避障机器人

机器人

531人已加入

描述

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

  该项目的材料

  阿杜尼 UNO

  电机驱动器屏蔽

  2轮汽车场景

  电机伺服器

  明明传感器

  软件:

  Arduino IDE

  电机屏蔽库

  新建平库

  第1步

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

DIY设计

  第2步

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

DIY设计

  第3步

  装上前轮。

DIY设计

  第4步

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

DIY设计

  第5步

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

DIY设计

  第 6 步

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

DIY设计

  第 7 步

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

DIY设计

  超音速传感器

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

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

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

  第2个连接器的下步

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

DIY设计

  第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);}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分