回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

机器人巡线——巡虚线 简单

头像 肥罗-阿勇 2019.10.27 4816 2

说道机器人巡线,这是机器人入门级的玩法,一般来说无非就是巡黑线或者巡白线

用两个循迹传感器就可以很轻松的解决这个问题。

但是最近我在参加一个比赛的时候遇到一种特殊的情况,那就是巡虚线。

先来看看要求和地图

project-image
project-image

咋一看地图,这个很简单,不就是巡黑线吗?

左右两边各设一个传感器,巡黑线就解决了。

但是没有那么简单

要求是这样的

1、从1开始到2的位置停车,这样算巡外线

2、从1开始到2的位置停车,这样算巡内线,得分比巡外线多20分

怎样判断是巡内线还是巡外线?

如果只是右边装有循迹传感器才算巡内线,否则都算巡外线。

project-image

从这个要求来看,简单的巡黑线是可以解决问题,但是这种算巡外线,得分不高

要想拿高分必须要巡内线。

巡内线的难点就在那段虚线。

如何巡虚线呢,百度查找了一圈也没找到任何答案。

看来只能自己想办法

想到的第一种方法:

1、在右边装两个循迹传感器,一个巡黑线,一个巡白线。

2、巡白线传感器到了黑线,不马上判断,延时500毫秒(粗略估计,实际要根据情况而定)之后再判断,如何还是黑线就转,如果已经是白线,就不用转。

这种方法理论上是可行的,但是实际操作中却发现难度很大,最重要是转弯位出问题,调试了很久都无法解决。


第二种方法就非常简单:

1、在右边装三个循迹传感器,一个巡黑线,两个巡白线(一个前面,一个后面,中间相隔刚好是虚线的一段距离)。

2、平时只检查后面的巡白线传感器,到了黑线再检测前面的触感器,如何前后都是黑线就转弯,如果前面是白色后面是黑色就继续前进。

这种方法操作简单,程序简单,学生理解也容易,实现起来也非常简单。

具体安装方法和程序如下,供参考

材料清单

  • arduino pro mini主控板(带电机驱动) X1
  • 循迹触感器 X6
  • 马达+轮子 X2
  • 万向轮 X1
  • 车架 X1
  • 电池及电池盒 X1

步骤1 组装车子

车子安装比较简单,如图所示。

最主要是右边的3个巡线传感器的位置。

project-image

其中1号传感器是用来巡黑线

2号传感器是用来巡外面的白线

3号传感器也是用来巡白线,主要是用来巡虚线的白线

4号是用来停车的

5号是用来判断是否遇到门闸的

6号是用来检测红绿灯的。

最重要是2号和3号的位置。

步骤2 编写程序

安装好之后程序就非常简单了。

1、先判断是不是红绿灯,红灯停,否则前进

2、然后判断是不是遇到了闸门,遇到闸门停止,否则前进

3、再判断是不是到了停车位,是的话停止,否则前进

4、前面三种情况都没遇到

如果传感器1是黑色并且传感器2是白色,小车前进。

如果触感器1是白色,小车左转

如果传感器2是黑色,再判断传感器3,如果2和3都是黑色,小车右转,如果2是黑色,3是白色,小车继续前进。

具体程序如下:

注意:

数字管脚4接的是检测红绿灯的传感器

数字管脚3接的是检测门闸的传感器

数字管脚2接的是检测停车的传感器

数字管脚5接的是巡黑线的传感器

数字管脚6接的是巡白线的传感器

数字管脚11接的是巡虚线的传感器

project-image
代码
void goahead() {

  digitalWrite(7,HIGH);

  analogWrite(9,150);

  digitalWrite(8,HIGH);

  analogWrite(10,150);

}



void goleft() {

  digitalWrite(7,HIGH);

  analogWrite(9,150);

  digitalWrite(8,HIGH);

  analogWrite(10,0);

}



void goright() {

  digitalWrite(7,HIGH);

  analogWrite(9,0);

  digitalWrite(8,HIGH);

  analogWrite(10,150);

}



void goback() {

  digitalWrite(7,LOW);

  analogWrite(9,150);

  digitalWrite(8,LOW);

  analogWrite(10,0);

}



void gostop() {

  digitalWrite(7,HIGH);

  analogWrite(9,0);

  digitalWrite(8,HIGH);

  analogWrite(10,0);

}



void setup(){

  pinMode(4, INPUT);

  pinMode(3, INPUT);

  pinMode(2, INPUT);

  pinMode(5, INPUT);

  pinMode(6, INPUT);

  pinMode(11, INPUT);

  pinMode(7, OUTPUT);

  pinMode(8, OUTPUT);

}



void loop(){

  if (digitalRead(4) == 0) {

    gostop();



  } else {

    if (digitalRead(3) == 0) {

      gostop();



    } else {

      if (digitalRead(2) == 0) {

        gostop();



      } else {

        if (digitalRead(5) == 1 && digitalRead(6) == 0) {

          goahead();



        }

        if (digitalRead(5) == 0) {

          goleft();



        }

        if (digitalRead(6) == 1 && digitalRead(11) == 1) {

          delay(300);

          goright();



        }

        if (digitalRead(6) == 1 && digitalRead(11) == 0) {

          goahead();



        }



      }



    }



  }



}

步骤3 调试演示

调试的时候主要是调试虚线部分,主要调整传感器2和3的位置。

演示结果如下:

效果还不错,如果大家还有什么更好的办法,麻烦告诉我,谢谢!

评论

user-avatar
  • 肥罗-阿勇

    肥罗-阿勇2021.10.09

    就是普通的TT马达

    0
    • 白凡

      白凡2019.12.24

      老哥你用的哪一款马达?

      0