Arduino机器人应用3—2WD小车避障

发布时间:2017-11-1 阅读量:1078 来源: 我爱方案网 作者:

文中与大家分享小车避障的程序,希望能给大家一点借鉴。


避障功能在日常生活中也是比较常见的,像是风靡一时的自动清扫机器人,小小圆圆的,只需放在地上一会就可以将你的屋子打扫干净,这里面的最基本功能就是避障,当它检测到前方有障碍就会绕开。这样就可以躲避家具将你的地板清理干净了。

下面我们就来完成我们自己的避障小车吧。

还是先说我们要准备的东东,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

相关资讯
核心对比!无源晶振与有源晶振在结构和工作原理的本质区别

无源晶振与有源晶振是电子系统中两种根本性的时钟元件,其核心区别在于是否内置振荡电路。晶振结构上的本质差异,直接决定了两者在应用场景、设计复杂度和成本上的不同。

温度稳定性对RTC晶振的计时误差影响与分析

RTC(实时时钟)电路广泛采用音叉型32.768kHz晶振作为时基源,但其频率稳定性对温度变化极为敏感。温度偏离常温基准(通常为25℃)时,频率会产生显著漂移,且偏离越远漂移越大。

从参数到实践!剖析有源晶振的频率稳定度、老化率及正确接线方案

有源晶振作为晶振的核心类别,凭借其内部集成振荡电路的独特设计,无需依赖外部电路即可独立工作,在电子设备中扮演着关键角色。本文将系统解析有源晶振的核心参数、电路设计及引脚接法,重点阐述其频率稳定度、老化率等关键指标,并结合实际电路图与引脚定义,帮助大家全面掌握有源晶振的应用要点,避免因接线错误导致器件失效。

如何对抗晶振老化?深入生产工艺与终端应用的防老化指南

晶振老化是影响其长期频率稳定性的核心因素,主要表现为输出频率随时间的缓慢漂移。无论是晶体谐振器还是晶体振荡器,在生产过程中均需经过针对性的防老化处理,但二者的工艺路径与耗时存在显著差异。

无源晶振YSX321SL应用于高精度HUD平视显示系统YXC3225

在现代汽车行业中,HUD平视显示系统正日益成为驾驶员的得力助手,为驾驶员提供实时导航、车辆信息和警示等功能,使驾驶更加安全和便捷。在HUD平视显示系统中,高精度的晶振是确保系统稳定运行的关键要素。YSX321SL是一款优质的3225无源晶振,拥有多项卓越特性,使其成为HUD平视显示系统的首选。