文中与大家分享小车避障的程序,希望能给大家一点借鉴。
避障功能在日常生活中也是比较常见的,像是风靡一时的自动清扫机器人,小小圆圆的,只需放在地上一会就可以将你的屋子打扫干净,这里面的最基本功能就是避障,当它检测到前方有障碍就会绕开。这样就可以躲避家具将你的地板清理干净了。
下面我们就来完成我们自己的避障小车吧。
还是先说我们要准备的东东,2WD小车(注意:小车一定要是根据以前的博文装配完成的哦!Arduino机器人应用2—2WD小车寻线还有装配不明白的好朋友们就麻烦去参考那篇博文啦!Arduino机器人应用1—2WD小车基本功能测试)、三个Mini红外避障传感器、三条传感器连接线、传感器支架,当然要有Arduino和Arduino传感器扩展板、杜邦线若干。要提到的一点,这次我用的是机器人基地新版的传感器扩展板,将IIC接口、32路舵机控制器接口、蓝牙模块通信接口、SD卡模块通信接口、APC220无线射频模块通信接口、RB URF v1.1超声波传感器接口、12864液晶串行与并行接口全部留出,这样做起实验来就更加的方便了。赞一下吧Arduino机器人应用3—2WD小车避障。
再来简单介绍一下Mini避障传感器吧,下面是功能图解。
通过配合调节调频和调距两个电位计,我们可以调到适合我们的检测距离。有障碍物位低电平,无障碍物位高电平。我个人认为完成寻线功能后再来完成避障功能就很简单了,有些原理是极为相似的,传感器的使用也是如此相似。使能跳线帽插上就是一直让传感器工作,拔下则可以通过控制使能端让传感器是否工作。
这次编写的程序就是在寻线的基础上修改的所以很多都是与寻线的相同,相同的接口定义、相同的子函数,之前也说过寻线与避障有很多相同之处,在程序上也能体现出来。这里就不逐句解释,直接附上程序了。
int pinI1=8;//定义I1接口
int pinI2=9;//定义I2接口
int speedpin=11;//定义EA(PWM调速)接口
int pinI3=6;//定义I3接口
int pinI4=7;//定义I4接口
int speedpin1=10;//定义EB(PWM调速)接口
int IRR=3;//定义右侧避障传感器接口
int IRM=4;//定义中间避障传感器接口
int IRL=5;//定义左侧避障传感器接口
void setup()
{
pinMode(pinI1,OUTPUT);
pinMode(pinI2,OUTPUT);
pinMode(speedpin,OUTPUT);
pinMode(pinI3,OUTPUT);
pinMode(pinI4,OUTPUT);
pinMode(speedpin1,OUTPUT);
pinMode(IRR,INPUT);
pinMode(IRM,INPUT);
pinMode(IRL,INPUT);
}
void advance(int a)//前进
{
analogWrite(speedpin,a);//输入模拟值进行设定速度
analogWrite(speedpin1,a);
digitalWrite(pinI4,LOW);//使直流电机(右)逆时针转
digitalWrite(pinI3,HIGH);
digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转
digitalWrite(pinI2,HIGH);
}
void right(int b)//右转
{
analogWrite(speedpin,b);//输入模拟值进行设定速度
analogWrite(speedpin1,b);
digitalWrite(pinI4,HIGH);//使直流电机(右)顺时针转
digitalWrite(pinI3,LOW);
digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转
digitalWrite(pinI2,HIGH);
}
void left(int c)//左转
{
analogWrite(speedpin,c);//输入模拟值进行设定速度
analogWrite(speedpin1,c);
digitalWrite(pinI4,LOW);//使直流电机(右)逆时针转
digitalWrite(pinI3,HIGH);
digitalWrite(pinI1,HIGH);//使直流电机(左)逆时针转
digitalWrite(pinI2,LOW);
}
void stop()//停止
{
digitalWrite(pinI4,HIGH);//使直流电机(右)制动
digitalWrite(pinI3,HIGH);
digitalWrite(pinI1,HIGH);//使直流电机(左)制动
digitalWrite(pinI2,HIGH);
}
void back(int d)//后退
{
analogWrite(speedpin,d);//输入模拟值进行设定速度
analogWrite(speedpin1,d);
digitalWrite(pinI4,HIGH);//使直流电机(右)顺时针转
digitalWrite(pinI3,LOW);
digitalWrite(pinI1,HIGH);//使直流电机(左)逆时针转
digitalWrite(pinI2,LOW);
}
void loop()
{
int r,m,l;
r=digitalRead(IRR);
m=digitalRead(IRM);
l=digitalRead(IRL);
if(l==HIGH &&m==HIGH && r==HIGH)
advance(120);
if(l==LOW &&m==LOW && r==LOW )
{
back(120);
delay(300);
right(100);
delay(100);
}
if(l==LOW &&m==HIGH && r==LOW )
{
back(120);
delay(300);
right(100);
delay(100);
}
if(l==HIGH &&m==LOW && r==HIGH )
{
back(120);
delay(300);
right(100);
delay(100);
}
if(l==LOW &&m==LOW && r==HIGH )
right(100);
if(l==LOW && m==HIGH && r==HIGH)
right(80);
if(l==HIGH &&m==LOW && r==LOW )
left(100);
if(l==HIGH &&m==HIGH && r==LOW )
left(80);
}
以上就是小编为大家介绍的有关“Arduino机器人应用3—2WD小车避障”的相关知识,有想了解更多的朋友可以看以下相关文章。希望通过小编的介绍能给大家带来帮助!
“Arduino机器人应用3—2WD小车避障”的相关文章:
红外避障电动小车C51程序-原文链接:
http://www.52solution.com/knowledge/5601.html