文章目录[隐藏]
简介:如何使用Arduino Uno避开机器人的智能障碍
嗨,大家好。在此指导中,我将教您如何构建避障机器人。该机器人将是一辆小型且简单的两轮汽车,它将向前移动,直到在其路径中检测到障碍物为止。这样做后,它将停止,向后移动一点,然后向左和向右看。
然后它将比较任一侧前方的可用距离,然后转向可用距离似乎相对大的方向。这样,它将能够在充满障碍的环境中移动而不会与任何物体碰撞。这只是在诸如仓库机器人,无人驾驶汽车等各种应用中使用的避免碰撞概念的小部分展示。
为了检测距离,机器人使用了HC-SR04超声波传感器。此传感器每10微秒发送一次超声波,如果前方有障碍物,则传感器会接收到回声。根据行程时间,它可以知道传感器与物体之间的距离。因此,让我们开始吧!
步骤1:收集组件
首先,显然,我们显然需要收集构建机器人所需的组件和工具。查找以下所需的组件和工具:
这里已经将所有组件放在一处了:Arduino机器人套件
各个组成部分:
- Arduino UNO
- L293D电机护罩
- 底盘(包括电机和车轮)
- 电线
- 电池座
- 微型伺服马达SG90
- HC-SR04超声波传感器
- 传感器安装座(可选)
工具(可选):
准备好组件并继续下一步!
步骤2:安装马达和车轮
我对底盘所做的第一件事是在前部增加了一个脚轮,该脚轮将在前部充当支撑性的第三轮,并且由于具有360度的自由度而可以自由旋转。这样,我们可以避免使用4个轮子,而只能使用2轮机器人。
接下来,我们需要做的是任何与车辆相关的项目中的经典步骤。将电动机和车轮连接到底盘。这样做没有特别的方法,因为每个人都可能使用不同的底盘,但是我想在这里提一件事:确保电动机牢固地固定且水平度相同,并且车轮正好指向前方。否则,您以后可能会遇到一些与运动有关的问题。
将电线焊接到电动机上,然后继续下一步!
步骤3:连接Arduino和Motor Shield
将Arduino板连接到机箱顶部。您可以以任何更可取的方式附加它。这可以使用一些垫片和螺钉,也可以使用一块双面胶带将Arduino板直接粘贴在机箱上。就我个人而言,我总是会选择第一种方法,因为它可以使它看起来更专业。
然后,只需将电动机护罩插入Arduino板的顶部,就可以了!
步骤4:添加伺服电机和超声波传感器
现在我们需要添加机器人的感应机制。这包括三个组成部分。
- 超声波传感器,用于感应前方的距离。
- 伺服电机,用于左右旋转传感器。
- 用于将传感器固定在伺服电机上的传感器安装座。
我的机箱上有一个用于安装伺服电机的切口,因此我只需要将其插入切口中即可。只需用一张双面胶带将其粘贴在机箱的前部即可。
然后使用传感器安装座,将传感器安装到伺服电机上,并继续进行下一步!
步骤5:接线
我们在这里再次有三件事。因此,在为机器人接线时需要注意三件事:
- 马达
电机护罩具有用于连接多达四个电机的端口,这些端口为螺钉端子形式。只需将电动机连接到任意两个端子即可,因为我们仅使用两个电动机。
- 伺服马达
伺服电机只有一根插头线,其中有三根线。只需将其插入电机罩上的伺服端子即S1即可。
- 超声波传感器
有关超声波传感器与Arduino板的连接,请参考上图。(或)连接:
- 传感器GND:Arduino GND
- 传感器VCC:Arduino + 5V
- 传感器跳闸:Arduino A4
- 传感器回声:Arduino A5
另外,将电池座连接到电动机护罩的电池螺钉端子,然后再次向前移动!
步骤 6:编码对决
现在是时候对机器人进行编码了,然后看看机器人是否可以正常工作!
您可以尝试自行编写机器人代码,以获得更好的体验和学习,但是您始终可以参考下面提供的我的代码。我还上传了Arduino代码文件。在尝试运行代码之前,请确保已安装Arduino IDE :)
请尝试在这些基础上继续前进,如果您这样做,则下面有一个名为“ I Made It”的部分。在那里见我。
//////////////////////////////////////////////////////// // Arduino Obstacle Avoiding Robot v2.0 // // By Aarav Garg - 2021 // //////////////////////////////////////////////////////// //including the libraries #include <AFMotor.h> #include <NewPing.h> #include <Servo.h> //defining pins and variables #define TRIG_PIN A4 #define ECHO_PIN A5 #define MAX_DISTANCE 200 #define MAX_SPEED 200 // sets speed of DC motors #define MAX_SPEED_OFFSET 20 #define turn_amount 500 //defining motors,servo,sensor NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); AF_DCMotor motor1(2, MOTOR12_8KHZ); AF_DCMotor motor2(1, MOTOR12_8KHZ); Servo myservo; //defining global variables boolean goesForward=false; int distance = 100; int speedSet = 0; void setup() { Serial.begin(9600); myservo.attach(10); myservo.write(90); delay(2000); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); } void loop() { int distanceR = 0; int distanceL = 0; delay(40); Serial.println(distance); if(distance<=15) { Serial.println("Object Detected"); moveStop(); delay(100); moveBackward(); delay(300); moveStop(); delay(200); distanceR = lookRight(); Serial.print("Distance Right = "); Serial.println(distanceR); delay(200); distanceL = lookLeft(); Serial.print("Distance Left = "); Serial.println(distanceL); delay(200); if(distanceR>=distanceL) { turnRight(); moveStop(); } else { turnLeft(); moveStop(); } } else { moveForward(); } //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); }</pre>
版权说明
如何使用Arduino Uno避开机器人的智能障碍
本文遵循CC BY-SA版权协议,转载请附上原文出处链接及本声明。
链接:https://chandianzi.cn/how-to-make-smart-obstacle-avoiding-robot-using-ar.html
作者:Aarav+G
版权协议:CC BY-NC-SA
分类名称:arduino-10
资源标识:How-to-Make-Smart-Obstacle-Avoiding-Robot-Using-Ar
暂无评论