本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于Arduino Uno制作智能避障机器人

发布时间:2021-09-26
分享到:

基于Arduino Uno制作智能避障机器人

发布时间:2021-09-26
分享到:

在本教程中,我将教您如何构建避障机器人。该机器人将是一辆小巧而简单的两轮汽车,它将向前移动,直到它检测到路径上的障碍物。这样做时,它会停下来,向后移动一点,然后向左和向右看。

然后它会比较两边的可用距离,然后转向可用距离似乎更相对的方向。这样它就可以在充满障碍物的环境中移动而不会与任何障碍物发生碰撞。这是在仓库机器人、无人驾驶汽车等各种应用中使用的防撞概念的一个小代表。

为了检测距离,机器人使用 HC-SR04 超声波传感器。所以这个传感器每 10 微秒发送一次超声波,如果前方有任何障碍物,传感器就会收到回声。根据行程时间,它知道传感器和物体之间的距离。那么让我们开始吧!

第 1 步:收集组件

首先,首先,我们显然需要收集构建机器人所需的组件和工具。在下面找到所需的组件和工具:

单个组件:

  • 阿杜诺UNO
  • L293D 电机护罩
  • 底盘(包括电机和车轮)
  • 电线
  • 电池座
  • 微型伺服电机 SG90
  • HC-SR04 超声波传感器
  • 传感器安装(可选)

工具(可选):

  • 烙铁
  • 热胶枪
  • 钢丝钳
  • 螺丝刀

第 2 步:连接电机和车轮

我对底盘做的第一件事是在前部添加一个脚轮,作为前部的第三个支撑轮,它可以自由旋转,因为它具有 360 度自由度。这样我们就可以避免使用 4 个轮子,而避免使用 2 轮机器人。

接下来我们需要做的是任何车辆相关项目中的经典步骤。将电机和车轮连接到底盘上。没有特别的方法可以做到这一点,因为每个人可能使用不同的底盘,但我想在这里提一件事:确保电机牢固固定并且水平相同,并且车轮完全指向前方。否则,您以后可能会遇到一些与运动相关的问题。

第 3 步:连接 Arduino 和电机扩展板

将 Arduino 板连接到机箱顶部。您可以以任何更喜欢的方式附加它。这可以使用一些垫片和螺钉,也可以使用一块双面胶带将 Arduino 板直接粘在机箱上。就个人而言,我总是会采用第一种方法,因为它看起来更专业。

然后只需将电机护罩插入 Arduino 板的顶部,您就可以开始了!

第 4 步:添加伺服电机和超声波传感器

现在我们需要添加机器人的传感机制。这包括三个组成部分。

  • 用于感应前方距离的超声波传感器
  • 用于左右旋转传感器的伺服电机
  • 将传感器固定在伺服电机上的传感器支架

我的底盘有一个用于连接伺服电机的切口,所以我只需将它插入切口中。如果你的也有,那就太好了。如果没有,则只需使用一条双面胶带将其粘在机箱正面。

然后使用传感器安装,将传感器连接到伺服电机并继续下一步!

第 5 步:接线

我们在这里再次提出三件事。因此,在为机器人接线时,我们需要注意三件事:

马达
电机屏蔽具有用于连接多达四个电机的端口,采用螺钉端子的形式。只需将电机连接到任意两个端子,因为我们只使用两个电机。

伺服电机
伺服电机只有一根插头线,里面有三根线。只需将其插入电机屏蔽上的伺服端子即S1 即可。

超声波传感器
有关超声波传感器与 Arduino 板的连接,请参阅上图。(或)连接:

  1. 传感器 GND : Arduino GND
  2. 传感器 VCC : Arduino +5V
  3. 传感器之旅:Arduino A4
  4. 传感器回声:Arduino A5

另外,将电池座连接到电机护罩的电池螺钉端子,然后再继续前进!

第 6 步:编码

//reseting the variable after the operations
 distance = readPing();
}

int lookRight()
{
    myservo.write(0); 
    delay(500);
    int distance = readPing();
    delay(100);
    myservo.write(90); 
    return distance;
}

int lookLeft()
{
    myservo.write(180); 
    delay(500);
    int distance = readPing();
    delay(100);
    myservo.write(90); 
    return distance;
    delay(100);
}

int readPing() { 
  delay(70);
  int cm = sonar.ping_cm();
  if(cm==0)
  {
    cm = 250;
  }
  return cm;
}

void moveStop() {
  motor1.run(RELEASE); 
  motor2.run(RELEASE);
  } 
  
void moveForward() {

 if(!goesForward)
  {
    goesForward=true;
    motor1.run(FORWARD);      
    motor2.run(FORWARD);      
   for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
   {
    motor1.setSpeed(speedSet);
    motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
    delay(5);
   }
  }
}

void moveBackward() {
    goesForward=false;
    motor1.run(BACKWARD);      
    motor2.run(BACKWARD);  
  for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
  {
    motor1.setSpeed(speedSet);
    motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
    delay(5);
  }
}  

void turnRight() {
  Serial.println("Turning Right");
  motor1.run(FORWARD);
  motor2.run(BACKWARD);     
  delay(turn_amount);
  motor1.run(FORWARD);      
  motor2.run(FORWARD);      

 
void turnLeft() {
  Serial.println("Turning Left");
  motor1.run(BACKWARD);     
  motor2.run(FORWARD);     
  delay(turn_amount);
  motor1.run(FORWARD);     
  motor2.run(FORWARD);
}  

以上就是项目的全部内容了,希望您能够喜欢!

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论