标题:
基于arduino2560的扫地机器人源程序
[打印本页]
作者:
lianshangni0922
时间:
2017-10-15 19:43
标题:
基于arduino2560的扫地机器人源程序
硬件: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
作者:
Laptop
时间:
2017-10-15 21:45
感觉好酷啊,程序看起来倒是不难,没用过un,实物制作会很麻烦吗?
作者:
1603070112
时间:
2018-4-15 00:28
感觉很棒,试试
作者:
AOisiyue
时间:
2018-4-17 14:19
不明觉厉
作者:
Knight_Yukii
时间:
2018-10-29 18:39
感谢QAQ
作者:
leoma71
时间:
2018-11-24 01:06
感谢QAQ
作者:
qqww
时间:
2019-4-5 02:05
感觉很棒,试试看
作者:
Luolo
时间:
2020-2-5 17:06
请问路径规划是怎么规划的
作者:
啦啦啦啦啦啦10
时间:
2020-3-20 16:07
能自己充电就好了
作者:
dongfang08
时间:
2020-3-29 20:44
谢谢分享,学习很好
作者:
wsy06
时间:
2020-4-1 11:40
很棒啊,谢谢分享
作者:
137666hwq
时间:
2020-7-12 08:35
路径规划如何实现的啊
作者:
317227940
时间:
2020-7-13 17:46
硬件连接有吗
作者:
szqinyi
时间:
2020-9-12 06:38
感兴趣,看看,感谢。
作者:
cr8526
时间:
2021-3-1 21:37
如果加上摄像头和用物联网远程控制就好了
作者:
tangqida
时间:
2023-1-29 14:29
下载了试一下看看,好玩。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1