机器人

机器人,小小圆圆的,只需放在地上一会就可以将你的屋子打扫干净,这里面的最基本功能就是避障,当它检测到前方有障碍就会绕开。这样就可以躲避家具将你的地板清理干净了。

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

    还是先说我们要准备的东东,2WD小车(注意:小车一定要是根据以前的博文装配完成的哦!Arduino机器人应用2—2WD小车寻线还有装配不明白的好朋友们就麻烦去参考那篇博文啦!Arduino机器人应用1—2WD小车基本功能测试)、三个Mini红外避障传感器、三条传感器连接线、传感器支架,当然要有Arduino和Arduino传感器扩展板、杜邦线若干。要提到的一点,这次我用的是机器人基地新版的传感器扩展板,将IIC接口、32路舵机控制器接口、蓝牙模块通信接口、SD卡模块通信接口、APC220无线射频模块通信接口、RB URF v1.1超声波传感器接口、12864液晶串行与并行接口全部留出,这样做起实验来就加的方便了。赞一下吧Arduino机器人应用3—2WD小车避障

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

Arduino机器人应用3—2WD小车避障
    再来简单介绍一下Mini避障传感器吧,下面是功能图解


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

     通过配合调节调频和调距两个电位计,我们可以调到适合我们的检测距离。有障碍物位低电平,无障碍物位高电平。我个人认为完成寻线功能后再来完成避障功能就很简单了,有些原理是极为相似的,传感器的使用也是如此相似。使能跳线帽插上就是一直让传感器工作,拔下则可以通过控制使能端让传感器是否工作。

Arduino机器人应用3—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调速)接口
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);
  
}

     程序写到这里就结束了,有点长,呵呵,希望能给大家一点借鉴。

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值