- /*==================================================================
- (1)玩具掃雷避障小車實物一個
- (2)研究成果介紹書一份
- (3)小車能夠行進,在行進的過程中能夠檢測前方金屬物品(即為雷)并提示
- (4)小車可以調整行進的速度
- (5)小車行進的過程中能夠規避前方的障礙
- (6)小車可以循跡黑線
- -------------------------------------------------------------
- 或者外部遙控,用lcd1602顯示小車行進中排雷的總數
- -------------------------------------------------------------
- ===================================================================*/
- 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);
- //一個簡單的測量脈沖寬度的函數,默認單位是us
- readdate/=59;
- return readdate;
- }
- void voice()
- {
- for(int i=200;i<=800;i++) //用循環的方式將頻率從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為該輪子的狀態、val調節速度
- {
- 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)//前進
- {
- 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) //左轉
- {
- motor(4,5,1,m);
- motor(7,6,0,m);
- }
- void turnR(int 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;//掃雷數量
- 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();//終點
- if (n1==1) turnR(120);
- else if (n2==1) turnL(120);
- else runforward(120);
- }
- void find_obstacle()//發現障礙物
- {
- runback(120);
- delay(2000);
- turnL(120);
- delay(1000);
- runforward(120);
- delay(3000);
- turnR(120);
- delay(1000);
- }
- void loop()
- {
- while(1) run_black();
- }
復制代碼 1、項目的研究內容
利用各種傳感器實現機器對金屬的感應,從而能夠有效的提醒人們能夠快速尋找并識別雷及類似物,并能有效的穿過區域。
2、預計突破或解決哪些技術難題
(1)傳感器如何配合運轉使得機器掃雷車有效運行。
(2)掃雷車使用什么結構能使掃雷車有效靈活改變方向。
(3)加固車身結構,當地形崎嶇時,運動的掃雷車如何穩定車身結構以至于不會因為與地面撞擊而產生較大損壞。
(4)在掃雷車調試運行中,會出現一些程序問題并將其如何解決,同時如何優化程序。
3、研究的創新點
(1)利用合理地車身結構來穩定車身,不至于因轉向產生晃動。
(2)利用超聲波傳感器來避開障礙物,提高掃雷車的對地形的把控。
|