第一次做,很粗糙,都是模塊的組合,變速箱用的是模型小車的,最大的難點(diǎn)在于變速箱和馬達(dá)齒輪的配合因?yàn)橥耆遣慌涮椎膬蓸訓(xùn)|西,視頻中小車也有走外的跡象,配合是主要問(wèn)題,兩塊亞克力板的孔沒(méi)有打好,在安裝上還是有瑕疵
智能小車接線
重要的電機(jī)驅(qū)動(dòng)擴(kuò)展板到了
最初的設(shè)想想加個(gè)散熱扇
這邊用到了接口擴(kuò)展板
舵機(jī)到貨,有點(diǎn)小貴,金屬齒的
搭建中,,,
程序DEBUG中
完成圖
變速箱和馬達(dá)
為了使用大扭力電機(jī),改變了原有變速箱的安裝方式
代碼部分
//超聲波智能避障車程序(ARDUINO)
#include
int pinI1=5;//定義I1接口(I1-I4是l298N擴(kuò)展模塊上的電機(jī)輸出接口)
int pinI2=4;//定義I2接口
int pinI3=7;//定義I3接口
int pinI4=6;//定義I4接口
int inputPin = A1; // 定義超音波信號(hào)接收腳位(插錯(cuò)的后果,讀值為0,舵機(jī)不停地轉(zhuǎn)頭)
int outputPin =A0; // 定義超音波信號(hào)發(fā)射腳位
int Fspeedd = 0; // 前速
int Rspeedd = 0; // 右速
int Lspeedd = 0; // 左速
int directionn = 0; // 前=8 後=2 左=4 右=6
Servo myservo; // 設(shè) myservo
int delay_time = 250; // 伺服馬達(dá)轉(zhuǎn)向後的穩(wěn)定時(shí)間
int Fgo = 8; // 前進(jìn)
int Rgo = 6; // 右轉(zhuǎn)
int Lgo = 4; // 左轉(zhuǎn)
int Bgo = 2; // 倒車
void setup()
{
Serial.begin(9600); // 定義馬達(dá)輸出腳位
pinMode(pinI1,OUTPUT);
pinMode(pinI2,OUTPUT);
pinMode(pinI3,OUTPUT);
pinMode(pinI4,OUTPUT);
pinMode(inputPin, INPUT); // 定義超音波輸入腳位
pinMode(outputPin, OUTPUT); // 定義超音波輸出腳位
myservo.attach(9); // 定義伺服馬達(dá)輸出第9腳位(PWM)
}
void advance(int a) // 前進(jìn)
{
digitalWrite(pinI4,LOW);//使直流電機(jī)(右)逆時(shí)針轉(zhuǎn)
digitalWrite(pinI3,HIGH);
digitalWrite(pinI1,LOW);//使直流電機(jī)(左)順時(shí)針轉(zhuǎn)
digitalWrite(pinI2,HIGH);
delay(a * 100);
}
void turnR(int b) //右轉(zhuǎn)(雙輪)
{
digitalWrite(pinI4,HIGH);//使直流電機(jī)(右)順時(shí)針轉(zhuǎn)
digitalWrite(pinI3,LOW);
digitalWrite(pinI1,LOW);//使直流電機(jī)(左)順時(shí)針轉(zhuǎn)
digitalWrite(pinI2,HIGH);
delay(b * 100);
}
void turnL(int c) //左轉(zhuǎn)(雙輪)
{
digitalWrite(pinI4,LOW);//使直流電機(jī)(右)逆時(shí)針轉(zhuǎn)
digitalWrite(pinI3,HIGH);
digitalWrite(pinI1,HIGH);//使直流電機(jī)(左)逆時(shí)針轉(zhuǎn)
digitalWrite(pinI2,LOW);
delay(c * 100);
}
void stopp(int d) //停止
{
digitalWrite(pinI4,HIGH);//使直流電機(jī)(右)剎車
digitalWrite(pinI3,HIGH);
digitalWrite(pinI1,HIGH);//使直流電機(jī)(左)剎車
digitalWrite(pinI2,HIGH);
delay(d * 100);
}
void back(int e) //後退
{
digitalWrite(pinI4,HIGH);//使直流電機(jī)(右)順時(shí)針轉(zhuǎn)
digitalWrite(pinI3,LOW);
digitalWrite(pinI1,HIGH);//使直流電機(jī)(左)逆時(shí)針轉(zhuǎn)
digitalWrite(pinI2,LOW);
delay(e * 100);
}
void detection() //測(cè)量3個(gè)角度(0.90.179)
{
int delay_time = 250; // 伺服馬達(dá)轉(zhuǎn)向後的穩(wěn)定時(shí)間
ask_pin_F(); // 讀取前方距離
if(Fspeedd 《 10) // 假如前方距離小於10公分
{
stopp(1); // 清除輸出資料
back(2); // 後退 0.2秒
}
if(Fspeedd 《 25) // 假如前方距離小於25公分
{
stopp(1); // 清除輸出資料
ask_pin_L(); // 讀取左方距離
delay(delay_time); // 等待伺服馬達(dá)穩(wěn)定
ask_pin_R(); // 讀取右方距離
delay(delay_time); // 等待伺服馬達(dá)穩(wěn)定
if(Lspeedd 》 Rspeedd) //假如 左邊距離大於右邊距離
{
directionn = Rgo; //向右走
}
if(Lspeedd 《= Rspeedd) //假如 左邊距離小於或等於右邊距離
{
directionn = Lgo; //向左走
}
if (Lspeedd 《 10 && Rspeedd 《 10) //假如 左邊距離和右邊距離皆小於10公分
{
directionn = Bgo; //向後走
}
}
else //加如前方不小於(大於)25公分
{
directionn = Fgo; //向前走
}
}
void ask_pin_F() // 量出前方距離
{
myservo.write(90);
digitalWrite(outputPin, LOW); // 讓超聲波發(fā)射低電壓2μs
delayMicroseconds(2);
digitalWrite(outputPin, HIGH); // 讓超聲波發(fā)射高電壓10μs,這裡至少是10μs
delayMicroseconds(10);
digitalWrite(outputPin, LOW); // 維持超聲波發(fā)射低電壓
float Fdistance = pulseIn(inputPin, HIGH); // 讀差相差時(shí)間
Fdistance= Fdistance/5.8/10; // 將時(shí)間轉(zhuǎn)為距離距離(單位:公分)
Serial.print(“F distance:”); //輸出距離(單位:公分)
Serial.println(Fdistance); //顯示距離
Fspeedd = Fdistance; // 將距離 讀入Fspeedd(前速)
}
void ask_pin_L() // 量出左邊距離
{
myservo.write(5);
delay(delay_time);
digitalWrite(outputPin, LOW); // 讓超聲波發(fā)射低電壓2μs
delayMicroseconds(2);
digitalWrite(outputPin, HIGH); // 讓超聲波發(fā)射高電壓10μs,這裡至少是10μs
delayMicroseconds(10);
digitalWrite(outputPin, LOW); // 維持超聲波發(fā)射低電壓
float Ldistance = pulseIn(inputPin, HIGH); // 讀差相差時(shí)間
Ldistance= Ldistance/5.8/10; // 將時(shí)間轉(zhuǎn)為距離距離(單位:公分)
Serial.print(“L distance:”); //輸出距離(單位:公分)
Serial.println(Ldistance); //顯示距離
Lspeedd = Ldistance; // 將距離 讀入Lspeedd(左速)
}
void ask_pin_R() // 量出右邊距離
{
myservo.write(177);
delay(delay_time);
digitalWrite(outputPin, LOW); // 讓超聲波發(fā)射低電壓2μs
delayMicroseconds(2);
digitalWrite(outputPin, HIGH); // 讓超聲波發(fā)射高電壓10μs,這裡至少是10μs
delayMicroseconds(10);
digitalWrite(outputPin, LOW); // 維持超聲波發(fā)射低電壓
float Rdistance = pulseIn(inputPin, HIGH); // 讀差相差時(shí)間
Rdistance= Rdistance/5.8/10; // 將時(shí)間轉(zhuǎn)為距離距離(單位:公分)
Serial.print(“R distance:”); //輸出距離(單位:公分)
Serial.println(Rdistance); //顯示距離
Rspeedd = Rdistance; // 將距離 讀入Rspeedd(右速)
}
void loop()
{
myservo.write(90); //讓伺服馬達(dá)回歸 預(yù)備位置 準(zhǔn)備下一次的測(cè)量
detection(); //測(cè)量角度 並且判斷要往哪一方向移動(dòng)
if(directionn == 2) //假如directionn(方向) = 2(倒車)
{
back(8); // 倒退(車)
turnL(2); //些微向左方移動(dòng)(防止卡在死巷裡)
Serial.print(“ Reverse ”); //顯示方向(倒退)
}
if(directionn == 6) //假如directionn(方向) = 6(右轉(zhuǎn))
{
back(1);
turnR(6); // 右轉(zhuǎn)
Serial.print(“ Right ”); //顯示方向(左轉(zhuǎn))
}
if(directionn == 4) //假如directionn(方向) = 4(左轉(zhuǎn))
{
back(1);
turnL(6); // 左轉(zhuǎn)
Serial.print(“ Left ”); //顯示方向(右轉(zhuǎn))
}
if(directionn == 8) //假如directionn(方向) = 8(前進(jìn))
{
advance(8); // 正常前進(jìn)
Serial.print(“ Advance ”); //顯示方向(前進(jìn))
Serial.print(“ ”);
}
}
-
智能小車
+關(guān)注
關(guān)注
87文章
554瀏覽量
82278 -
Arduino
+關(guān)注
關(guān)注
189文章
6493瀏覽量
190195
發(fā)布評(píng)論請(qǐng)先 登錄
Arduino單片機(jī)DFROBOT小車制作!
Arduino手機(jī)藍(lán)牙遙控智能小車制作教程
51單片機(jī)智能小車制作詳細(xì)教程
51循跡小車詳細(xì)制作過(guò)程
基于Arduino UNO的小車制作過(guò)程簡(jiǎn)析
Arduino藍(lán)牙避障小車制作過(guò)程
用手機(jī)藍(lán)牙APP控制的基于arduino制作的藍(lán)牙小車
WIFI智能小車設(shè)計(jì)制作教程的詳細(xì)資料免費(fèi)下載
Arduino教程之如何使用Arduino制作一個(gè)寶寶使用的小桔燈詳細(xì)資料概述

Arduino智能小車底板電路原理圖免費(fèi)下載

如何使用Arduino實(shí)現(xiàn)智能小車的自由行詳細(xì)程序資料免費(fèi)下載

使用Arduino設(shè)計(jì)的智能小車自動(dòng)避障的接線說(shuō)明

評(píng)論