標(biāo)題:
基于arduino實(shí)現(xiàn)的玩具掃雷避障小車程序
[打印本頁]
作者:
1409735234
時(shí)間:
2022-3-12 23:02
標(biāo)題:
基于arduino實(shí)現(xiàn)的玩具掃雷避障小車程序
/*==================================================================
(1)玩具掃雷避障小車實(shí)物一個(gè)
(2)研究成果介紹書一份
(3)小車能夠行進(jìn),在行進(jìn)的過程中能夠檢測前方金屬物品(即為雷)并提示
(4)小車可以調(diào)整行進(jìn)的速度
(5)小車行進(jìn)的過程中能夠規(guī)避前方的障礙
(6)小車可以循跡黑線
-------------------------------------------------------------
或者外部遙控,用lcd1602顯示小車行進(jìn)中排雷的總數(shù)
-------------------------------------------------------------
===================================================================*/
int UltrasonicRanging(int pinnum1,int pinnum2)//超聲波測距
{
int readdate;
pinMode(pinnum1,OUTPUT);
pinMode(pinnum2,INPUT);
digitalWrite(pinnum1,LOW);
delayMicroseconds(2);
digitalWrite(pinnum1,HIGH);
delayMicroseconds(5);
digitalWrite(pinnum1,LOW);
readdate=pulseIn(pinnum2,HIGH);
//一個(gè)簡單的測量脈沖寬度的函數(shù),默認(rèn)單位是us
readdate/=59;
return readdate;
}
void voice()
{
for(int i=200;i<=800;i++) //用循環(huán)的方式將頻率從200HZ 增加到800HZ
{
pinMode(4,OUTPUT);
tone(4,i); //在四號端口輸出頻率
delay(3);
}
delay(1000);
for(int i=800;i>=200;i--)
{
pinMode(4,OUTPUT);
tone(4,i);
delay(6);
}
}
boolean InfraredRanging(int pinNumber)//紅外測距
{
pinMode(pinNumber, INPUT);
return digitalRead(pinNumber);
}
boolean MetalDetection(int pinNumber)//金屬探測
{
pinMode(pinNumber, INPUT);
return digitalRead(pinNumber);
}
void motor(char pin,char pwmpin,char state,int val)
//pin、pwnpin為端口、state為該輪子的狀態(tài)、val調(diào)節(jié)速度
{
pinMode(pin,OUTPUT);
if (state==1)//高
{
analogWrite(pwmpin,val);
digitalWrite(pin,1);
}
else if (state==2)//低
{
analogWrite(pwmpin,val);
digitalWrite(pin,0);
}
else if (state==0)//停
{
analogWrite(pwmpin,0);
digitalWrite(pin,0);
}
}
void runforward(int i)//前進(jìn)
{
motor(4,5,1,i);
motor(7,6,1,i);
}
void runback(int j)//后退
{
motor(4,5,2,j);
motor(7,6,2,j);
}
void turnL(int m) //左轉(zhuǎn)
{
motor(4,5,1,m);
motor(7,6,0,m);
}
void turnR(int n)//右轉(zhuǎn)
{
motor(4,5,0,n);
motor(7,6,1,n);
}
void stop_z()//停
{
motor(4,5,0,0);
motor(7,6,0,0);
}
void setup() {
}
void run_black()//走黑線
{
int num=0;//掃雷數(shù)量
bool n1,n2; //1 左;2 右
n1=digitalRead(9);
n2=digitalRead(10);
if (MetalDetection(13))
{
voice();
num++;
}
if (UltrasonicRanging(4,5))find_obstacle();
if(n1==1&&n2==1) while(1) stop_z();//終點(diǎn)
if (n1==1) turnR(120);
else if (n2==1) turnL(120);
else runforward(120);
}
void find_obstacle()//發(fā)現(xiàn)障礙物
{
runback(120);
delay(2000);
turnL(120);
delay(1000);
runforward(120);
delay(3000);
turnR(120);
delay(1000);
}
void loop()
{
while(1) run_black();
}
復(fù)制代碼
1、項(xiàng)目的研究內(nèi)容
利用各種傳感器實(shí)現(xiàn)機(jī)器對金屬的感應(yīng),從而能夠有效的提醒人們能夠快速尋找并識別雷及類似物,并能有效的穿過區(qū)域。
2、預(yù)計(jì)突破或解決哪些技術(shù)難題
(1)傳感器如何配合運(yùn)轉(zhuǎn)使得機(jī)器掃雷車有效運(yùn)行。
(2)掃雷車使用什么結(jié)構(gòu)能使掃雷車有效靈活改變方向。
(3)加固車身結(jié)構(gòu),當(dāng)?shù)匦纹閸鐣r(shí),運(yùn)動的掃雷車如何穩(wěn)定車身結(jié)構(gòu)以至于不會因?yàn)榕c地面撞擊而產(chǎn)生較大損壞。
(4)在掃雷車調(diào)試運(yùn)行中,會出現(xiàn)一些程序問題并將其如何解決,同時(shí)如何優(yōu)化程序。
3、研究的創(chuàng)新點(diǎn)
(1)利用合理地車身結(jié)構(gòu)來穩(wěn)定車身,不至于因轉(zhuǎn)向產(chǎn)生晃動。
(2)利用超聲波傳感器來避開障礙物,提高掃雷車的對地形的把控。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1