硬件:arduino2560 帶電機邊刷兩個,若干超聲波模塊,滾刷一個,雜物盒一個,詳細見圖片
0.jpg (258.88 KB, 下載次數: 116)
下載附件
2017-10-15 21:28 上傳
arduino源程序如下:
- int FEcho = 11; // Echo回聲腳(P2.0)
- int FTrig =10; // Trig 觸發腳(P2.1)
- int LEcho = 9; // Echo回聲腳(P2.0)
- int LTrig =8; // Trig 觸發腳(P2.1)
- int REcho = 13; // Echo回聲腳(P2.0)
- int RTrig =12; // Trig 觸發腳(P2.1)
- int in1 = 4;
- int in2 = 5;
- int in3 = 22;
- int in4 = 23;
- int speedpin1=6;
- int speedpin2=7;
- int rightDistance = 0,leftDistance = 0,middleDistance = 0 ;
-
- void forward()
- {
- digitalWrite(in1,HIGH);
- digitalWrite(in2,LOW);
- digitalWrite(in3,HIGH);
- digitalWrite(in4,LOW);
- analogWrite(speedpin1,60);
- analogWrite(speedpin2,60);
- }
-
- void back()
- {
- digitalWrite(in1,LOW);
- digitalWrite(in2,HIGH);
- digitalWrite(in3,LOW);
- digitalWrite(in4,HIGH);
- analogWrite(speedpin1,60);
- analogWrite(speedpin2,60);
- }
-
- void turnright()
- {
- digitalWrite(in1,HIGH);
- digitalWrite(in2,LOW);
- digitalWrite(in3,HIGH);
- digitalWrite(in4,LOW);
- analogWrite(speedpin1,70);
- analogWrite(speedpin2,0);
- delay(200);
-
- }
-
- void turnleft()
- {
- digitalWrite(in1,HIGH);
- digitalWrite(in2,LOW);
- digitalWrite(in3,HIGH);
- digitalWrite(in4,LOW);
- analogWrite(speedpin1,0);
- analogWrite(speedpin2,70);
- delay(200);
- }
- void stop()
- {
- digitalWrite(in1,LOW);
- digitalWrite(in2,LOW);
- digitalWrite(in3,LOW);
- digitalWrite(in4,LOW);
- }
-
- int Fdistance_test() // 量出前方距離
- {
- digitalWrite(FTrig, LOW); // 給觸發腳低電平2μs
- delayMicroseconds(2);
- digitalWrite(FTrig, HIGH); // 給觸發腳高電平10μs,這里至少是10μs
- delayMicroseconds(20);
- digitalWrite(FTrig, LOW); // 持續給觸發腳低電
- float Fdistance = pulseIn(FEcho, HIGH); // 讀取高電平時間(單位:微秒)
- Fdistance= Fdistance/58; //為什么除以58等于厘米, Y米=(X秒*344)/2
- // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
- return (int)Fdistance;
- }
- int Ldistance_test() // 量出left方距離
- {
- digitalWrite(LTrig, LOW); // 給觸發腳低電平2μs
- delayMicroseconds(2);
- digitalWrite(LTrig, HIGH); // 給觸發腳高電平10μs,這里至少是10μs
- delayMicroseconds(20);
- digitalWrite(LTrig, LOW); // 持續給觸發腳低電
- float Ldistance = pulseIn(LEcho, HIGH); // 讀取高電平時間(單位:微秒)
- Ldistance= Ldistance/58; //為什么除以58等于厘米, Y米=(X秒*344)/2
- // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
- return (int)Ldistance;
- }
- int Rdistance_test() // 量出 right方距離
- {
- digitalWrite(RTrig, LOW); // 給觸發腳低電平2μs
- delayMicroseconds(2);
- digitalWrite(RTrig, HIGH); // 給觸發腳高電平10μs,這里至少是10μs
- delayMicroseconds(20);
- digitalWrite(RTrig, LOW); // 持續給觸發腳低電
- float Rdistance = pulseIn(REcho, HIGH); // 讀取高電平時間(單位:微秒)
- Rdistance= Rdistance/58; //為什么除以58等于厘米, Y米=(X秒*344)/2
- // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
- return (int)Rdistance;
- }
-
- void setup()
- {
- Serial.begin(9600); // 初始化串口
- pinMode(FEcho, INPUT); // 定義超聲波輸入腳
- pinMode(FTrig, OUTPUT); // 定義超聲波輸出腳
- pinMode(LEcho, INPUT); // 定義超聲波輸入腳
- pinMode(LTrig, OUTPUT); // 定義超聲波輸出腳
- pinMode(REcho, INPUT); // 定義超聲波輸入腳
- pinMode(RTrig, OUTPUT); // 定義超聲波輸出腳
- pinMode(in1,OUTPUT);
- pinMode(in2,OUTPUT);
- pinMode(in3,OUTPUT);
- pinMode(in4,OUTPUT);
-
- stop();
- }
-
- void loop()
- {
- forward();
- delay(500);
- //middleDistance = Fdistance_test();
- //leftDistance = Ldistance_test();
- //rightDistance = Rdistance_test();
- //Serial.print(rightDistance);
- //Serial.print("cm");
- //Serial.println();
- //delay(1000);
- //stop();
- //delay(500);
- middleDistance = Fdistance_test();
- leftDistance = Ldistance_test();
- rightDistance = Rdistance_test();
- if(middleDistance<=20)
- {
- if(leftDistance<=20&rightDistance>20)
- {
- back();
- delay(400);
- turnright();
- delay(1000);
- }
- else if(rightDistance<=20&leftDistance>20)
- {
- back();
- delay(400);
- turnleft();
- delay(1000);
- }
- else if(rightDistance<=20&leftDistance<=20)
- {
- back();
- delay(600);
- turnright();
- delay(1000);
- }
- else
- {
- back();
- delay(600);
- turnright();
- delay(1000);
- }
- }
-
-
- else if(rightDistance<=20)
- {
- if( middleDistance<=20&leftDistance>20)
- {
- back();
- delay(400);
- turnleft();
- delay(1000);
- }
- else if(leftDistance<=20&middleDistance>20)
- {
- back();
- delay(600);
- turnright();
- delay(1000);
- }
- else if(leftDistance<=20&middleDistance<=20)
- {
- back();
- delay(600);
- turnright();
- delay(1000);
- }
- else
- {
- back();
- delay(400);
- turnleft();
- delay(1000);
- }
-
- }
-
- else if(leftDistance<=20)
- {
- if( middleDistance<=20&rightDistance>20)
- {
- back();
- delay(400);
- turnright();
- delay(1000);
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
避障程序.zip
(1.41 KB, 下載次數: 173)
2017-10-15 19:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|