|
- /*==================================================================
- (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)利用超聲波傳感器來避開障礙物,提高掃雷車的對地形的把控。
|
評分
-
查看全部評分
|