標(biāo)題:
基于arduino2560的掃地機(jī)器人源程序
[打印本頁(yè)]
作者:
lianshangni0922
時(shí)間:
2017-10-15 19:43
標(biāo)題:
基于arduino2560的掃地機(jī)器人源程序
硬件:arduino2560 帶電機(jī)邊刷兩個(gè),若干超聲波模塊,滾刷一個(gè),雜物盒一個(gè),詳細(xì)見圖片
0.jpg
(258.88 KB, 下載次數(shù): 116)
下載附件
2017-10-15 21:28 上傳
arduino源程序如下:
int FEcho = 11; // Echo回聲腳(P2.0)
int FTrig =10; // Trig 觸發(fā)腳(P2.1)
int LEcho = 9; // Echo回聲腳(P2.0)
int LTrig =8; // Trig 觸發(fā)腳(P2.1)
int REcho = 13; // Echo回聲腳(P2.0)
int RTrig =12; // Trig 觸發(fā)腳(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); // 給觸發(fā)腳低電平2μs
delayMicroseconds(2);
digitalWrite(FTrig, HIGH); // 給觸發(fā)腳高電平10μs,這里至少是10μs
delayMicroseconds(20);
digitalWrite(FTrig, LOW); // 持續(xù)給觸發(fā)腳低電
float Fdistance = pulseIn(FEcho, HIGH); // 讀取高電平時(shí)間(單位:微秒)
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); // 給觸發(fā)腳低電平2μs
delayMicroseconds(2);
digitalWrite(LTrig, HIGH); // 給觸發(fā)腳高電平10μs,這里至少是10μs
delayMicroseconds(20);
digitalWrite(LTrig, LOW); // 持續(xù)給觸發(fā)腳低電
float Ldistance = pulseIn(LEcho, HIGH); // 讀取高電平時(shí)間(單位:微秒)
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); // 給觸發(fā)腳低電平2μs
delayMicroseconds(2);
digitalWrite(RTrig, HIGH); // 給觸發(fā)腳高電平10μs,這里至少是10μs
delayMicroseconds(20);
digitalWrite(RTrig, LOW); // 持續(xù)給觸發(fā)腳低電
float Rdistance = pulseIn(REcho, HIGH); // 讀取高電平時(shí)間(單位:微秒)
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);
}
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
避障程序.zip
(1.41 KB, 下載次數(shù): 173)
2017-10-15 19:43 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
Laptop
時(shí)間:
2017-10-15 21:45
感覺好酷啊,程序看起來倒是不難,沒用過un,實(shí)物制作會(huì)很麻煩嗎?
作者:
1603070112
時(shí)間:
2018-4-15 00:28
感覺很棒,試試
作者:
AOisiyue
時(shí)間:
2018-4-17 14:19
不明覺厲
作者:
Knight_Yukii
時(shí)間:
2018-10-29 18:39
感謝QAQ
作者:
leoma71
時(shí)間:
2018-11-24 01:06
感謝QAQ
作者:
qqww
時(shí)間:
2019-4-5 02:05
感覺很棒,試試看
作者:
Luolo
時(shí)間:
2020-2-5 17:06
請(qǐng)問路徑規(guī)劃是怎么規(guī)劃的
作者:
啦啦啦啦啦啦10
時(shí)間:
2020-3-20 16:07
能自己充電就好了
作者:
dongfang08
時(shí)間:
2020-3-29 20:44
謝謝分享,學(xué)習(xí)很好
作者:
wsy06
時(shí)間:
2020-4-1 11:40
很棒啊,謝謝分享
作者:
137666hwq
時(shí)間:
2020-7-12 08:35
路徑規(guī)劃如何實(shí)現(xiàn)的啊
作者:
317227940
時(shí)間:
2020-7-13 17:46
硬件連接有嗎
作者:
szqinyi
時(shí)間:
2020-9-12 06:38
感興趣,看看,感謝。
作者:
cr8526
時(shí)間:
2021-3-1 21:37
如果加上攝像頭和用物聯(lián)網(wǎng)遠(yuǎn)程控制就好了
作者:
tangqida
時(shí)間:
2023-1-29 14:29
下載了試一下看看,好玩。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1