好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

红外避障小车.doc

49页
  • 卖家[上传人]:飞***
  • 文档编号:4101006
  • 上传时间:2017-08-15
  • 文档格式:DOC
  • 文档大小:726KB
  • / 49 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 红外避障小车2010 年 04 月 28 日 星期三 22:45今天就用 Arduino 简单的控制一下小车的前进及转弯要准备的有:机器人基地 2WD 小车、Arduino 控制器、Arduino 传感器扩展板(这里我为了接线方便使用)、双 H 桥直流电机驱动板、电池、杜邦线若干双 H 桥直流电机驱动板的接线方式及使用方法以前博文 Arduino 控制直流电机曾介绍过,这里做一下详细说明首先 VMS 驱动部分取电可接+5V-+46V,逻辑部分可板内取电,即端子可悬空,也可接入+5V-+7V端子左右两排三个插针分别用来控制两路直流电机EA、EB接入 ArduinoPWM 接口用于电机调速,I1、I2、I3、I4 接口,分别用来控制两路直流电机前进、后退、转向以及刹车,只需接入 Arduino 的数字接口即可散热片后有单排四个插针用来接步进电机,但是我们也可以用他们接入两路直流电机,这样首先可以解决电机线不够长的问题,其次就是用杜邦线做电机引线方便插接问题了,不过用这个方式接线我们一定要注意一点,就是板子左右上角的电流反馈接口跳线帽一定要像下图一样接好,左右对称电流反馈功能以后再研究,且电机插针左边两插针与左路电机对应,右边两插针与右路电机对应,杜邦线插接即可。

      下面附几幅我的接线完成图,仅供大家参考传感器接线图,红黑线为电源线,我是从双 H 桥直流电机驱动板取电,其他为电机控制线驱动板接线细节图直流电机接线细节图到此准备工作基本完成,可以编写程序了,这里我把 2WD 小车直走、后退、左转、右转、刹车的功能都编写进程序供大家参考程序如下: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 调速)接口void setup(){pinMode(pinI1,OUTPUT);pinMode(pinI2,OUTPUT);pinMode(speedpin,OUTPUT);pinMode(pinI3,OUTPUT);pinMode(pinI4,OUTPUT);pinMode(speedpin1,OUTPUT);}void loop(){//直走analogWrite(speedpin,100);//输入模拟值进行设定速度 analogWrite(speedpin1,100);digitalWrite(pinI4,LOW);//使直流电机(右)逆时针转digitalWrite(pinI3,HIGH);digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转digitalWrite(pinI2,HIGH);delay(2000);//后退analogWrite(speedpin,100);//输入模拟值进行设定速度analogWrite(speedpin1,100);digitalWrite(pinI4,HIGH);//使直流电机(右)顺时针转digitalWrite(pinI3,LOW);digitalWrite(pinI1,HIGH);//使直流电机(左)逆时针转digitalWrite(pinI2,LOW);delay(2000);//左转analogWrite(speedpin,60);//输入模拟值进行设定速度analogWrite(speedpin1,60);digitalWrite(pinI4,LOW);//使直流电机(右)逆时针转digitalWrite(pinI3,HIGH);digitalWrite(pinI1,HIGH);//使直流电机(左)逆时针转digitalWrite(pinI2,LOW);delay(2000);//右转analogWrite(speedpin,60);//输入模拟值进行设定速度analogWrite(speedpin1,60);digitalWrite(pinI4,HIGH);//使直流电机(右)顺时针转digitalWrite(pinI3,LOW);digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转digitalWrite(pinI2,HIGH);delay(2000);//刹车digitalWrite(pinI4,HIGH);//使直流电机(右)刹车digitalWrite(pinI3,HIGH); digitalWrite(pinI1,HIGH);//使直流电机(左)刹车digitalWrite(pinI2,HIGH);delay(2000);}注:程序里我所用的左转和右转只是转弯的一种控制方式,其他方式就不一一列举了,大家可以自己尝试。

      将三个 Mini 红外巡线传感器接到Arduino3、4、5 三个数字接口上,接线图如下:接线实物图整体图下面是我编写好的程序,供大家参考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()//前进{analogWrite(speedpin,100);//输入模拟值进行设定速度analogWrite(speedpin1,100);digitalWrite(pinI4,LOW);//使直流电机(右)逆时针转digitalWrite(pinI3,HIGH);digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转digitalWrite(pinI2,HIGH);}void right()//右转{analogWrite(speedpin,60);//输入模拟值进行设定速度analogWrite(speedpin1,60);digitalWrite(pinI4,HIGH);//使直流电机(右)顺时针转digitalWrite(pinI3,LOW);digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转digitalWrite(pinI2,HIGH);}void left()//左转{analogWrite(speedpin,60);//输入模拟值进行设定速度analogWrite(speedpin1,60);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 loop(){int r,m,l;r=digitalRead(IRR);m=digitalRead(IRM);l=digitalRead(IRL);if(l==HIGH &&m==LOW && r==HIGH)advance();else if(l==LOW && m==HIGH && r==HIGH)left(); else if(l==HIGH && m==HIGH && r==LOW)right();else stop();}将三个 Mini 红外巡线传感器接到 Arduino3、4、5 三个数字接口上,接线图如下:再来简单介绍一下 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()/。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.