这个项目是针对我的计划的,一种自动驾驶机器人汽车,可以检测学校并避免人工智能自动将它撞到或挡住的障碍物。
该项目的材料
阿杜尼 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);}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)