這個(gè)項(xiàng)目是針對(duì)我的計(jì)劃的,一種自動(dòng)駕駛機(jī)器人汽車,可以檢測學(xué)校并避免人工智能自動(dòng)將它撞到或擋住的障礙物。
該項(xiàng)目的材料
阿杜尼 UNO
2輪汽車場景
電機(jī)伺服器
明明傳感器
軟件:
Arduino IDE
電機(jī)屏蔽庫
新建平庫
第1步
制造第一個(gè) Arduino機(jī)器人輪轂。該套件的底座、兩個(gè)電池座、一個(gè)前座、一些和電線。
第2步
在電機(jī)上焊接黑粗線和紅線。
第3步
裝上前輪。
第4步
路開關(guān)后,有一個(gè)連接處的另一端連接到電池座。剪斷電池的側(cè)線位置然后到電池座。我們的房子準(zhǔn)備到電池座。 。
第5步
話下一步將電機(jī)連接到監(jiān)視的 M1。
第 6 步
繼續(xù)前進(jìn)到電機(jī)。該為電機(jī)和伺服電機(jī)提供電源,使我們的項(xiàng)目更容易。電機(jī)需要電流,而這個(gè)屏蔽可以為每個(gè)電機(jī)提供高達(dá) 600mA 的電流,這就是它的原因?qū)?根電線焊接到電機(jī)上。然后電線傳感器連接處將焊接一個(gè)V,一個(gè)焊接接地線,一個(gè)焊接到與模型連接的5個(gè)。 5,最后一個(gè)焊接到外殼上。到模擬地圖4。
第 7 步
下一個(gè),將電機(jī)罩連接到電機(jī)上。一面,將 Arduino 安裝到機(jī)箱上。使用連接座上,將我們的天線座和天線連接到電機(jī)上,并連接到電機(jī),并將它們都送到機(jī)器人上。我將伺服電機(jī)用連接到連接膠上。
超音速傳感器
按照以下步驟來配置超音速傳感器:
第一個(gè)接地點(diǎn)通過連接線的超速連接線到達(dá) 5 步
ECHO 傳感器到接地線連接到接地端 1 步前 5,TRIG 接地線連接到我們連接 4 個(gè)。
第2個(gè)連接器的下步
連接,將我們開關(guān)的線連接到電機(jī)罩,將它連接到這個(gè)外部電源連接器。 2 黑開關(guān)的紅線連接器將我們打開開關(guān),我們可以打開開關(guān)??吹?LED 亮起,Arduino 正在接收電池供電。
第3步
最后我們將伺服電機(jī)連接到servo_2插槽。右邊較深的顏色中間為紅色,左邊為橙色。
軟件
項(xiàng)目代碼使用三個(gè)庫。必須下載這里的兩個(gè)能力編譯程序。第一個(gè)是 Adafruit 的電機(jī)屏蔽驅(qū)動(dòng)器。第二個(gè)庫找到超音速傳感器的 NewPing 庫。你可以在此處使用這兩個(gè)庫的鏈接:
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;
整數(shù)位置 = 0;?
int maxDist = 0;
int maxAngle = 0;
int maxRight = 0;
int maxLeft = 0;
int maxFront = 0;
國際課程= 0;
int curDist = 0;
字符串電機(jī)組 = "";
int speedSet = 0;
無效設(shè)置() {
? 頸部控制器伺服電機(jī)。附加(10); ?
? 頸部控制器伺服電機(jī).write(90);?
? 延遲(2000);
? 檢查路徑();?
? motorSet = "前進(jìn)";?
? 頸部控制器伺服電機(jī).write(90);
? 向前移動(dòng)();
}
無效循環(huán)() {
? checkForward(); ?
? 檢查路徑();
}
無效 checkPath() {
? int curLeft = 0;
? int curFront = 0;
? int curRight = 0;
? int curDist = 0;
? 頸部控制器伺服電機(jī).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;
? 最大前沿 = 當(dāng)前前沿;
}
void setCourse() {
? ? if (maxAngle < 90) {turnRight();}
? ? if (maxAngle > 90) {turnLeft();}
? ? maxLeft = 0;
? ? 最大權(quán)利 = 0;
? ? 最大前沿 = 0;
}
無效 checkCourse() {
? moveBackward();
? 延遲(500);
? 移動(dòng)停止();
? 設(shè)置課程();
}
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 = "前進(jìn)";
? leftMotor.run(FORWARD);
? rightMotor.run(FORWARD); ? ? ?
} ?
無效 turnLeft() {
? motorSet = "LEFT";
? leftMotor.run(BACKWARD);
? rightMotor.run(FORWARD);
? 延遲(400);
? motorSet = "前進(jìn)";
? leftMotor.run(FORWARD);
? rightMotor.run(FORWARD);
} ?
無效lookRight() {rightMotor.run(BACKWARD);?延遲(400);rightMotor.run(FORWARD);}
void lookLeft() {leftMotor.run(BACKWARD);?延遲(400);leftMotor.run(FORWARD);}
評(píng)論